Error with bwtraceboundary function

1 次查看(过去 30 天)
Hi all,
I have a function where I have a set of x,y coordinates for points to a contour as input. I calculate its derivatives using spline interpolation. When I take ellipse or circle, i can manually calculate 8 points on contour and use this. But When I draw an arbitrary shape like this:
i need to get a point set first. It seems to me that bwtraceboundary is the function that i need to use, here is the code that i write; i check the beginning points with pixelinfo
I = imread('example3.png');
figure(1)
imshow(I)
BW = im2bw(I);
figure(2)
imshow(BW)
impixelinfo
contour = bwtraceboundary(BW,[r c],'W',8,Inf,'counterclockwise');
figure(3)
imshow(I)
hold on;
plot(contour(:,2),contour(:,1),'g','LineWidth',3);
it gives me an empty contour.
Actually as I will always have a two color picture and one boundary there might be an easier way.
Any suggestion?
  1 个评论
ttopal
ttopal 2017-2-14
I am checking the pixel values of binary image, where i have the contour it shows 0 and empty area as 1. Cant i change it to be otherwise? Then
[rows, columns] = find(BW ~= 0)
should be all I need. Am I wrong?

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2017-2-14
The [r, c] you supply needs to be a point that is on the boundary. You do not show how you set [r, c]
You can use find() to locate a pixel.
  3 个评论
Walter Roberson
Walter Roberson 2017-2-14
Yes you need to reverse your mask so that the boundary is 1 and the background is 0
ttopal
ttopal 2017-2-14
Thanks Walter, now I have the contour correct with this code :
I = imread('example3.png');
figure(1)
imshow(I)
IM = im2bw(I);
IM2 = imcomplement(IM);
[r, c] = find(IM2, 1, 'first');
mycontour = bwtraceboundary(IM2, [r c] ,'E',8,Inf,'counterclockwise') ;
figure(3)
imshow(I)
hold on;
plot(mycontour(:,2),mycontour(:,1),'g','LineWidth',1);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Contour Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by