2013-12-20 41 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