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 の graycomatrix は効率的な方法ではありません。

4

1 に答える 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その値を持つ隣接するピクセルがあるため、結果に含まれることに注意してください。

于 2015-07-20T13:45:50.180 に答える