最近做的项目设计到图像匹配的知识,用vc编程后,发现相关系数的计算量很大。一开始模板的大小为51*51,搜索范围12*12,计算点数为900,vc运行时间为7s。经过不断地优化,现在模板的大小为51*51,搜索范围256*256,计算点数4000,vc运行时间大概为1.1s。性能大大提高。
想要提高运行时间可以从两方面着手,即减少运算的点数和充分运用上次搜索的信息,减少不必要的重复计算。具体的优化策略分为三个方面:(1)算法优化;(2)代码优化;(3)搜索策略的选择;
个人目前运用了方法(1)和(3)。
算法的优化主要是利用上次搜索的信息,减少重复计算。
搜索策略有很多,常用的有两种:十字搜索法和爬山法;其实十字搜索法和爬山法都有梯度的思想在里面,即搜索路径往自相关系数大的方向移动。
另外在搜索过程中如何避免局部最优。这也是自己在实验中遇到的一个问题。具体的解决方法是选用单峰性质更好的相关系数计算公式。目前大多数文献中,认为较好的相关系数的计算公式为归一化计算公式
用matlab仿真
如果换用公式
用matlab仿真
从上面相关系数的分布图看出,显然用第二种相关系数的定义方法,具体表现在:单峰区域的峰值更加尖锐,相关系数小于0.4的可以直接认为不在寻找的区域内,这样可以很好的避免局部最优结果的出现。另外第二个相关系数的计算公式只是把开根号变成平方,在数学可能没有什么区别,但对于计算机运行速度而言,计算平方的计算开根号要快得多。
相关系数的良好分布十分有利于搜索策略的选择,能够满足计算的结果速度和精度的要求。
文章评论(0条评论)
登录后参与讨论