【快速阅读四】基于边缘信息的模版匹配中贪婪度参数的简单解析。
对这个课题稍作研究,以便记录。
在基于边缘的模版匹配中,我们知道可以有个贪婪度参数可以设置。在Halcon的帮助文档中,也有对他进行说明。我们在Halcon那本经典的书上,没有看到对这个参数的解析。不过他也有讲到在计算某个候选位置的得分时,如果满足一定的条件也可以提前结束对得分的判断,而判定这个点不是一个候选点,原文贴图如下:
这里我通俗的讲解下为什么可以有这个判断条件,也就是这个公式是如何得到的。
我们知道,某个点的最大得分必然是1,这只有在每个点都和模版的特征点信息完全一致的情况下获取,这个时候,每个点的得分都是1/n,同时单独一个点的最大得分也是1/n,如果我们设定了目标的最小得分位Smin,那么当计算到第j个点后,还剩下 n-j 个点没有计算得分,那么最理想的情况就是这剩下的 n-j 个点都和模版对应的特征点完全一样,这样,剩下点的最大得分即为: 1/n *(n - j), 此时,如果前n个点的累计得分Sj 再加上后续的最大的理想得分 还小于Smin的话,那这个点肯定就不能满足目标的得分了,即:
公式稍作移位后即得到:
即书中的公式。
当Smin = 0.7时,假如有100个边缘点,则不同的j 和 对应的临界值如下图所示:
前面三十个点对应的临界值是负数,是没有什么意义的,也么有必要做判断。
当在程序中做这种判断时,所进行的操作是安全的,不会带来任何逻辑上的错误,也不会因为停止继续计算而造成目标漏判等问题,这个操作也会大大的提高程序的速度,毕竟大部分目标点都是无效的。
另外,如果更加激进一点的判断手段呢,就是如果前面j个点的累计得分小于 平均值,则认为他不可能得到目标了,即如果符合下式,则直接退出计算:
很明显,当我们计算的前j个点恰好位于光照不均匀区或瑕疵区域时,很有可能把有效的目标点给剔除了,这样就丧失了意义,但是在快接近最后一些匹配点时,这样的规则就能较为安全的实现提前退出,因此,在codeproject的一个文章里,就提出了一个带贪婪度参数的一个停止计算公式:
其中g表示贪婪度参数,其范围是[0,1],当其为0是,即为前述的最安全的公式,为1时,则为后续的最激进的公式。
这个停止标准呢,在计算特征点时,前面的一些特征点使用的是较为安全的推断公式,随着特征点数量的增加,则越来越向后续激进的公式靠近。
以下是一些比较曲线:
其中红色为g = 0.5时的结果,绿色为g=0.7时的结果,蓝色的为安全的结束线,品红色的为最不请安全的停止线。
其实在实际编程时,还要在前面的那个min公式里加上一个max的,即那个停止值不能小于0的。
还是感觉这个公式有点不太完美,应该还可以有更为合适的公式的。