识别matlab中的相邻像素

use*_*593 5 matlab image-processing superpixels

我们假设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
Run Code Online (Sandbox Code Playgroud)

我需要识别与特定强度值相邻的所有数字.例如,强度1,3和4与强度值2相邻.在Matlab中执行此操作的有效方法是什么?

我可以使用以下,

   glcm = graycomatrix(A)
Run Code Online (Sandbox Code Playgroud)

但是如果A具有更大数量的强度值,例如10000灰度矩阵将不是有效的方法.

Lui*_*ndo 6

您可以使用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));
Run Code Online (Sandbox Code Playgroud)

在这个例子中,这产生了

result =
     1
     2
     3
     4
Run Code Online (Sandbox Code Playgroud)

请注意,结果包括2因为某些具有值的2像素具有该值的相邻像素.