OpenCV相机标定与3D重建(2)鱼眼相机模型

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

鱼眼相机是一种具有非常宽视野的相机,通常会产生强烈的径向畸变。鱼眼相机模型旨在捕捉这种畸变,以便能够准确地处理和校正图像。鱼眼相机模型通常使用多项式函数来描述径向畸变。

定义:设P是世界参考系中的一个3D点,其坐标为X(存储在矩阵X中)。点P在相机参考系中的坐标向量为:
X c = R X + T X_c = R X + T Xc=RX+T

其中R是对应于旋转向量ω的旋转矩阵: R = r o d r i g u e s ( ω ) R=rodrigues(ω) R=rodrigues(ω);称 x , y , z x,y,z x,y,z 为 X c Xc Xc的三个坐标:
x = X c 1 y = X c 2 z = X c 3 x = X_{c1} \\ y = X_{c2} \\ z = X_{c3} x=Xc1y=Xc2z=Xc3

针孔投影坐标P为[a;b],其中
a = x z 和 b = y z a = \frac{x}{z} \quad \text{和} \quad b = \frac{y}{z} a=zx和b=zy
r 2 = a 2 + b 2 和 θ = arctan ⁡ ( r ) r^2 = a^2 + b^2 \quad \text{和} \quad \theta = \arctan(r) r2=a2+b2和θ=arctan(r)

鱼眼畸变:
θ d = θ ( 1 + k 1 θ 2 + k 2 θ 4 + k 3 θ 6 + k 4 θ 8 ) \theta_d = \theta (1 + k_1 \theta^2 + k_2 \theta^4 + k_3 \theta^6 + k_4 \theta^8) θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)

畸变点的坐标为 [ x ′ ; y ′ ] [x′;y′] [x′;y′],其中
x ′ = ( θ d r ) a 和 y ′ = ( θ d r ) b x' = \left(\frac{\theta_d}{r}\right) a \quad \text{和} \quad y' = \left(\frac{\theta_d}{r}\right) b x′=(rθd)a和y′=(rθd)b

最终转换为像素坐标:最终的像素坐标向量 [u;v]为:
u = f x ( x ′ + α y ′ ) + c x v = f y y ′ + c y u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y u=fx(x′+αy′)+cxv=fyy′+cy
总结

通用相机模型 139包括透视投影,但没有畸变校正。

相关推荐
三维重建--小博主2 小时前
人群计数制作私有数据集教程-----自用
python·opencv·计算机视觉
小于小于大橙子8 小时前
视觉SLAM数学基础
人工智能·数码相机·自动化·自动驾驶·几何学
mirrornan11 小时前
产品如何3D建模?如何根据使用场景选购3D扫描仪?
科技·3d·3d建模·3d模型·三维扫描
兔老大的胡萝卜11 小时前
关于 3D Engine Design for Virtual Globes(三维数字地球引擎设计)
人工智能·3d
深蓝学院11 小时前
无需姿态,即刻重建!NoPoSplat,重新定义3DGS的重建Pipeline
3d
智方科技11 小时前
cesium 3DTiles之pnts格式详解
3d
mirrornan12 小时前
3D看车如何实现?有哪些功能特点和优势?
3d·3d模型·3d交互展示·3d看车
zhanghongyi_cpp12 小时前
图像分割(二)
人工智能·python·opencv·计算机视觉
PaLu-LI13 小时前
ORB-SLAM2源码学习:Frame.cc: Frame::isInFrustum 判断地图点是否在当前帧的视野范围内
c++·人工智能·opencv·学习·算法·ubuntu·计算机视觉
一介青烟小生16 小时前
cesium渲染3DTiles模型和glb模型
3d·cesium