- 文章转自:微信公众号「机器学习炼丹术」
- 作者:炼丹兄(已授权)
- 作者联系方式:微信cyx645016617
- 论文名称:‘An Iterative Image RegistrationTechnique with an Application to Stereo Vision’
「前言」:在某些情况下,使用深度学习的voxelmorph或者SYMnet等配准网络并不能取得比传统方法更好的效果,所以在这里想学一下比较好的RLOF(Rubost Local Optical Flow)鲁棒局部光流。这个方法应该是传统光流法中的SOTA了,但是RLOF的知识是继承与其之前的方法,所以这个开一个大概三篇文章的连续剧,专门讲解传统光流的算法。
1 三个假设
-
亮度恒定:一个像素点随着时间的变化,其亮度值(像素灰度值)是恒定不变的。这是光流法的基本设定。所有光流法都必须满足。
-
小运动: 时间的变化不会引起位置的剧烈变化。这样才能利用相邻帧之间的位置变化引起的灰度值变化,去求取灰度对位置的偏导数。所有光流法必须满足。
-
空间一致:即前一帧中相邻像素点在后一帧中也是相邻的。这是LK光流法独有的假定。因为为了求取x,y方向的速度,需要建立多个方程联立求解。而空间一致假设就可以利用邻域n个像素点来建立n个方程。
2 构建方程
- 根据亮度恒定假设,认为同一个位置的点在不同时刻的亮度是相同的,因此可以得到下面等式:
- 根据小运动假设,我们对小运动,可以做泰勒展开:
其中HOT表示高阶极小值,我们把它近似成0即可。
这样我们得到了两个等式,两者相减,可以得到下面等式:
其中就是光亮对x维度的偏导数,这个部分是可以从图片中计算出来的,是已知数;这个是x位置的速度,这个是我们需要求解的参数,因此我们把上面公式写成下面的形式:
再往下为了简化公式,我们仅仅考虑2D图片的情况。上面有三个参数,x,y,z的速度。如果是2D图片,那么就只用考虑x和y的速度了:
上公式中,表示亮度对x的梯度,表示亮度对t的梯度。现在我们发现,目前仅仅得到了这一个公式,但是却又两个参数需要求解。
- 这时候引入最后一个假设空间一致,这个是需要设置一个邻域大小,假设是3x3的邻域。那么这个假设的含义是,对于这3x3的9个像素,他们的速度和是相同的。因此可以列出下面的方程:
现在,我们有了9个方程,但是仅仅有2个参数,这是一个超定方程,所以需要使用最小二乘法来解决,我们把上面的公式写成矩阵的形式:
这个矩阵是9x2的矩阵乘上2x1得到一个9x1的矩阵。这个超定问题使用最小二乘的方法求解:
上面的矩阵形式通过可逆操作,求解出了两个参数。我们再展开转换成下面的等式:
这样,我们就可以从3x3的邻域中,计算中x和y的速度了。这个就是LK光流法的计算公式。