栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

表示并解决给定图像的迷宫

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

表示并解决给定图像的迷宫

这是一个解决方案。

  1. 将图像转换为灰度(尚未二进制),调整颜色的权重,以使最终的灰度图像大致均匀。您只需在Photoshop中控制图像->调整->黑白中的滑块即可完成此操作。
  2. 通过在Photoshop中的“图像”->“调整”->“阈值”中设置适当的阈值,将图像转换为二进制。
  3. 确保正确选择阈值。使用魔术棒工具,公差为0,点采样,连续,无抗锯齿。检查选择中断处的边不是由错误阈值引入的错误边。实际上,从一开始就可以访问此迷宫的所有内部点。
  4. 在迷宫上添加人工边界,以确保虚拟旅行者不会在它周围走动:)
  5. 以您喜欢的语言实现广度优先搜索(BFS),并从头开始运行它。我更喜欢MATLAB来完成这项任务。正如@Thomas已经提到的那样,无需弄乱图的常规表示。您可以直接使用二值化图像。

这是BFS的MATLAB代码:

function path = solve_maze(img_file)  %% Init data  img = imread(img_file);  img = rgb2gray(img);  maze = img > 0;  start = [985 398];  finish = [26 399];  %% Init BFS  n = numel(maze);  Q = zeros(n, 2);  M = zeros([size(maze) 2]);  front = 0;  back = 1;  function push(p, d)    q = p + d;    if maze(q(1), q(2)) && M(q(1), q(2), 1) == 0      front = front + 1;      Q(front, :) = q;      M(q(1), q(2), :) = reshape(p, [1 1 2]);    end  end  push(start, [0 0]);  d = [0 1; 0 -1; 1 0; -1 0];  %% Run BFS  while back <= front    p = Q(back, :);    back = back + 1;    for i = 1:4      push(p, d(i, :));    end  end  %% Extracting path  path = finish;  while true    q = path(end, :);    p = reshape(M(q(1), q(2), :), 1, 2);    path(end + 1, :) = p;    if isequal(p, start)       break;    end  endend

它确实非常简单和标准,因此在Python或其他任何方式中实现它应该没有困难。

这是答案:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号