Определить соседние пиксели в 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
иметь смежные пиксели с этим значением.