针孔图像derolling的原理

为什么做图像derolling

  • 图像derolling的工作简单来说就是对图像进行warp去除果冻效应,如下图所示

derolling的过程只考虑相机的旋转的原因如下:

  • 很难使用imu进行准确地测量平移量。加速度计的数据必须积分两次,以获得平移分量。相比之下,陀螺仪测量旋转速度。因此,陀螺仪数据只需要积分一次,就可以获得相机的方向。因此,平移测量的精度明显不如旋转朝向的测量值。

  • 即使我们可以准确地测量平移,这也是不够的,因为不同深度的物体移动不同的数量不同。因此,我们必须依靠双目立体或基于特征的运动恢复结构(SfM)算法来获取深度信息。由于视差和遮挡,为了消除平移而扭曲帧是非常重要的。这些方法是不鲁棒的,而且目前计算成本太高,无法在移动平台上实时运行。

  • 相机抖动和卷帘快门畸变主要来自于旋转。这种情况是因为平移随着深度的增加而迅速衰减,而且物体通常离镜头足够远,因此平移相机抖动在图像中不会产生明显的运动

一般的针孔相机建模

  • 一致相机的内参K,相机坐标系下一点X可以通过内参K投影得到像素坐标x, 同样可以将像素坐标x通过反投影得到归一化的相机坐标系下的一点X。

  • 进一步考虑世界坐标系到相机坐标系的旋转,可以得到如下的公式:

  • 进一步可以已通过已知的IMU的角速度的数据通过积分得到对应的t1时刻到t2时刻的旋转,然后旋转矩阵进行积分就可以得到t0时刻到tn时刻的旋转矩阵。

相机运动

  • 把世界坐标系的原点设定为相机坐标系的原点。相机的运动可以用它在 t 时刻的旋转 R(t) 来描述。因此,对于任何场景中的点 X , t 时刻对应的图像坐标点 x 为
  • 旋转矩阵 R(t)∈SO(3) 是通过相机旋转角 Δθ(t) 来计算的。采用四元数SLERP球面线性插值,为了平滑地插值相机的方向,并避免万向节锁问题。 Δθ(t) 是通过陀螺仪测量的角速度 ω(t) 直接获取的:

derolling过程进行建模

  • 如图所示,描述的是同一个世界坐标系下的一点X在xi和xj两个图像上的投影,其中旋转矩阵是与imu的积分有关,如上描述的从某一时刻到某一个时刻的积分可以表达两个时间点的旋转。

  • 因此两张图像的同一个像素的对应关系如下所示:

  • 由此可以将两张图像的同一个点建立warp关系。由此可知,一张需要derolling的图像,可以根据每一行的曝光时间确定旋转矩阵,然后以第一行为基准作为参考坐标系,将后续所有行的图像根据上面的公式warp到参考坐标系上,从而去消除rolling的影响。如下图所示,最外层的平行四边形是rolling的图像,然后里面的框是derolling的图像,小点表示一个一个像素,可以清晰的看到同一行(即derolling的图像的一行)的小点,对应到rolling图像的多行,所以derolling的主要目的就是求得对应的旋转矩阵后得到warp的矩阵,将像素重组得到有效的derolling的图像。

分块加速

  • 因为对每一行都去计算一个warp矩阵的计算量是非常大,而且在论文中验证也是没有必要,可以将一张待derolling的图像进行分块,然后只要计算每一个小块的warp矩阵即可实现derolling的目的。如下图所示:

参考文献

  • Magerand, Ludovic, and Adrien Bartoli. "A generic rolling shutter camera model and its application to dynamic pose estimation." International symposium on 3D data processing, visualization and transmission. 2010.

  • Karpenko, Alexandre, et al. "Digital video stabilization and rolling shutter correction using gyroscopes." Stanford University Computer Science Tech Report CSTR 3.2011 (2011): 278.

相关推荐
不一样的故事12635 分钟前
军工行业合规与基础认知
数据结构·经验分享·算法
To_OC8 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia110 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zephyr0512 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米12 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚14 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结14 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_15 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
Tisfy15 小时前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
泷寂15 小时前
最小生成树 (MST基础)
算法