2012-11-09 56 views
1

我試圖寫一個函數找到最低的鄰居MATLAB

[offset,coffset]=findLowNhbr(map) 

,對於在map每個像素髮現八個相鄰的像素,並返回兩個矩陣同時與行和列偏移到最低鄰居(使用數字-1,0和1)。因爲行和列都沒有鄰居,所以邊界像素會被賦予0偏移量。

以下是我認爲這個功能的總體規劃應該是:

  1. 對於每一個點,找到八個最近的鄰居。
  2. 如果鄰居比點下,返回-1
  3. 如果鄰居是在相同的高度爲點,則返回0
  4. 如果鄰居比點高,則返回1
  5. 將這些偏移量存儲在兩個矩陣中。

我完全喪失了從哪裏開始,所以任何建議或問題,歡迎!

+0

如果有關係會發生什麼? – Jonas

+1

你可以舉一個(小)地圖的例子和所需的輸出矩陣嗎? –

回答

1

完全知道你的意思,但這裏的東西讓你對你的方式:

neighbors = cell(size(map)); 

for ii = 2:size(map,1)-1 
    for jj = 2:size(map,1)-1 

     % current element 
     M = map(ii,jj); 

     % extract neighbors 
     N = map(ii-1:ii+i, jj-1:jj+1); 

     % compare values and store 
     neighbors{ii,jj} = M<N - M>N;    

    end 
end 

這將導致電池陣列neighbors,它包含相同數量的元素map的,但每個條目看起來像這樣:

>> neighbors{2,3} 
ans = 
    0 -1 1 
    1 0 -1 
    1 0 -1 

這是像素(2,3)的所有鄰居的信息。

+0

絕對是一個很好的起點!在找到鄰居之後,我需要返回兩個與地圖尺寸相同的矩陣,以便地圖中的像素(r,c)具有像素(r + roffset(r,c),c + coffset(r,c))在地圖中作爲其最低鄰居。 – user1812719

+0

@ user1812719:你需要幫助嗎?還是在我的答案中足夠了? –

0

編輯:這是如何將inf添加到地圖的各個方面,假設map_original是您的原始地圖。

map=inf(size(map_original)+2) 
map(2:end-1,2:end-1) = map_original 

假設你已經填補上各方的infs地圖,這裏是什麼讓你開始:

area =-1:1; 
for i=2:size(map,1)-1 
    for j = 2:size(map,2)-1 
     bestfound=inf; 
     bestk=0; 
     bestl=0; 
     for k = area 
      for l=area 
       if k~=0 && l~=0 

就像我說的,這樣只會讓你開始!

+0

看起來像你在Python中編程時間太長了:p –

+0

我承認矢量化解決方案在這裏效率更高,但這也可能更難掌握。 –

+0

有點困惑,你的意思是「填充地圖」。我是一位編程新手! – user1812719