在Halcon中矩形度的计算是通过求一个跟目标区域有相同一阶和二阶矩的矩形,然后计算他们之间的不重叠部分的面积占矩形的百分比来得到矩形度。具体Halcon帮助文档中没有介绍怎么求矩形。这篇文章旨在介绍这种矩形度的计算方式,如果觉得描述的不清楚,可以自己下载文献了解[1]。
文章提到有三种新的求矩形度的方法:
1、Agreement Method
2、Moments Method
3、Discrepancy Method
而经过实验比较,发现最后一种方法对噪点和畸变的适应性跟传统的bounding rectangle相同。因此,这里主要介绍最后一种,其余两种不介绍。
首先,假设我们已经知道目标连通域的空间和中心矩,那么我们可以求得一个椭圆,这个椭圆跟连通域有着相同的一阶和二阶矩,其长轴和短轴的值可通过下面的公式计算得到[1]:
这里我们用这个椭圆来代替矩形。但这个矩形的长轴和短轴是沿着坐标轴的方向的,而实际上我们知道,在用最小外接矩形求矩形度的时候,矩形往往有个角度,因此,我们需要求这个角度,然后将这个椭圆旋转这个角度,再去比较他们的区域。
连通区域的旋转角计算为[2]:
但这个角度是连通域的两个主轴中,靠近x轴的轴与x轴的夹角。而我们需要知道椭圆的长轴也及连通域的主长轴与x轴的夹角。这里给出了一个表[2]:
就是我们想要的角度。然后将椭圆的长轴作为矩形的长边,短轴作为短边,就可以绘制一个矩形,最后还要将矩形的中心移至连通域的中心。中心的位置可以通过空间矩的零阶和一阶矩计算得到,这里不作赘述。
最后是比较区域的面积,用如下图来说明[1]:
原理就是计算连通域不在矩形内的区域面积与矩形不在连通域的区域的面积之和占矩形的面积比[1]。
其中A1连通域的面积,A2是矩形与连通域交叠的面积,A3是矩形的面积。
以下是通过Opencv实现的该矩形度的计算:
这个圆的矩形度是0.7.
矩形的矩形度是1.
另附不规则连通域:
其矩形度为0.7.
参考:
[1]Measuring Rectangularity.Paul L. Rosin;Department of Information Systems and Computing, Brunel University
[2]A Survey of Moment-Based Techniques For Unoccluded Object Representation and Recognition.Richard J. Prokop ;Anthony P. Reeves;School of Electrical Engineering ;Cornell University