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

我很确定有一个内置函数,但是手动实现并不难:

% 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

现在我也不明白你的公式......我只是假设它意味着两点之间的平方数字距离,但你必须给我更多的背景才能完全理解这个问题......

于 2013-05-14T12:11:17.723 回答
0

您可以在http://www.cs.berkeley.edu/~malik/papers/SM-ncut.pdf (等式 11)的第 4 页的上下文中看到该公式。在那篇论文中,他们使用 F 表示强度,我假设你有 I。由于你的强度是标量,你只想取它们差异的平方。

您想要计算一个权重矩阵,该矩阵计算 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)

但是如果你设置 r=1(根据 NCuts 公式),那么你可能想要这样的东西:

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 回答