考虑矩阵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元素的向量。你能救我吗?
答案 0 :(得分: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
现在我也不理解你的公式......我只是假设它意味着两点之间的平方数字距离,但在我完全理解问题之前你必须给我更多的背景...... / p>
答案 1 :(得分:0)
您可以在http://www.cs.berkeley.edu/~malik/papers/SM-ncut.pdf第4页的上下文中看到该公式(公式11)。 在那篇论文中,他们使用F作为强度,我假设你有我。 由于你的强度是标量,你只想取其差异的平方。
您想要计算一个权重矩阵,用于计算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)