Кластеризация связанных квадратов в MATLAB
Предположим, что существует сетка, которая окрашена в определенный узор:

Нажмите здесь для загрузки координат сетки (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 ответ:
Вы можете использоватьмаркировку связанных компонентов .
В Matlab, предполагая, что ваша матрица содержит только 0 и 1 (или вы можете сделать это так), вы бы использовали bwlabel.
L = bwlabel(data, 8)Теперь
Lбудет матрицей того же размера, что иdataс метками1, 2, 3...вместо 1.
8в качестве второго параметра обозначает связность компонентов.4-connectedозначало бы, что один квадрат связан с другим только в том случае, если он находится слева, справа, выше или ниже площадь.8-connectedозначает, что квадраты также связаны, если они смежны по диагонали, как в правом нижнем углу образца.8- это значение по умолчанию, и вы можете оставить его, но вы должны знать о различии, если вам нужно, чтобы он вел себя по-другому в будущем.