Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 迷宫环境中的矩形检测_Matlab_Image Processing_Convex Polygon - Fatal编程技术网

Matlab 迷宫环境中的矩形检测

Matlab 迷宫环境中的矩形检测,matlab,image-processing,convex-polygon,Matlab,Image Processing,Convex Polygon,[这是我在本网站上的第一篇帖子,我会尽量完整,但如果我的问题陈述不清楚或代码格式不符合标准,请原谅] 我试图在迷宫环境中检测最大可能的矩形,因此我可以使用凸优化方法来保持迷宫中的视线连通性。这意味着任何其他凸面形状也可以,尽管我认为矩形最容易实现,因为我使用的是地图(见下文),这也意味着矩形可以(也应该)重叠,即在每个迷宫弯曲处至少应有2个重叠矩形 我最初的想法是确定迷宫中的所有边,生成一个矩形网格,然后反复检查哪些矩形可以组合成凸面形状(如果有更好的方法找到这些矩形,我很乐意听到!) 到目前

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

我试图在迷宫环境中检测最大可能的矩形,因此我可以使用凸优化方法来保持迷宫中的视线连通性。这意味着任何其他凸面形状也可以,尽管我认为矩形最容易实现,因为我使用的是地图(见下文),这也意味着矩形可以(也应该)重叠,即在每个迷宫弯曲处至少应有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
虽然检测到一些边缘,但大多数边缘仍未标记。将峰值阈值设置得更低没有帮助。有人知道为什么没有检测到剩余的边缘吗?我在下面添加了脚本生成的绘图

边缘检测的结果:


您可以使用来检测直线。您必须使用的函数有
edge()
hough()
houghpeaks()
,和
houghlines()

这是一个有趣的问题,但如果只使用matlab标记,可能会缩小您的受众范围。尝试添加更多的标签(可能是图像处理?)。谢谢你的建议,添加更多的tagsAn图像会很有帮助。你现在应该有足够的代表了。我已经添加了一些问题的图片,并更新了问题描述谢谢你的建议。
edge()
函数对我不起作用,因为在墙的“内部”并不总是能检测到边,但我通过使用
imdeflate()
和减法修复了它。