0

行列 A を考えます。

A = magic(5)

17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

次の式を計算する必要があります: w_ij = ||I(i) - I(j)|| ^ 2 ポイント A(1,1) からその近傍、つまり A(1:2, 1:2) まで。この式が何を表しているのかは、明記されていないのでよくわかりません。これはユークリッド距離ですか?

私は試した

norm(A(1, 1) - A(1:2, 1:2))

しかし、それは私にスカラーを与えます。私は4つの要素のベクトルを期待しています。手伝って頂けますか?

4

2 に答える 2

0

この式は、 http://www.cs.berkeley.edu/~malik/papers/SM-ncut.pdf (式 11)の 4 ページの文脈で見ることができます。その論文では、強度に F を使用していますが、強度はスカラーであるため、それらの差の 2 乗を取りたいだけです。

A のエントリと A の他のエントリとの親和性を計算する重み行列を計算するとします。A には 25 個のエントリがあるため、重み行列は 25x25 になります。

あなたは明るさだけを気にしているので、これは簡単です:

len = length(A(:));
W = zeros(len);
for i = 1:len
    for j = 1:len
       W(i,j) = (A(i) - A(j))^2;
    end
end

A(1,1) と A(1,2) の間の重みを調べたい場合は、次のように実行できます。

i = sub2ind(size(A), 1, 1)
j = sub2ind(size(A), 1, 2)
W(i, j)

しかし、(NCuts 式に従って) r=1 を設定すると、次のようなものが必要になる場合があります。

sigma= 10;
r = 1;
A = magic(3);
siz = size(A);
len = length(A(:));
W = zeros(len);
for i = 1:len
    for j = 1:len
       [xi,yi] = ind2sub(siz,i);
       [xj,yj] = ind2sub(siz,j);
       if((xi-xj)^2 + (yi-yj)^2) > r^2
           W(i,j) = 0;
       else
           W(i,j) = exp(-(A(i) - A(j))^2 / sigma^2);
       end
    end
end

A11 = sub2ind(siz, 1, 1)
A12 = sub2ind(siz, 1, 2)
W(A11, A12)
于 2013-05-14T13:36:06.967 に答える
0

これには組み込み関数があると確信していますが、手動で実装することはそれほど難しくありません。

% some sample data
A = magic(5);


% generic distance calculator
C = cell(size(A));
for jj = 1:size(A,1)
    for ii = 1:size(A,2)

        % define the edges
        left   = max(1, ii-1);
        right  = min(size(A,2), ii+1);
        top    = max(1, jj-1);
        bottom = min(size(A,1), jj+1);

        % extract the neighborhood
        N = A(left:right, top:bottom);

        % compute the squared distance
        C{ii,jj} = (N-A(ii,jj)).^2;

    end
end

今、私はあなたの式も理解していません...私はそれが2点間の数値距離の2乗を意味すると仮定しましたが、問題を完全に理解する前に、より多くのコンテキストを提供する必要があります...

于 2013-05-14T12:11:17.723 に答える