2015-07-20 2 views
4

Предположим А,определить соседние пиксели в 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 graycomatrix не будет эффективным методом.

+0

Ну, я сомневаюсь, что будет эффективный метод для случая 10000 значений, если вы не можете наложить на него еще несколько ограничений (из-за большого количества возможных комбинаций). – nkjt

+0

Почему не возвращается '2'? Есть '2' рядом с некоторыми другими' 2' –

ответ

5

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

% // 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 имеют соседние пиксели с этим значением.