我正在尝试计算图像中的凸包边界和点。这是我到目前为止所做的计算凸壳区域的。
在最后的子图中,我想计算图像中的凸包点并连接这些点。谁能在这帮助我?
输入图片显示在此link
中谢谢..
subplot(2,2,1);
I = imread('shape.jpg');
imshow(I);
title('Original');
subplot(2,2,2);
BW = im2bw(I, 0.5);
BW = imcomplement(BW);
imshow(BW);
title('Binary');
subplot(2,2,3);
CH_objects = bwconvhull(BW,'objects');
imshow(CH_objects);
title('Objects Convex Hull');
答案 0 :(得分:2)
如果我理解你的目标是什么,你可以这样做:
close all;
figure(1);
subplot(2,2,1);
I = imread('shape.jpg');
imshow(I);
title('Original');
subplot(2,2,2);
BW = im2bw(I, 0.5);
BW = imcomplement(BW);
imshow(BW);
title('Binary');
subplot(2,2,3);
CH_objects = bwconvhull(BW,'objects');
imshow(CH_objects);
title('Objects Convex Hull');
figure(2);
[r,c]=find(CH_objects);
CH=convhull(r,c);
plot(r(CH),c(CH),'*-');
figure(3);
[r2,c2]=find(BW);
CH2=convhull(r2,c2);
plot(r2(CH2),c2(CH2),'*-');
让我们更详细地看看这段代码的作用
为了清楚起见,我在figure(2)
和figure(3)
中绘制了最终的绘图,因此subplot()
不会改变。
但是,在CH_objects
上,我们使用find()
来预测所有白点的坐标(行r1
和列c1
)。在这些点上,我们执行凸包,并在CH1
中返回凸包点的索引。现在在figure(2)
中,我们绘制了这些点的坐标,其中每个点都标有星号*
,以及连接这些点的法线。
此外,你可以做同样的事情,但从BW图像开始而不是从CH_objects
开始。因此,您打开第三个数字并重复相同的过程,但从BW
开始。
在这种情况下,figure(1)
将返回(如您的情况)
而figure(2)
将返回
最后figure(3)
将返回
显然可以随意在子图中重新排列这样的情节。您可以选择第一个或第二个解决方案,具体取决于您是要使用第3个(CH_objects
)还是第2个(BW
)图像作为起点。