2013-05-14 275 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