多尺度模板匹配(openCV实现find_scaled_shape_model)

        一直在写基于形状的模板匹配(仿照halcon,cognex),我们知道任意的二维仿射变换可以分解为以下几种变换:缩放变换(用不同比例因子Sx_{},Sy分别对图像X轴Y轴进行缩放)、倾斜变换(X轴保持固定的情况下,Y轴相对于X轴旋转角度θ)、旋转变换(X轴Y轴同时旋转角度Φ),最后是平移变换(Tx,Ty))^{T},写到一起就是下面的公式:

多尺度模板匹配(openCV实现find_scaled_shape_model)_第1张图片

        在前面的文章中我们已经解决了旋转的问题,接下来解决缩放的问题,首先是尺度空间离散化,仿照旋转需要计算出每层金字塔的比例步长,这里给出比例步长的计算公式,如下图(来源于MVTec公司的一篇专利)是一个钥匙的模型,c是模型的参考点(重心),d_{max}是所有模型点到参考点的最大距离,d_{x}是X轴方向上距离参考点的最大距离,同理d_{y}是Y轴方向上距离参考点的最大距离,为了确保在X轴方向上缩放后的模型点距离图像实例最多相差k个像素,步长\Delta S_{x}必须选择为\Delta S_{x}=k/d_{x},同样的\Delta S_{y}=k/d_{y},这里先按照Sx=Sy这种最简单的情况来处理,取\Delta S=min(\Delta S_{x},\Delta S_{y})

多尺度模板匹配(openCV实现find_scaled_shape_model)_第2张图片

        有了比例步长就可以进行离散化和匹配了,跟旋转一样,在离散化空间的最粗一级中进行穷举搜索(所有的参数值组合),在离散化空间的更细层次上跟踪所发现的实例,直到在离散化空间的最低层次上发现它们,最后检查找到的实例是否与其他实例重叠太多,如果重叠大于用户设定的参数,得分较高的实例被保存下来。下面是实验结果,感觉还不错,附上halcon的匹配结果作为对比,具体使用的参数如下:

minScore = 0.5, greedness = 0.75, maxOverLap = 0.5

angle_start = -180, angle_extent=360, scale_min = 0.7, scale_max = 1.3

多尺度模板匹配(openCV实现find_scaled_shape_model)_第3张图片

 图1a

多尺度模板匹配(openCV实现find_scaled_shape_model)_第4张图片

 图1b

多尺度模板匹配(openCV实现find_scaled_shape_model)_第5张图片

图2a

多尺度模板匹配(openCV实现find_scaled_shape_model)_第6张图片

 图2b

多尺度模板匹配(openCV实现find_scaled_shape_model)_第7张图片

图3a

多尺度模板匹配(openCV实现find_scaled_shape_model)_第8张图片

 图3b 

        上面图1,在halcon的例程中可以识别出三个,而我们漏掉了一个,发现有一个极性是相反的,修改参数忽略全局极性,第三个也识别出来了,好了多尺度模板匹配就先讲到这里,下期再见。

多尺度模板匹配(openCV实现find_scaled_shape_model)_第9张图片

图4a

多尺度模板匹配(openCV实现find_scaled_shape_model)_第10张图片

图4b 

你可能感兴趣的:(计算机视觉,opencv,边缘计算,图像处理)