Кластеризация связанных квадратов в MATLAB


Предположим, что существует сетка, которая окрашена в определенный узор: Введите описание изображения здесь

Как вы можете видеть, эти 62 красных квадрата соединены вместе в три различные группы (кластеры). Вы можете загрузить данные по следующей ссылке.

Нажмите здесь для загрузки координат сетки (XX, YY, ZZ) и ее цветов (C)

Затем вы можете создать сетку ниже с помощью этого кода:

load('data.mat');
figure('units','normalized','outerposition',[0 0 1 1]); % Opening big figure
axis equal; axis off;
SURF = surf( XX , YY , ZZ, C);
Теперь я ищу код, который может сегментировать эти три кластера. Пожалуйста, имейте в виду, что вы должны рассматривать эти квадраты как одну группу, которая имеет максимум одно квадратное расстояние разрыва в любом направлении. Это означает, что в данном конкретном случае мы имеем три кластера из 11 , 13 и 38 квадратов.

Заранее благодарю вас за потраченное время.

1 2

1 ответ:

Вы можете использоватьмаркировку связанных компонентов .

В Matlab, предполагая, что ваша матрица содержит только 0 и 1 (или вы можете сделать это так), вы бы использовали bwlabel.

L = bwlabel(data, 8)

Теперь L будет матрицей того же размера, что и data с метками 1, 2, 3... вместо 1.

8 в качестве второго параметра обозначает связность компонентов. 4-connected означало бы, что один квадрат связан с другим только в том случае, если он находится слева, справа, выше или ниже площадь. 8-connected означает, что квадраты также связаны, если они смежны по диагонали, как в правом нижнем углу образца. 8 - это значение по умолчанию, и вы можете оставить его, но вы должны знать о различии, если вам нужно, чтобы он вел себя по-другому в будущем.