针孔图像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.

相关推荐
那个村的李富贵4 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿4 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
琹箐5 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia15 小时前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了5 小时前
数据结构之树(Java实现)
java·算法
算法备案代理5 小时前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.6 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦7 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总7 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
rainbow68897 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法