Это то, что вы можете сделать в MATLAB, используя функцию bwconncomp
.Это функция в панели инструментов обработки изображений.Я не очень много знаю об IDL, у него может быть похожая функция.
bwconncomp
возвращает структуру с некоторой информацией, одно из полей - PixelIdxList
, которое представляет собой массив ячеек с однимэлемент на подключенный компонент.Каждый из этих элементов представляет собой вектор с индексами для одного из элементов массива в подключенном компоненте.Для случая 1
элементов в вашем примере этот массив ячеек будет иметь один вектор с 12 значениями.В случае элементов 0
он будет иметь два вектора, один с 1 значением и один с 8:
>> A = [ 1 0 1 0 0 0 0 ; 1 1 1 0 0 0 1 ; 1 1 0 1 1 1 1 ];
>> CC = bwconncomp(A==1, 8);
>> cellfun(@numel, CC.PixelIdxList)
ans =
12
>> CC = bwconncomp(A==0, 8);
>> cellfun(@numel, CC.PixelIdxList)
ans =
1 8
bwconncomp
принимает 4
или 8
в качестве второго аргумента,Это указывает, что считается связанными элементами (смежные значения, соседи).4 означает, что соединены только 4 элемента N, S, E, W;8 означает также наличие диагональных связей (8 соседей).