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