como esboçar um polígono em uma matriz ou imagem binária, a fim de utilizar as funções de processamento de imagem?

StackOverflow https://stackoverflow.com/questions/786375

Pergunta

Estou desenvolvendo um programa Matlab em que usa polígonos (côncavo ou convexo). Eu preciso usar funções de processamento de imagem como imdilate ou imerode e etc sobre os polígonos. Para este fim, eu deveria converter meus polígonos para a imagem. Gostaria de saber se existe uma maneira de esboçar um polígono diretamente em uma matriz binária (1s para primeiro plano e 0 para o fundo)?

Atualmente, eu uso 'GetFrame', depois 'frame2im' e, em seguida, funções 'im2bw' para fazê-lo. mas sua desvantagem é que eu não tenho controle sobre o tamanho da imagem final (= matriz) (ie. o tamanho da imagem em pixels quando converter uma moldura para a imagem), devido ao fato de que o Matlab não exibe suas parcelas em pixels (?). Então, toda vez que alguém faz 'zoom in' ou 'zoom out' sobre o enredo, a matriz resultante (= imagem) seria diferente.

meu código:

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)
Foi útil?

Solução

Talvez você poderia usar poly2mask para calcular uma região de interesse em vez de tramar-lo usando patch como em seu script. Por exemplo

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)

E o resultado, bw, do código acima é esta imagem.

bw

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top