首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板匹配

模板匹配
EN

Stack Overflow用户
提问于 2018-02-25 21:22:41
回答 1查看 867关注 0票数 0

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

模板图像:

图像:

结果:

代码语言:javascript
复制
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)]);
EN

回答 1

Stack Overflow用户

发布于 2018-02-26 08:13:10

要检查一切运行是否顺利,您应该绘制相关图:

代码语言:javascript
复制
figure, surf(c)

正如@cris-luengo所提到的,图像大小等都很容易出错。但是,我已经看到您遵循了关于https://es.mathworks.com/help/images/ref/normxcorr2.html的教程。由于这两种图像,已经是黑白图像(或2色图像),normxcorr2很好地工作与rgb图像(纹理和对象,等等)。因此,我认为这不是使用normxcorr2的正确方法。

我会考虑的一个方法是寻找分支机构。使用Matlab的帮助和bwmorph:

代码语言:javascript
复制
BW = imread('circles.png');
imshow(BW);
BW1 = bwmorph(BW,'skel',Inf);

首先对图像进行骨架化,然后可以使用bwmorph's help (https://es.mathworks.com/help/images/ref/bwmorph.html)上显示的任何函数。在这种情况下,我会搜索分支点,即交联点。它很简单,如:

代码语言:javascript
复制
BW2 = bwmorph(BW1,'branchpoints');
branchPointsPixels = find(BW2 == 1);

分支点像素的索引将是它找到X的位置,但是它可以是任意旋转的X(或+,.)。所以你会发现更多你想要的点,你需要过滤这些点才能得到你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48978605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档