2013-05-14 181 views
0

考虑一个矩阵A:MATLAB计算距离

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(j)的||^2从点A(1,1)到其邻域即A(1:2,1:2)。现在我不明白这个公式是什么意思,因为它没有被指定。这是欧几里德距离吗?

我试图

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

但是,这给了我一个标量。我期待着4个元素的矢量。你可以帮我吗?

+0

你为什么期待四个元素的矢量?那是因为A(1,1)有4个邻居,你想要距离到每个? – Bull 2013-05-14 13:39:34

+0

是A(1,1)有3个邻居和它自己,所以我期待4个距离当然我假设从A(1,1)和A(1,1)的距离是0 – blueSurfer 2013-05-14 19:18:19

回答

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 

现在,如果你想查找一个之间(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) 
+0

这就是我想要做的。我想用邻居块来计算r内的距离,而不是使用if else语句。但我失败:) – blueSurfer 2013-05-14 19:54:22

+0

这个问题的答案可能会有所帮助:http://stackoverflow.com/questions/15576021/efficient-way-to-compute-multiple-euclidean-distances-matlab?rq=1 – Bull 2013-05-14 23:53:03

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 

现在我也搞不懂你的公式...我只是假设这意味着两点之间的平方数值距离,但你必须给我更多的上下文之前我完全理解这个问题......

+0

这个公式用作归一化切割算法的像素之间的相似性度量。 – blueSurfer 2013-05-14 12:20:58

+0

@John熵:嗯....我不是那里的专家,我很害怕。我的解决方案有用吗?似乎最终的输出应该是一个掩码(真/假的矩阵,与'A'相同的大小),它是基于相似性度量*的基础,还是我误解了? – 2013-05-14 12:28:28

+0

我完全一样的代码:)除了距离。 不是一个布尔矩阵,它应该在每个单元中具有从像素i,j到它的邻居的距离(一个标量)。例如,像素i,j和它本身的距离应该为0.我假设公式对于这个领域的专家来说是显而易见的(不是我:)),因为它没有被指定。 – blueSurfer 2013-05-14 12:42:29