[db:标题]
摘要:我估摸着这个应该是关于形状匹配或者模版匹配的最后一篇文章了(同时纸质旋转和缩放),其实大概是2个多月前这些东西都已经弄完了,只是一直静不下来心整理文章,提醒一点,这篇文章后续可能会有多次修改(但不会重新发文章,而是在后台直接修改或者增加),
我估摸着这个应该是关于形状匹配或者模版匹配的最后一篇文章了,其实大概是2个多月前这些东西都已经弄完了,只是一直静不下来心整理文章,提醒一点,这篇文章后续可能会有多次修改(但不会重新发文章,而是在后台直接修改或者增加),所以有需要的朋友可以随时重复查看。
这次带来的更新也是革命性和带有建设性的,使得该算法向工程化更加迈进了一步。不过严格意义上说和halcon还是有较大的差距的。
能够带来这次的变化和提升,其实也得益于偶尔的一次交流,一个微信好友给我发了一份可以不用配置就可以运行的linemod的代码,因为可以运行,我就有兴趣看其代码的细节,也从中得到了更多的灵感,用于我自己的工程。从这个事情可以得出两个小经验:一个是要多交流,二是一个事情如果当前搞不定,不要一直搞,要有准备的等,说不定哪天就有意外的收获。 就好似我们掉了一个东西,怎么找都找不到,但是有可能突然某一天他就冒出来了。
好,言归正传,后续的文字也不讲究就逻辑性,想到啥说啥。
一、还是打击下linemod的速度
linemod的过程包含了原图的(被查找图,也许很大)梯度角度量化(QuantizedOrientations)、计算响应图(IM_ComputeResponseMaps)、梯度扩散等等过程,这些过程,就是使用特殊的指令集进行优化,对于稍微大一点的图来说,也是相当耗时的,所以对于快速的目标识别来说linemod应该不是很好的方法。
另外,linemod的代码里虽然有金字塔,但是他只是对特征方面用了金字塔,在旋转角度上他确没有进行下采样,也就是说,如果底层金字塔有100个旋转角度,第二层还是100个,第三个也还是100个,以此类对,而不是每层也减半的策略,这个可以从他的addTemplate含数里能看到细节。
二、从linemod中学到一些非常有用的东西。
1、创建模型时,直接旋转0角度时识别的特征作为其他角度的特征,而非旋转图像,然后在识别特征。
在前面所有的文章中,我们创建模型的时候,都是采用的先旋转模版图像,然后再计算特征,并把这些特征保存起来。这样做,可以解决问题,但是带来了两个大的麻烦:首先是创建模型的速度会有影响,特备是对于稍微大一点的模版图,耗时非常吓人。对于形状匹配来说,是有不少场景的模版图特别大的,甚至占到了被查找图的一半以上的。这种情况,早期的方案基本就不能解决问题。 第二个麻烦是,我们存储这些特征也会占用大量的内存,同样对于大模版图,存在内存不够的风险。
这个问题其实很多写模版匹配的朋友都有遇到过,而且早期我也没有好的解决方案,曾经尝试过旋转特征,不过不知道为什么当时得到的结果总是有问题。
