找到最低邻居matlab

时间:2012-11-09 16:19:57

标签: matlab map

我正在尝试编写一个函数

[offset,coffset]=findLowNhbr(map) 

对于map中的每个像素,找到该像素的八个邻居,并返回两个矩阵,其中行和列偏移都是最低邻居(使用数字-1,0和1)。边界像素的行和列都有0个偏移,因为它们没有邻居。

以下是我认为此功能的总体规划应该是:

  1. 对于每个点,找到八个最近的邻居。
  2. 如果邻居低于该点,则返回-1
  3. 如果邻居与该点的高度相同,则返回0
  4. 如果邻居高于该点,则返回+1
  5. 将这些偏移存储在两个矩阵中。
  6. 我完全不知道从哪里开始,所以欢迎任何建议或问题!

2 个答案:

答案 0 :(得分: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)的所有邻居的信息。

答案 1 :(得分: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

就像我说的,这只会让你开始!