2013-12-20 4 views
0

Для двух матриц A и B (одного размера - оба содержат только 1 и 0) и связанных структур с использованием bwconncomp на обоих из них.Matlab - соседние кластеры (в двух разных матрицах)

Как определить, существуют ли кластеры (положение которых содержится в CC.PixelIdcList) в матрице A имеют соседние пиксели с положением, которое соответствует положению пикселей в одном из кластеров в матрице B?

Я хотел бы создать список, содержащий идентификатор каждого кластера в матрице A и идентификатор соседних с ним кластеров (в матрице B), а также положение соседних пикселей, у которых есть кластеры соответствия положения в матрице B.

ID кластера (от A) - ID кластеров (от B) - позиции

ответ

0

Я считаю, что может быть проще отказаться от использования bwconncomp и вместо этого использовать bwlabel (или bwlabeln если это Н мерный).

[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

Спасибо, что это может сработать. Однако у меня есть проблема. Я хотел бы найти, если точки окружающих кластеров в матрице А находятся в положениях, соответствующих кластерам в матрице В. Я мог бы использовать bwdist (A, 'шахматная доска'), чтобы найти окружающие точки и сделать матрицу C для сравнения. Однако проблема состоит в том, что отдельные кластеры в матрице B могут быть сгруппированы вместе, если кластеры близки друг к другу. – Mykje

+0

@Mykje Что вы имеете в виду с точками, окружающими кластер A? Вам не нужно использовать 'bwdist', это очень непросто. Вы можете расширить изображение с помощью присвоенного размера SE и вычесть исходное изображение, чтобы получить окружающие пиксели. Но это отдельная проблема. – carandraug

+0

Не существует перекрытия позиций кластеров в двух матрицах. Тем не менее, все кластеры в матрице B будут располагаться только на одном пикселе (где они находятся ближе всего) от кластера в матрице A. Мне нужно знать, какие кластеры являются смежными и какие являются смежными точками. – Mykje

Смежные вопросы