poly2mask not creating filled mask

I am trying to create a mask from the attached image (sampleEdges.png), which was obtaiend by applying the edge command to the sample image (sampleImage.jpg). I have obtained the coordinates of the area I want to mask using regionprops. The MaskBoundary looks like as shown in MaskBoundary.png. I now want to create a mask from the MaskBoundary coordinates using poly2mask, but it does not create a filled mask (mask.png)
sample = imread('sampleImage.jpg')
sampleEdges = edge(rgb2gray(sample),'canny',0.1,25);
regions = regionprops(sampleEdges, 'all');
[~,index] = sortrows([regions.Area].'); % Sort by descending area
regions = regions(index(end:-1:1));
MaskBoundary = bwtraceboundary(sampleEdges,[regions(2).PixelList(1,2) regions(2).PixelList(1,1)],'n');
MaskX = MaskBoundary(:,2);
MaskY = MaskBoundary(:,1);
Mask = poly2mask(MaskX,MaskY,size(sample,1),size(sample,2))
The two regions are the ones that enclose the red markings in ROI.png. But regionprops can only find the right one.

Respuestas (1)

Image Analyst
Image Analyst el 4 de Mzo. de 2020

0 votos

Use bwboundaries() instead of bwtraceboundary().

2 comentarios

Afzal
Afzal el 4 de Mzo. de 2020
Editada: Afzal el 4 de Mzo. de 2020
With bwboundaries() I cannot specify the start point, and it does not seem to find the region I want. I am also having issues getting the left ROI (see edited post)
Image Analyst
Image Analyst el 5 de Mzo. de 2020
How do you identify the one you want? A week or two ago I gave you code to identify the curved bar. Why did you discard that approach?

Iniciar sesión para comentar.

Productos

Versión

R2016b

Etiquetas

Preguntada:

el 4 de Mzo. de 2020

Comentada:

el 5 de Mzo. de 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by