2016-05-28 9 views
1

私はサイズがmxnのマスクを持っています。Matlab - ラインマスクを作成する

このマスクに線を追加して、それを通過するすべての点が真になるようにしたいと思います。

行は、(x1、y1)、(x2、y2)の2点で定義されます。

この結果を得る最も良い方法は何ですか?

私は画像処理ツールボックスしか持っていないことに注意してください。可能な入力のための

例、および所望の出力:

%generates a mask 
m = 152; n=131; 
mask = false(m,n); 
%example for possible input points 
y1 = 68; x1 = 69; 
y2 = 28; x2 = 75; 

% code for adding the line into the mask% 

imshow(mask); 

望ましい結果:

enter image description here

ありがとう!

+0

ですか? – Suever

+0

@Suever - 2つの違いは何ですか? – drorco

+1

ある場合には、2つの点の間にあるものだけを必要とし、もう1つは、無限の線に沿ってそれらの2つの点を通過するものを必要とします。 – Suever

答えて

2

まず、ポイント間の距離(ピクセル単位)を計算することによって、2つのポイント間のピクセル数を決定できます。 linspaceを使用して、このポイント数を指定する2つのエンドポイント間のポイントの直線的な間隔を作成することができます。その結果を丸めてピクセル座標を得ることができます。

次に、sub2indを使用して、マスク内のこれらの値を1に設定することができます。それはラインまたはラインセグメント

% Distance (in pixels) between the two endpoints 
nPoints = ceil(sqrt((x2 - x1).^2 + (y2 - y1).^2)) + 1; 

% Determine x and y locations along the line 
xvalues = round(linspace(x1, x2, nPoints)); 
yvalues = round(linspace(y1, y2, nPoints)); 

% Replace the relevant values within the mask 
mask(sub2ind(size(mask), yvalues, xvalues)) = 1; 

enter image description here

関連する問題