2016-02-27 186 views
-1

我正在計算凸包邊界和圖像中的點。這是我迄今爲止計算凸包區域所做的工作。計算凸包邊界

在最後的子圖中,我想計算圖像中的凸包點並連接這些點。有人能幫我一下嗎?

輸入圖像出現在這個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'); 

回答

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() estrapolate所有白色點的座標(行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)圖像作爲起點。