【问题标题】:Detecting rectangles in maze environment在迷宫环境中检测矩形
【发布时间】:2014-08-12 14:32:32
【问题描述】:

[这是我在这个网站上的第一篇文章,我会尽可能完整,但如果我的问题陈述不清楚或代码格式不符合标准,请原谅我]

我正在尝试在迷宫环境中检测最大可能的矩形,因此我可以使用凸优化方法来维持迷宫中的视线连通性。这意味着任何其他凸形也可以,尽管我认为考虑到我正在使用的地图,矩形最容易实现(见下文)这也意味着矩形可以(并且应该)重叠,即在每个迷宫弯曲处应该至少是 2 个重叠的矩形。

我最初的想法是确定迷宫中的所有边缘,产生一个矩形网格,然后反复检查哪些矩形可以组合成凸形(如果有更好的方法来找到这些矩形,我会喜欢听!)。

我目前的代码如下所示:

% import the maze image
I = imread('Maps/Maze1.png');

% determine edge cells using image dilation
se = strel('square',3);
I1 = imdilate(I,se);
BW = I1-I;

% obtain hough transform
[H, THETA, RHO] = hough(BW,'Theta',[-90 0]);
PEAKS = houghpeaks(H,5000,'Threshold',1e-6);        % threshold set low to find enough lines. Diagonals are deleted later
LINES = houghlines(BW, THETA, RHO, PEAKS);

% plot the original 'edge' image
subplot(2,1,1);
imshow(mat2gray(BW))
colormap('gray')
title('Original Image');

% plot the hough transform for reference
subplot(2,1,2);
imshow(imadjust(mat2gray(H)),'XData',THETA,'YData',RHO,...
      'InitialMagnification','fit');
title('Hough Transform of Image');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);

% plot the original image and all horizontal and vertical detected edges
figure;
imagesc(I);
colormap('gray')
hold on

for k = 1:length(LINES)
    xy = [LINES(k).point1; LINES(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
end

虽然检测到了一些边缘,但大多数仍然没有标记。将峰值阈值设置得较低并没有帮助。有谁知道为什么没有检测到剩余的边缘?我在下面添加了我的脚本生成的图。

边缘检测结果:

【问题讨论】:

  • 这是一个有趣的问题,但也许只使用 matlab 标签标记它会缩小受众范围。尝试添加更多标签(也许是图像处理?)。
  • 感谢您的建议,添加了更多标签
  • 一张图片真的很有帮助。你现在应该有足够的代表了。
  • 我已经从问题中添加了一些图片并更新了问题描述

标签: matlab image-processing convex-polygon


【解决方案1】:

您可以使用Hough transform 来检测直线。您必须使用的函数是edge()hough()houghpeaks()houghlines()

【讨论】:

  • 感谢您的建议。 edge() 函数对我不起作用,因为边缘并不总是在墙的“内部”检测到,但我通过使用 imdilate() 和减法修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多