OpenCorr是一个开源C++库,用于研究和开发数字图像相关(DIC)技术它提供了2D和3D-DIC的全功能模块,以及数字体积相关(DVC)。最近正在学习OpenCorr,为了更深层次地理解ICGN,我打算浅浅剖析Opencorr的代码,学习的过程中写下这篇学习笔记,以后忘记了还能回来看看。同时,作为一名在读研究生,希望能得到社区大佬的指点,以及跟同学们一起学习进步。
——————————————————————————————————————————
这一期来分享一下基于SIFT辅助的初始位移匹配。
原文如下:
SIFT-aided path-independent digital image correlation accelerated by parallel computing
这个方法通过点周围的SIFT特征来计算其变形和位移,从而得到初始位移。
文章给出的流程图如下:
可见,SIFT辅助的匹配方法分成了三个部分:
第一个部分Precomputation, 预计算了ICGN要用到的东西,这不是本文的重点。
第二个部分Inital guess estimation,是SIFT辅助匹配方法的部分,首先计算出两个图中所有的SIFT特征点,这些点具有非常高的鲁棒性,图中的点都可以以他们为参照点,计算出形变前后的放射变换参数。在匹配特征点时,通过FLANN或者暴力匹配这些点。匹配6对点后,就可以解出affine matrix的参数。由此得到ICGN的初始参数。
第三个部分就是ICGN亚像素计算。
接下来详细介绍第二部分。
散斑图拥有着非常丰富的特征,参考图像中匹配的关键点与目标图像的关键点之间可以通过仿射变换来近似。
仿射变换的公式如下:
其中,和是局部坐标,原点是匹配框的中心点。
而我们的目的是通过求解仿射矩阵,进一步得到ICGN的初值,如下:
其中,u是x方向位移,v是y方向位移,而是x方向梯度,是y方向梯度,剩余两项同理。
所以我们要用到一阶形状函数:
于是,
采用随机样本一致性(RANSAC)算法来筛选匹配结果,最后通过最小二乘法来估计初始参数。 这里有6个未知数,因此理论上我们只要找六对点就能求解方程了,但是SIFT特征匹配有失败的可能。于是Opencorr根据参考文献假设匹配的成功率为90%,只需要7个关键点对就可以保证在集合中有3对可靠点了。