如果我理解正確你的目標是什麼,你可以做這樣的事情:
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)
將返回(如你的情況)
而figure(2)
將返回
最後figure(3)
返回
很明顯,您可以隨意在您的副圖中重新排列這些圖。您可以選擇第一種解決方案或第二種解決方案,具體取決於您是要使用第3個(CH_objects
)還是第2個(BW
)圖像作爲起點。