在Matlab中识别相邻像素

5
假设 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

我需要识别与特定强度值相邻的所有数字。例如,强度为1、3和4的数字与强度值2相邻。在matlab中有效地完成这项任务的方法是什么?

我可以使用以下方法:

   glcm = graycomatrix(A)

但是,如果A具有更多的强度值,例如10000个灰度共生矩阵将不是一种有效的方法。


除非您对其进行限制(可能组合的数量非常大),否则我怀疑在10000个值的情况下是否会有任何有效的方法。 - nkjt
为什么没有返回 2?有些其他的 2 相邻。 - Luis Mendo
1个回答

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));

在这个例子中,这将产生
result =
     1
     2
     3
     4

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接