计算凸包边界

时间:2016-02-27 07:05:07

标签: matlab image-processing convex-hull

我正在尝试计算图像中的凸包边界和点。这是我到目前为止所做的计算凸壳区域的。

在最后的子图中,我想计算图像中的凸包点并连接这些点。谁能在这帮助我?

输入图片显示在此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');

1 个答案:

答案 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)将返回(如您的情况)

enter image description here

figure(2)将返回

enter image description here

最后figure(3)将返回

enter image description here

显然可以随意在子图中重新排列这样的情节。您可以选择第一个或第二个解决方案,具体取决于您是要使用第3个(CH_objects)还是第2个(BW)图像作为起点。