测量矩形,也是基础算法。很多算法的基础都是它。比如vm中的找圆,找直线等。
本篇分两个部分来介绍
第一部分,介绍测量矩形出处,及原理。
第二部分,介绍测量矩形在vm中的应用。
测量矩形,是引用halcon的说法。halcon的唯五工具中,就有这个工具。它提供了一种直观易用的查找边缘的算法。
其基本原理:
1,制作一个带方向的矩形,截取矩形部分的所有像素,把所有像素投影到矩形方向的中轴上。然后对中轴上的像素计算梯度。梯度满足设置条件的点,就是找到的边缘点。
图示:
图1蓝色矩形就是测量矩形。黄色箭头方向,就是测量矩形的方向,长度就是测量长度。矩形宽度,就是投影宽度。绿色与黄色线交点表示找到的边缘点。
图2,表示投影过程,红色框表示同一条垂直于中轴线的所有像素。所有像素求和平均后,填入垂足坐标,为该最终像素。
就得到一条投影后的,中轴线。就是图中黄线。对中轴线,求梯度,再对求得的梯度,进行筛选,如图示所示,筛选条件是梯度大于9,极性是 黑到白, 位置的第一个。
然后就得到图四的结果。坐标是(172.61, 227.799)梯度-15.6525 (浮点型数据是因为用了插补算法)。
图示故意把测量矩形的方向,与边缘的方向不垂直。是为了更好的展示投影的过程,已经投影的影响。因为投影是这个算法的核心。
如下图1 2所示,因为投影的原因,2者的梯度值,就不一样。
下图 3,4 所示,同样的角度,因为投影宽度不一样,得到的梯度值就不一样。
这些都是投影过程中,求和平均的结果导致。
以上就是对测量矩形原理的介绍。最重要的理解就是投影。以上有较好的展示。
vm中,测量矩形的应用。如下图所示,定位12个工具,都是测量矩形的应用。我们一个一个讲。
1,边缘查找:
其实与第一部分,讲测量矩形,是一样的。
ROI画矩形,矩形的宽度,就是投影宽度。运行参数中边缘阈值,边缘极性,边缘类型,就是对边缘进行筛选。
2,卡尺工具:
就是测量矩形,筛选边缘点的时候,可以选择2个点,然后还输出点与点的距离。
3,找直线:
就是在一条线方向上,绘制多个测量矩形。然后根据找到的边缘点,拟合直线。
4,找圆:
与找直线类似,只是以圆形,放射型,绘制测量矩形。根据找到的边缘点,拟合圆。
5,直线组合:
这是多段找直线,然后再连起来。只是找直线的扩展使用。
6,多直线查找:
这个与找直线的参数略有不同,它没有设置测量矩形个数,是系统默认的。按照roi矩形去查找区域内的直线。支持查找多条直线。
但设置查找参数,还是与测量矩形一致。
7,边缘交点:
可以绘制2个直线查找。并计算2条直线的交点。
8,平行线查找:
在roi内,根据测量矩形个数,自动分配投影宽度。并输出2直线,以及2条直线的中线。
9,矩形检测:
roi内,根据roi的尺寸,自动分配4个找直线功能。再输出一个带角度的矩形。看到这个参数,一眼就看出来,是测量矩形工具。
10,四边形查找:
画4个找直线工具。四条线相交,输出对角线交点。同样看参数,就是测量矩形工具。
11,顶点检测
画一个roi,根据roi长度方向,扫描宽度,自动生成多个测量矩形。扫描宽度也是投影宽度。最后输出所有边缘点和roi方向最近的一个点作为顶点。
12,路径提前
当运行参数选择, 查找边缘点时。绘制模板的时候发现,里面的参数就是是测量矩形。
以上就是VM12个测量矩形工具的应用。vm整个定位工具,除去4个模板匹配。4个纯计算(角平分线,中线,平行线,垂线),2个blob工具,1个位置修正。其他全部都是测量矩形的应用。
可见。测量矩形算法的总要性。
(PS:因为我很熟悉halcon的测量矩形工具。所以看vm这些工具,没有一点学习成本,一眼就知道怎么使用了。所以在这里分享给各位)