2013-12-20 47 views
0

給定兩個矩陣A和B(相同大小 - 均僅包含1和0)以及在它們兩個上使用bwconncomp的相關結構。Matlab - 相鄰簇(在兩個不同矩陣中)

如何確定矩陣A中的簇(其位置包含在CC.PixelIdcList中)是否具有與矩陣B中某個簇中的像素位置匹配的位置的相鄰像素?

我想做一個列表,其中包含矩陣A中每個聚類的id和與它相鄰的聚類的id(在矩陣B中)以及在矩陣B中具有位置匹配聚類的相鄰像素的位置。

ID簇(來自A) - ID簇(來自B) - 位置

回答

0

我認爲這可能是更簡單的丟棄使用bwconncomp而是使用bwlabel(或bwlabeln如果這是N維)。

[labelA, numA] = bwlabel (mA); 
[labelB, numB] = bwlabel (mB); 

inter = labelA & labelB; 

cluster_ind = unique (labelA(inter)); 

match_cluster = repmat ({[]}, numA, 1); 
match_ind  = repmat ({[]}, numA, 1); 
for idx = cluster_ind 
    %% index with IDs from A to get... 
    %% ... an array with IDs from B that intersect it 
    match_clusters{idx} = unique (labelB(labelA == idx)); 
    %% ... linear indices for the elements that match something in B 
    match_ind{idx} = find (labelA === idx); 
end 

我假設你有他們,給予bwconncomp如果沒有之前的原始圖像,應該是微不足道的,從它的輸出重建標籤圖像。

+0

謝謝,這可能工作。但是我有一個問題。我想知道矩陣A中的點周圍的簇是否與矩陣B中的簇相對應的位置。我可以使用bwdist(A,'棋盤')來查找周圍的點並且使矩陣C進行比較。然而,問題在於,如果羣集靠近在一起,則可以將矩陣B中的單獨羣集分組在一起。 – Mykje

+0

@Mykje你對集羣A周圍的點有什麼意義?你不需要使用'bwdist',這非常不方便。您可以用一個適當的大小SE來擴大圖像,並減去原始圖像以獲取周圍的像素。但這是一個單獨的問題。 – carandraug

+0

兩個矩陣中的聚類位置沒有重疊。然而,矩陣B中的所有聚類將僅位於距離矩陣A中的聚類的一個像素(它們最接近的位置)。我需要知道哪些聚類是近代的,哪些聚焦點是什麼。 – Mykje