[这是我在这个网站上的第一篇文章,我会尽量做到尽可能完整,但如果我的问题陈述不清楚或代码格式不符合标准,请原谅我]
我正在尝试在迷宫环境中检测最大可能的矩形,因此我可以使用凸优化方法来维持迷宫中的视线连接。这意味着任何其他凸形也会很好,虽然我认为矩形最容易实现,因为我使用的地图(见下文)这也意味着矩形可以(并且应该)重叠,即在每个迷宫弯曲处应该至少有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
虽然检测到一些边缘,但大多数边缘未标记。设置峰值阈值较低并没有帮助。有谁知道为什么剩下的边缘没被检测到?我已添加了下面的脚本生成的图表。
边缘检测结果: