Как нарисовать многоугольник в матрице или двоичном изображении, чтобы использовать функции обработки изображений? - PullRequest
7 голосов
/ 24 апреля 2009

Я разрабатываю программу Matlab, в которой я использую полигоны (вогнутые или выпуклые). Мне нужно использовать функции обработки изображений, такие как Imdate или Imerode и т. Д. На полигонах. Для этого я должен преобразовать свои полигоны в изображение. Интересно, есть ли способ нарисовать многоугольник непосредственно в двоичной матрице (1 для переднего плана и 0 для фона)?

В настоящее время я использую для этого функции getframe, затем frame2im и im2bw. но его недостаток заключается в том, что я не могу контролировать размер конечного изображения (= матрица) (т.е. размер изображения в пикселях при преобразовании кадра в изображение) из-за того, что matlab не отображает свои графики в пикселях (?). Поэтому каждый раз, когда кто-нибудь делает «увеличение» или «уменьшение» на графике, результирующая матрица (= изображение) будет отличаться.

мой код:

Polygon = [ 15    45    33    30  40 23 ; 9    9    24    15 13 13]';
figure(1); clf; patch(Polygon(:,1),Polygon(:,2),'black');
axis off

%convert the plot to binary image
frame = getframe(gca);
im =frame2im(frame);
level = graythresh(im);
bw = ~im2bw(im,level);

%draw the resulting image
imtool(bw)
%dilate the image
SE = strel('square',5);
bw2 = imdilate(bw,SE);

%draw the dilated image
imtool(bw2)

1 Ответ

12 голосов
/ 24 апреля 2009

Возможно, вы могли бы использовать poly2mask для вычисления интересующей области вместо того, чтобы наносить ее с помощью патча, как в вашем скрипте. Например

Polygon = [ 15    45    33    30  40 23 ; 9    9    24    15 13 13]';
ImageWidth = 100;
ImageHeight = 50;
bw = poly2mask(Polygon(:,1),Polygon(:,2),ImageHeight,ImageWidth);
imshow(bw)

И результат bw для приведенного выше кода - это изображение.

bw

...