带微小缩放和旋转的模板匹配

问题提出:

OpenCV并不像Halcon一样提供带有旋转和缩放的的模板匹配。本文对带旋转和缩放的模板匹配问题进行限定,只针对的目标缩放范围为95%到105%,旋转角度为-5度到5度的情况,尝试用opencv解决。

问题分析:

带有旋转和缩放,首先想到使用外轮廓进行Hu矩匹配,然后根据外轮廓周长比例和面积开方的比例确定缩放系数,根据轮廓最小包围旋转矩形的角度差确定旋转角度。这个思路要求目标外轮廓不能对称,比如圆,正方形,长方形这些,同时最小包围矩形也不能是长宽比较接近的长方形甚至正方形,否则无法确定旋转角度(或者多个可能角度一一使用灰度匹配去判断)。但是本文有个限制条件,缩放比例和旋转角度较小。所以另一个思路是搜索的方法,只要找到一个好的的搜索策略,那么算法的时间也是可以接受的。

实现效果

如下图所示,左边是模板,右边是待匹配的目标,有4度的旋转。
在这里插入图片描述
左边是带旋转和污损的目标,右边是匹配结果(叠加模板后找到污损区域)。
在这里插入图片描述

思路一:Hu矩

使用Hu矩由于限制较多,不能对实现效果中的图进行处理,因此使用如下模板

要从如下图中找出

代码实现:

Mat searchImage = imread("pic/contour/Search2.jpg");
Mat searchImageResult = searchImage.clone();
Mat graySearchImg;
cvtColor(searchImage, graySearchImg, COLOR_RGB2GRAY);
Mat templateImage = imread("pic/contour/Template2.jpg");
Mat grayTemplateImg;
cvtColor(templateImage, grayTemplateImg, COLOR_RGB2GRAY);

//在Template2和Search2中找外轮廓
Mat bin_search;
threshold(graySearchImg, bin_search, 128, 255, THRESH_BINARY);
vector<vector<Point>> contours_search;
vector<Vec4i> hierarchy_search;
findContours(bin_search, contours_search, hierarchy_search, RETR_TREE, CHAIN_APPROX_NONE, Point(0, 0));

Mat bin_template;
threshold(grayTemplateImg, bin_template, 128, 255, THRESH_BINARY);
vector<vector<Point>> contours_template;
vector<Vec4i> hierarchy_template;
findContours(bin_template, contours_template, hierarchy_template, RETR_TREE, CHAIN_APPROX_NONE, Point(0, 0));

drawContours(searchImage, contours_search, -1, Scalar(255, 0
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仟人斩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值