当前位置:网站首页>非参数化相机畸变模型简介
非参数化相机畸变模型简介
2022-04-23 05:47:00 【mightbxg】
最近在看相机畸变模型相关的论文,其中有个叫非参数化模型的比较有意思:
Schöps, Thomas, Viktor Larsson, Marc Pollefeys, and Torsten Sattler. “Why Having 10,000 Parameters in Your Camera Model Is Better Than Twelve.” ArXiv:1912.02908 [Cs], June 23, 2020. http://arxiv.org/abs/1912.02908.
该论文还开源了相关代码:https://github.com/puzzlepaint/camera_calibration.
参数化的畸变模型
目前最常见的畸变模型有:
- Brown: 即径向+切向畸变,参数有 k1, k2, k3, p1, p2
- Rational: 有理模型,可以看作 Brown 模型的扩展,参数有 k1, k2, k3, k4, k5, k6, p1, p2
- KB: 所谓鱼眼模型,参数有 k1, k2, k3, k4
OpenCV 中 calibrateCamera 通过 14 个参数支持 Brown、Rational 等模型,fisheye::calibrate 则用于标定 KB 模型。
其它还有 FoV、UCM、Double Sphere 等模型,可见于一些 SLAM 系统,参见论文:
Usenko, Vladyslav, Nikolaus Demmel, and Daniel Cremers. “The Double Sphere Camera Model.” In 2018 International Conference on 3D Vision (3DV), 552–60. Verona: IEEE, 2018. https://doi.org/10.1109/3DV.2018.00069.
上述这些模型都可以归为“参数化模型”,因为它们都是使用带有少量参数的模型去拟合整张图像上全部像素点的畸变。比如 KB 模型的投影函数为:
π ( x ) = [ f x d ( θ ) x r f y d ( θ ) y r ] + [ c x c y ] , r = x 2 + y 2 , θ = a t a n 2 ( r , z ) , d ( θ ) = θ + k 1 θ 3 + k 2 θ 5 + k 3 θ 7 + k 4 θ 9 \begin{aligned} \pi(\bold{x}) =& \begin{bmatrix} f_xd(\theta)\frac{x}{r} \\ f_yd(\theta)\frac{y}{r} \end{bmatrix} + \begin{bmatrix} c_x \\ c_y \end{bmatrix} , \\ r =& \sqrt{x^2+y^2}, \\ \theta =& atan2(r, z), \\ d(\theta) =& \theta + k_1 \theta^3+k_2 \theta^5+k_3 \theta^7+k_4 \theta^9 \end{aligned} π(x)=r=θ=d(θ)=[fxd(θ)rxfyd(θ)ry]+[cxcy],x2+y2,atan2(r,z),θ+k1θ3+k2θ5+k3θ7+k4θ9
只用四个参数 (k1~k4) 便能计算图像上任意一个点的畸变。
非参数化畸变模型
所谓非参数化模型并不是说没有参数,而是相对于参数化模型,它们会使用大量的参数去表示整张图的畸变。最极端的情况是每个像素点都有一组参数表示其畸变,即直接记录每一个点从带畸变图像到无畸变图像的映射(或者反过来的映射)。所以,OpenCV 中的 initUndistortRectifyMap 函数生成的映射表就可以理解为非参数化畸变模型的参数表。
显然,非参数化模型是参数化模型的拓展,它具有最大的灵活性,理论上能够用于拟合任意相机畸变。但同时越 General 的模型越容易过拟合,想要达到比较良好去畸变效果,非参数化模型需要的标定数据比参数化模型要多得多。
为了降低标定的难度,本文开头提到的论文提出了一种较为稀疏的非参数化模型:

如上图所示,整个带畸变图像按照固定尺寸被划分为小的 Grid,每个 Grid 只有一个控制点,对应于一组畸变参数,即该控制点坐标到无畸变图像坐标的映射。对任意点进行去畸变操作时,先找到其周围 4×4 个控制点,然后使用基于B样条的双立方插值获得当前点的畸变参数,从而映射到无畸变坐标。
由于模型参数保存的是带畸变坐标到无畸变坐标的映射,这一方法能够很容易地实现点的去畸变 (对应 unproject 过程),但点的加畸变(对应 project 过程)却需要迭代才能实现。
关键代码
论文作者开源的代码是一个非常庞大的工程,甚至非线性优化求解器都实现了一遍。如果只是想了解并使用非参数化畸变模型,重点关注这几个文件即可:
- applications/camera_calibration/src/camera_calibration/b_spline.h
清晰的插值计算过程 - applications/camera_calibration/src/camera_calibration/models/central_generic.cc
标定相关的各种函数,包含 project、unporject、fitToModel 等 - applications/camera_calibration/generic_models/src/central_generic.h
应用相关的各种函数,包含 project、unproject、save、load 等
版权声明
本文为[mightbxg]所创,转载请带上原文链接,感谢
https://blog.csdn.net/mightbxg/article/details/118797042
边栏推荐
- [leetcode 202] happy number
- P1586 solution to tetragonal theorem
- Kalman filter and inertial integrated navigation
- [leetcode217] there are duplicate elements
- Object转Json差异之Gson fastJson jackson 修改字段名
- 基于QQwebAPI 查询昵称和头像的爬虫
- SQL -- data filtering and grouping
- Addition, deletion, modification and query of MySQL table
- Feign请求日志统一打印
- 定位器
猜你喜欢
随机推荐
Event listener
利用文件保存数据(c语言)
POI and easyexcel exercises
Plane semi intersecting plate
小区房价可视化
SQL sorts according to the specified content
Detection technology and principle
[leetcode 150] evaluation of inverse Polish expression
selenium+webdriver+chrome实现百度以图搜图
识别验证码
Sakura substring thinking
[leetcode 228] summary interval
队列解决约瑟夫问题
MySQL table constraints and table design
爬虫效率提升方法
MySQL advanced query
Excel打开超大csv格式数据
Easy to use data set and open source network comparison website
Common shortcut keys of IDE
H. Are You Safe? Convex hull naked problem



![[leetcode 54] spiral matrix](/img/c0/9a55a62befb783a5bfc39dc3a96cb2.png)





