关键:形状,其实就是canny找出来的线条集合
1,canny线条
2,模板的线条(基于canny)
3,高斯金字塔,加速高斯法
4,没有旋转和尺度时,匹配一个有得分的结果,界定匹配的粗位置(限定矩形)
5,旋转模板所有线条,任何角度,产生一个所有线条外接矩形(参考轮廓的外接矩形),然后在原图的界定匹配的粗位置(限定矩形,匹配存在的限定区域)去找
6,尺度(缩放比例)界定在0.79-1.26之间,如果你是以4sigma的高斯金字塔工作的,即上一层高斯金字塔是2*k^2*sigma,下一层高斯金字塔是2*k^4*sigma;当前层是2*k^3*sigma,因为k^3=2,所以2*k^3*sigma=4sigma,显然2*k^2*sigma/(2*k^3*sigma)=1.58/2=0.79,
2*k^4*sigma/(2*k^3*sigma)=1.26*2/2=1.26.所以,高斯金字塔解决了大问题!
7,关于6的解决,要求三层高斯金字塔,这样太慢了,思路是模板所有线条上的每一个点的放大1.26或缩小0.79,通过log金字塔和dog金字塔的关系,可以算出来.这样就会快很多。
即就是:[G(x,y,k*sigma)-G(x,y,sigma)]/[(k-1)sigma]sigma(+),应该是近似等于。
第七步,我程序还未完成,希望你能赶在我前头。
一直不想用笨办法,觉得太慢,到最后还是绕不开,最后发现,效率都从笨办法的优化中而来。
笨办法思路:
a,模板在原图中一个一个找,一般情况要找原图的大半,按75%算,1024*768按800*600=480000次。(我们优化后,在限定区域去找20*20的范围,可以继续压缩这个空间)
b,产生360度的模板,一共360个,搜索次数=480000*360,吓死个人(-45度+45度就可以了,砍价到+-8度)
c,再加上0.79-1.26的尺度缩放,0.1一个,至少30个吧,480000*360*30,死都不想走的路!但是最后还是走了!(优化到3个)
400*90*3=108000,其实在工业应用中(工业精度一般会设计到一个范围之内,关于尺度变化,工业中就不要想了),通常可以继续压缩这个结果(正负8个像素,+-8度之间)16*16*16*3=12288次(大概1万的样子,工业中的话16*16*16=4096次就够了!)。