2014-04-14 29 views
0

生成的數字下面這篇文章由史蒂夫:http://blogs.mathworks.com/steve/2009/02/27/using-ismember-with-the-output-of-regionprops/ismember未能找到bwlabel

我想應用在一個非常簡單的例子。下面是我的邏輯圖象,它顯然有三個對象:

enter image description here

這是我使用的代碼:

[L_t,n_t] = bwlabel(logical_image); 
iii = find(L_t == 2); 
bbb = ismember(L_t,iii); 
imshow(bbb); 

但所有我在bbb得到的是一個空矩陣。即與原始尺寸相同但完全由0組成的邏輯圖像。

n_t顯示找到3個對象。 L_t的最大值是3。那麼ismember怎麼找不到2?

回答

1

它不會因爲iii工作是指數的(位置在哪裏L_tL_t == 2)列表,L_t是一個數字從1至3這是一樣,他們在原來的例子在做什麼:

idx = find((100 <= area_values) & (area_values <= 1000)) 

這裏,area_values是來自不同區域的面積的regionprops在標籤圖像拍攝的列表。它與L中的區域數(不同值)具有相同的長度,n。例如如果圖像中有10個區域,區域1,3和7的區域在指定範圍內,則idx的輸出爲[1 3 7]

該隨後選擇的L其中L是1,3,或7中的部分:

bw2 = ismember(L, idx); 

在你的情況,iii是像素索引的列表,而不是它們的值。因此,這些值都不是1,2或3(即使在查找等於2的值時),因爲這些值是圖像前三個像素的索引。因此L_t中的值都不匹配iii中的任何值。

如果你想要的是一個圖像只顯示第二對象的所有,那麼這就足夠了:

bbb = L_t==2; 
imshow(bbb)