Подсчет островов в матрице (желательно в IDL) - PullRequest
0 голосов
/ 19 мая 2018

Как я могу посчитать количество значений, которые являются смежными в матрице?Например, если

A = [ 1 0 1 0 0 0 0 \ 1 1 1 0 0 0 1 \ 1 1 0 1 1 1 1 ]

является 7на 3 матрицы, то результат должен указывать, что есть 12 смежных значений, которые равны «1» (выделены жирным шрифтом), что есть 8 смежных значений 0 (выделены курсивом) и одно значение «0».Код в IDL предпочтительнее, но MATLAB также будет полезен.

1 Ответ

0 голосов
/ 19 мая 2018

Это то, что вы можете сделать в 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 соседей).

...