【问题标题】:find lowest neighbor matlab找到最低邻居matlab
【发布时间】:2012-10-29 23:53:53
【问题描述】:

我正在尝试编写一个函数

[offset,coffset]=findLowNhbr(map) 

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

我认为这个功能的总体规划应该是这样的:

  1. 对于每个点,找出最近的八个邻居。
  2. 如果邻居低于该点,则返回-1
  3. 如果邻居与该点在同一高度,则返回 0
  4. 如果邻居高于该点,则返回+1
  5. 将这些偏移量存储在两个矩阵中。

我完全不知道从哪里开始,所以欢迎任何建议或问题!

【问题讨论】:

  • 如果出现平局怎么办?
  • 你能举一个(小)地图的例子,以及所需的输出矩阵吗?

标签: matlab map


【解决方案1】:

编辑:假设 map_original 是您的原始地图,您可以通过这种方式将 inf 添加到地图的各个方面。

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

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

【讨论】:

  • 看来你用 Python 编程太久了:p
  • 我承认矢量化解决方案在这里会更有效,但这也可能更难掌握。
  • 有点困惑你所说的“填充地图”是什么意思。我有点编程菜鸟!
  • 更新了帖子以包含执行此操作的方法。
【解决方案2】:

完全确定你的意思,但这里有一些东西可以帮助你顺利完成:

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)的所有邻居的信息。

【讨论】:

  • 绝对是一个很好的起点!找到邻居后,需要返回两个和map大小相同的矩阵,这样map中的像素(r,c)就有像素(r+roffset(r,c), c+coffset(r,c))在地图中作为它的最低邻居。
  • @user1812719:您是否需要帮助,或者我的回答是否足够?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2020-01-29
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多