我正试图在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)]);
答案 0 :(得分:0)
要检查一切是否顺利进行,您应绘制相关性:
figure, surf(c)
正如@ cris-luengo所提到的那样,很容易因图像大小而失败等等。但是,我看到你按照https://es.mathworks.com/help/images/ref/normxcorr2.html上的教程进行了操作。由于两个图像,已经是黑白图像(或双色图像),normxcorr2适用于rgb图像(纹理和对象等)。因此,我认为这不是使用normxcorr2的正确方法。
我会考虑的方法是寻找分支机构。使用Matlab的帮助和bwmorph:
BW = imread('circles.png');
imshow(BW);
BW1 = bwmorph(BW,'skel',Inf);
您首先对图像进行骨架化,然后您可以使用bwmorph帮助(https://es.mathworks.com/help/images/ref/bwmorph.html)上显示的任何函数。在这种情况下,我会搜索分支点,即交联点。它很简单:
BW2 = bwmorph(BW1,'branchpoints');
branchPointsPixels = find(BW2 == 1);
分支点像素的索引将是它找到X的位置。但是,它可以是任何旋转的X(或+,...)。所以你会找到你想要的更多积分,你需要过滤积分才能得到你想要的东西。