额,讲真没有想到这么快就做出来了,当然做的效果怎么样暂且不论,单说这个做出来这一件事情就是让人十分兴奋的事情,很多时候我们面对问题总是会把它想象得很难,以为实现起来是一件多么困难的事情,但是实际上并不是这样,对于这个密集匹配这件事请来说,以前总是觉得多么困难,可是当我真的下定决心去做的时候发现原来好像也没有那么难,只是自己吓自己而已。
下面讲讲半监督的影像密集点匹配,所谓半监督就是只有部分已知信息然后根据这部分信息去推测匹配点的方法,在这里主要是用Propragate的方法去生成控制点,匹配方式使用ZNCC方式进行匹配整个过程描述为:

step1:
通过特征点匹配算法,如SIFT,SURF等方法获取影像上稀疏的匹配点,由于SIFT算法一般来说已经能够在影像上取得极好的匹配效果了,因此通过SIFT算法算出来的匹配点具有比较高的可靠性;
step2:
以step1中获取的匹配点作为种子点,并将其作为初始种子;
step3:
在种子点的匹配过程中采用优先队列的方式进行匹配,优先队列以ZNCC匹配度为优先级;计算对应匹配种子周围邻域内像素,从匹配度由低到高获取匹配点,重复的点不获取,将获取的匹配点放到种子点队列中,并从队列中pop优先级最高的元素
step4:
继续step3的循环直到种子点队列为空,如此能够获取所有匹配点;

上述过程描述起来比较简单,实际处理起来也很简单,但是由于比较次数较多,因此计算复杂度比较大,在进行比较过程中每一个种子点需要计算周围55的邻域与匹配点周围55的邻域范围,且ZNCC需要对数据进行归一化,因此数据处理较为复杂,参考文献中通过匹配置信度,实际上就是通过纹理特征来判断区域的匹配度是否可靠,给出的匹配置信度ZNCC匹配度为0.5,在数据处理中我用的是0.6,通过匹配能够得到较好的密集匹配点,实际实验过程中7000*4000的影像得到了1900w个匹配点,最后通过视差约束进一步得到优化后的点,实际匹配效果为:

我们可以看到,通过密集匹配之后能够取得较好的匹配效果,且通过视差约束后能够得到较好的匹配点。