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

表示并解决给定图像的迷宫,第1张

表示并解决给定图像迷宫

这是一个解决方案。

  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或其他任何方式中实现它应该没有困难。

这是答案:



欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5663378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存