Определить соседние пиксели в Matlab

Давайте предположим, что быть,

     1 1 1 1 1 1
     1 2 2 3 3 3
     4 4 2 2 3 3
     4 4 2 2 2 3
     4 4 4 4 3 3
     5 5 5 5 5 5

Мне нужно идентифицировать все числа, которые примыкают к определенному значению интенсивности. Например, интенсивности 1, 3 и 4 смежны со значением интенсивности 2. Как эффективно это сделать в Matlab?

Я могу использовать следующее,

   glcm = graycomatrix(A)

Но если А имеет большее количество значений интенсивности, например, 10000 серая матрица не будет эффективным методом.

1 ответ

Решение

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

% // Data:
A = [ 1 1 1 1 1 1
      1 2 2 3 3 3
      4 4 2 2 3 3
      4 4 2 2 2 3
      4 4 4 4 3 3
      5 5 5 5 5 5 ];
value = 2;
adj = [0 1 0; 1 0 1; 0 1 0]; %// define adjacency. [1 1 1;1 0 1;1 1 1] to include diagonals

%// Let's go
mask = conv2(double(A==value), adj, 'same')>0; %// pixels adjacent to those equal to `value`
result = unique(A(mask));

В примере это производит

result =
     1
     2
     3
     4

Обратите внимание, что результат включает в себя 2 потому что некоторые пиксели со значением 2 иметь смежные пиксели с этим значением.

Другие вопросы по тегам