2016-05-28 2 views
1

У меня есть маска размера mxn.Matlab - создать маска линии

Я хотел бы добавить строку к этой маске, чтобы все точки, проходящие через нее, были установлены в true.

Линия определяется двумя точками: (x1, y1), (x2, y2).

Каков наилучший способ достичь этого результата?

Обратите внимание, что у меня есть только панель обработки изображений.

Пример возможного ввода и требуемый выход:

%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 - в чем разница между ними? – drorco

+1

В одном случае вы хотите только вещи между двумя точками, а другие - что угодно, по бесконечной линии, проходящей через эти две точки. – Suever

ответ

2

Мы можем сначала определить, сколько пикселей находится между двумя точками, вычисляя расстояние (в пикселях) между точками. Затем мы можем использовать linspace для создания линейного расстояния между точками между двумя конечными точками, определяющими это количество точек. Затем мы можем округлить результат, чтобы получить координаты пикселей.

Затем мы можем использовать 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

Смежные вопросы