0

ある手法を調べているときに出会った理由のコードをここに投稿します。

   Y = repmat((1:m)', [1 n]);
   X = repmat(1:n, [m 1]) - labels_left;
   X(X<1) = 1;
   indices = sub2ind([m,n],Y,X);

  final_labels = labels_left;
  final_labels(abs(labels_left - labels_right(indices))>=1) = -1;

上記のコード ラベルでは、左が単一チャンネルの画像です。[mn] はその画像のサイズです。上記のコードでこの sub2ind がどのように機能するかを知りたいです。また、最後のステートメントで問題に直面しています。

  labels_right(indices)

上記の式が何に評価されるか。ここで右のラベルも画像です

4

1 に答える 1

1

たぶん、より小さな例が理解に役立つかもしれません:

%# image matrix
M = rand(4,3)
[m n] = size(M)

%# meshgrid, and convert to linear indices
[X,Y] = meshgrid(1:n,1:m)
indices = sub2ind([m,n],Y,X)

%# extract those elements
M(indices)

行列 M:

>> M
M =
      0.95717      0.42176      0.65574
      0.48538      0.91574     0.035712
      0.80028      0.79221      0.84913
      0.14189      0.95949      0.93399

すべての点の (x,y) 座標のグリッド:

>> X,Y
X =
     1     2     3
     1     2     3
     1     2     3
     1     2     3
Y =
     1     1     1
     2     2     2
     3     3     3
     4     4     4

線形インデックスに変換:

>> indices
indices =
     1     5     9
     2     6    10
     3     7    11
     4     8    12

次に、それらのインデックスを使用して行列にインデックスを付けます。

>> M(indices)
ans =
      0.95717      0.42176      0.65574
      0.48538      0.91574     0.035712
      0.80028      0.79221      0.84913
      0.14189      0.95949      0.93399

次の点に注意してくださいM(indices(i,j)) = M(Y(i,j)),X(i,j))

于 2012-06-19T17:53:04.053 に答える