# Unable to draw just the boundary of an image

2 visualizaciones (últimos 30 días)
Warid Islam el 19 de Jul. de 2021
Comentada: Warid Islam el 19 de Jul. de 2021
Hi,
I want to draw just the boundary of a ROI. segFP1.jpg is the original image. I applied the code below but I don't get the desired result. My result is displayed in e1.jpg. Any suggestions would be appreciated. Thank you.
figure,imshow(I)
I1=bwperim(I,8);
figure,imshow(I1)
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

DGM el 19 de Jul. de 2021
Editada: DGM el 19 de Jul. de 2021
Well, you're loading a grayscale image subject to destructive compression as a jpg file. At no point do you explicitly threshold the image, so it's probably just getting thresholded at I>0, and so a bunch of compression artifacts are part of the binarized image.
I=imread('segFP1.jpg'); % this is not a binary image
I = I>128; % threshold it somewhere
I1=bwperim(I,8); % otherwise this will
subplot(2,1,1)
imshow(I)
subplot(2,1,2)
imshow(I1)
##### 3 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
DGM el 19 de Jul. de 2021
Editada: DGM el 19 de Jul. de 2021
I'm not sure what's going on here, so let's back up and clarify variable names a bit.
BW = I>128; % binarized image
BWP=bwperim(BW,8); % perimeter of BW
M = true(size(I)); % select everything
S = regionprops(M,I,'weightedcentroid');
C = S(1).WeightedCentroid
[y x] = find(BWP);
D = sqrt((C(1,1)-x).^2 + (C(1,2)-y).^2)
subplot(2,1,1)
imshow(I)
subplot(2,1,2)
imshow(BWP); hold on
plot(C(1,1),C(1,2),'x')
Given that you're taking the weighted centroid instead of the regular centroid (and given the syntax) it's implied that you're trying to operate on an intensity image, but instead, you're using the perimeter (so I made the substitution). If you're just trying to find the centroid of the perimeter, then you don't need to use M. You could just do:
S = regionprops(BWP,'centroid');
The weightedcentroid for a binary object is the same as its regular centroid.
If you're taking the weighted centroid of the intensity image, there is a difference between using M to select everything and doing something like this:
S = regionprops(BW,I,'weightedcentroid'); % the better way
because using BW to select the object cuts off all the garbage left behind by jpg compression, and any other noise in the image background -- which would otherwise influence the weighted average (centroid).
Unless you did something elsewhere, doing this:
x = I1(:, 2);
y = I1(:, 1);
just selects the first two columns of the perimeter image, which are all zero. Using find() will get the coordinates.
Warid Islam el 19 de Jul. de 2021
Hi @DGM,
That worked perfectly. Thanks a lot.

Iniciar sesión para comentar.

### Categorías

Más información sobre Image Category Classification en Help Center y File Exchange.

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by