2016-09-27 87 views
0

我不能正確理解函數'regionprops'。例如,如果我創建三個不同領域的二元矩陣,它只是給了我一箇中心點作爲輸出:regionprops返回單個結果

a = zeros(100,100); 
a(1:49,1:49) = 1; 
a(1:25,75:100) = 1; 
a(51:100,51:100)= 1; 
spy(a) 

regionprops(a,'Centroid') 

但是,如果我加入這也絕對沒有什麼行

a=bwmorph(a,'erode',0); 

,我得到三個不同的中心點作爲輸出,每個區域一個。爲什麼他們會給出不同的輸出結果,並且真的需要添加無用的代碼行?

回答

1

輸入到regionpropsshould be a logical array。如果不是,則它是assumed that the input is a labels matrix,因此它的處理就好像所有的1值都是相同對象的一部分。

您可以通過顯式地轉換爲logical矩陣

regionprops(logical(a), 'Centroid') % or regionprops(a == 1, 'Centroid') 

解決這個問題的更好的選擇可能是使a一個logical使用false而不是zeros構建a開始說起。

a = false(100, 100); 
a(1:49,1:49) = 1; 
a(1:25,75:100) = 1; 
a(51:100,51:100)= 1; 

爲什麼無操作侵蝕導致其工作的原因,是的bwmorph的輸出爲邏輯矩陣。

+0

對於'false' - +1。我正要發表評論。 – rayryeng