我试图在MATLAB中检测楼层平面图上的电梯。我现在的代码不是检测电梯,而是指向图像的边缘。我希望能探测到平面图上所有的电梯。电梯由一个正方形或矩形表示,内部有一个x,类似于模板图像。我已经附上了模板,图像和结果截图。
模板图像:

图像:

结果:

码
template= rgb2gray(imread('ele7.png'));
image = rgb2gray(imread('floorplan.jpg'));
%imshowpair(image,template,'montage')
c = normxcorr2(template,image);% perform cross-correlation
figure, surf(c), shading flat
[ypeak, xpeak] = find(c==max(c(:)));%peak of correlation
%Compute translation from max location in correlation matrix, =padding
yoffSet = ypeak-size(template,1);
xoffSet = xpeak-size(template,2);
%Display matched area
figure
hAx = axes;
imshow(image,'Parent', hAx);
imrect(hAx, [xoffSet+1, yoffSet+1, size(template,2), size(template,1)]);发布于 2018-02-26 08:13:10
要检查一切运行是否顺利,您应该绘制相关图:
figure, surf(c)正如@cris-luengo所提到的,图像大小等都很容易出错。但是,我已经看到您遵循了关于https://es.mathworks.com/help/images/ref/normxcorr2.html的教程。由于这两种图像,已经是黑白图像(或2色图像),normxcorr2很好地工作与rgb图像(纹理和对象,等等)。因此,我认为这不是使用normxcorr2的正确方法。
我会考虑的一个方法是寻找分支机构。使用Matlab的帮助和bwmorph:
BW = imread('circles.png');
imshow(BW);
BW1 = bwmorph(BW,'skel',Inf);首先对图像进行骨架化,然后可以使用bwmorph's help (https://es.mathworks.com/help/images/ref/bwmorph.html)上显示的任何函数。在这种情况下,我会搜索分支点,即交联点。它很简单,如:
BW2 = bwmorph(BW1,'branchpoints');
branchPointsPixels = find(BW2 == 1);分支点像素的索引将是它找到X的位置,但是它可以是任意旋转的X(或+,.)。所以你会发现更多你想要的点,你需要过滤这些点才能得到你想要的。
https://stackoverflow.com/questions/48978605
复制相似问题