郑州网站推广外包地址,网站开发下载那个,网站百度突然不收录了,那些网站做民宿文章目录 Scaramuzza相机模型标定效果2、原理和代码代码1、 2D映射到3D#xff0c;函数输入为2D点坐标OCAM参数代码功能详解2、3D -- 2D 3、总结Scaramuzza 模型的核心思想Scaramuzza 模型的核心思想与 Kannala-Brandt 模型的对比Scaramuzza 模型的独特之处Scaramuzza 的意… 文章目录 Scaramuzza相机模型标定效果2、原理和代码代码1、 2D映射到3D函数输入为2D点坐标OCAM参数代码功能详解2、3D -- 2D 3、总结Scaramuzza 模型的核心思想Scaramuzza 模型的核心思想与 Kannala-Brandt 模型的对比Scaramuzza 模型的独特之处Scaramuzza 的意图 4、标定实践参考 从Scaramuzza的论文出发详细介绍该模型。
参考论文-1A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion (2006年mei论文是2007年) 参考论文-2A Toolbox for Easily Calibrating Omnidirectional Cameras (2006年) 参考论文-3Omnidirectional Camera (2008年)
这3篇paper的一作都是Davide Scaramuzza主讲的都是Scaramuzza 全向相机模型paper-1是介绍该模型成像原理paper-2是详细介绍该模型的标定过程计算相机内参/外参paper-3是针对全向相机内参模型的一篇综述。
作者在paper中声称Scaramuzza内参模型可以同时建模两种全向相机(1) 反射折射 catadioptriccamera mirror(2) 纯折射 dioptric (fisheye)主要原因在于Scaramuzza模型用泰勒多项式来建模某个3D点到光心O的向量与该点在图像坐标系下的坐标值(u,v)省去了fx / fy。paper中Scaramuzza的建模是根据2d–3d这和其他模型的推导是反着的
Scaramuzza相机模型标定效果 2、原理和代码 这个公式描述了一个全向相机omnidirectional camera的投影模型。全向相机能够捕捉到更广阔的视野通常用于机器人、虚拟现实和增强现实等领域。让我们逐步解释这个公式的含义 投影函数 g g g 函数 g g g描述了传感器平面上的点 u ′ ′ u u′′与从视点 O O O到场景点 X X X的向量 p p p之间的关系。这个函数捕捉了相机如何将三维场景点 X X X投影到二维传感器平面上的过程。 全向相机模型 λ ⋅ p λ ⋅ g ( u ′ ′ ) λ ⋅ g ( A u ′ t ) P X , λ 0 \lambda \cdot p \lambda \cdot g(u) \lambda \cdot g(Au t) PX, \quad \lambda 0 λ⋅pλ⋅g(u′′)λ⋅g(Au′t)PX,λ0 这里 λ \lambda λ是一个正的比例因子表示从视点 O O O到场景点 X X X的距离。 - p p p是从视点 O O O到场景点 X X X的向量。 - g ( u ′ ′ ) g(u) g(u′′)是投影函数将传感器平面上的点 u ′ ′ u u′′映射到向量 p p p。 - A u ′ t Au t Au′t表示对传感器平面上的点 u ′ u u′进行仿射变换其中 A A A是线性变换矩阵 t t t是平移向量。A [c d ; e 1], t [cx, cy]这里面已经没有fx fy 了被建模进了 g ( u ′ ′ ) g(u) g(u′′)中. - P P P是一个 3 × 4 3 \times 4 3×4的透视投影矩阵用于将三维场景点 X X X用齐次坐标表示投影到二维图像平面上。 齐次坐标 场景点 X X X用齐次坐标表示即 X ∈ R 4 X \in \mathfrak{R}^4 X∈R4。齐次坐标允许我们用一个统一的框架表示点和向量并且可以方便地进行透视投影和其他线性变换。 透视投影矩阵 P P P 矩阵 P P P将三维空间中的点 X X X投影到二维图像平面上。这个矩阵包含了相机的内参如焦距、主点和外参如相机的位置和方向。
总的来说这个公式描述了全向相机如何通过投影函数 g g g和透视投影矩阵 P P P将三维场景点 X X X映射到二维传感器平面上的过程。这个过程是计算机视觉和图像处理中的基础用于从图像中恢复三维场景信息。 投影函数 g ( u ′ , v ′ ) g(u, v) g(u′,v′) g ( u ′ , v ′ ) ( u ′ , v ′ , f ( u ′ , v ′ ) ) T g(u, v) (u, v, f(u, v))^T g(u′,v′)(u′,v′,f(u′,v′))T 这个函数将传感器平面上的点 ((u’, v’)) 映射到三维空间中的一个点 ((u’, v’, f(u’, v’)))。函数 f ( u ′ , v ′ ) f(u, v) f(u′,v′) 描述了传感器平面上的点如何映射到三维空间中的深度。 旋转对称性假设 假设函数 f f f 仅通过 (\rho’ \sqrt{u’^2 v’^2}) 依赖于 u ′ u u′ 和 v ′ v v′。这意味着函数 g g g 是关于传感器轴旋转对称的即传感器的响应在圆周方向上是一致的。 坐标系和变换 图1(a) 显示了反射折射相机系统中的坐标系。图1(b) 显示了传感器平面使用度量坐标。图1© 显示了相机图像平面使用像素坐标。图1(b) 和 © 之间通过仿射变换相关联这意味着它们之间存在线性变换和平移。 多项式函数 f ( u ′ , v ′ ) f(u, v) f(u′,v′) f ( u ′ , v ′ ) a 0 a 1 ρ ′ ′ a 2 ρ ′ 2 … a N ρ ′ N f(u, v) a_0 a_1 \rho a_2 \rho^2 \ldots a_N \rho^N f(u′,v′)a0a1ρ′′a2ρ′2…aNρ′N 这个多项式函数描述了传感器平面上的点 ((u’, v’)) 如何映射到三维空间中的深度。系数 a i a_i ai 和多项式阶数 N N N 是通过校准确定的模型参数。(\rho’’ 0) 是从传感器轴到点的度量距离。 投影模型 λ ⋅ [ u ′ v ′ w ′ ] λ ⋅ g ( A u ′ t ) λ ⋅ [ ( A u ′ t ) f ( u ′ , v ′ ) ] P ⋅ X , λ 0 \lambda \cdot \begin{bmatrix} u \\ v \\ w \end{bmatrix} \lambda \cdot g(\mathbf{A}u t) \lambda \cdot \begin{bmatrix}(\mathbf{A}u t) \\ f(u, v) \end{bmatrix} \mathbf{P} \cdot \mathbf{X}, \, \lambda 0 λ⋅ u′v′w′ λ⋅g(Au′t)λ⋅[(Au′t)f(u′,v′)]P⋅X,λ0 这个方程描述了如何将三维场景点 X \mathbf{X} X 投影到传感器平面上的点 ( u ′ , v ′ , w ′ ) (u, v, w) (u′,v′,w′)。 λ \lambda λ 是一个正的比例因子表示从视点到场景点的距离。 A \mathbf{A} A 是线性变换矩阵 t t t 是平移向量。 P \mathbf{P} P 是透视投影矩阵用于将三维场景点 X \mathbf{X} X 投影到二维图像平面上。
这些公式共同描述了一个反射折射相机系统的投影模型包括如何将传感器平面上的点映射到三维空间中的深度以及如何通过多项式函数和仿射变换来处理图像坐标。这种模型在计算机视觉和机器人学中非常重要用于从全向图像中恢复三维场景信息。
代码
1、 2D映射到3D函数输入为2D点坐标OCAM参数
这个 MATLAB 函数 cam2world 实现了将图像平面上的二维点像素坐标转换为三维空间中的单位向量即从相机中心出发的光线方向。这个过程通常用于全向相机如鱼眼相机或反射折射相机的模型目的是将图像点映射到相机的单位球面上。 2D -- 3D是用ρ来进行多项式近似
代码功能详解 输入参数 m图像平面上的二维点像素坐标大小为 (2 \times N)其中 (N) 是点的数量。ocam_model一个结构体包含相机的内参和畸变参数具体包括 ss多项式系数用于描述相机的畸变模型。xc, yc图像中心点的坐标主点。width, height图像的宽度和高度。c, d, e仿射变换矩阵的参数。 主要步骤 提取参数 ss ocam_model.ss;
xc ocam_model.xc;
yc ocam_model.yc;
c ocam_model.c;
d ocam_model.d;
e ocam_model.e;这些参数用于描述相机的内参和畸变模型。 仿射变换 A [c,d; e,1];
T [xc;yc]*ones(1,n_points);
m A^-1*(m-T);这里A 是一个仿射变换矩阵用于将图像平面上的点从像素坐标系转换到归一化的度量坐标系。T 是平移向量用于将图像中心点对齐到坐标系原点。 计算三维光线方向 M getpoint(ss,m);调用 getpoint 函数将归一化的二维点映射到三维空间中的光线方向。 归一化到单位球面 M normc(M);将三维向量归一化使其长度为 1表示这些向量位于单位球面上。 getpoint 函数 这个函数的作用是根据相机的畸变模型多项式 ss将归一化的二维点映射到三维空间中的光线方向。具体实现w [m(1,:) ; m(2,:) ; polyval(ss(end:-1:1), sqrt(m(1,:).^2 m(2,:).^2)) ];m(1,:) 和 m(2,:) 是归一化的二维点的 (x) 和 (y) 坐标。polyval(ss(end:-1:1), sqrt(m(1,:).^2 m(2,:).^2)) 计算径向畸变使用多项式 ss 来描述畸变模型。最终返回的三维向量 w 表示从相机中心出发的光线方向。 将 MATLAB 代码 w [m(1,:) ; m(2,:) ; polyval(ss(end:-1:1), sqrt(m(1,:).^2 m(2,:).^2)) ]; 转换为数学公式可以表示为
完整的数学表达式为 w [ u ′ v ′ a 0 a 1 ρ ′ a 2 ρ ′ 2 … a N ρ ′ N ] w \begin{bmatrix} u \\ v \\ a_0 a_1 \rho a_2 \rho^2 \ldots a_N \rho^N \end{bmatrix} w u′v′a0a1ρ′a2ρ′2…aNρ′N 其中 u ′ m ( 1 , : ) u m(1,:) u′m(1,:) 是归一化的二维点的 x x x 坐标。 v ′ m ( 2 , : ) v m(2,:) v′m(2,:) 是归一化的二维点的 y y y 坐标。 ρ ′ u ′ 2 v ′ 2 \rho \sqrt{u^2 v^2} ρ′u′2v′2 是从图像中心到点 ( u ′ , v ′ ) (u, v) (u′,v′) 的径向距离。 f f f 是一个多项式函数表示相机的畸变模型 a 0 , a 1 , … , a N a_0, a_1, \ldots, a_N a0,a1,…,aN 是多项式系数描述相机的畸变模型。
这个公式表示将归一化的二维点 ( u ′ , v ′ ) (u, v) (u′,v′) 映射到三维空间中的光线方向 w w w其中第三维 f f f 由多项式畸变模型计算得出。
全部代码
function Mcam2world(m, ocam_model)n_points size(m,2);
ss ocam_model.ss;
xc ocam_model.xc;
yc ocam_model.yc;
width ocam_model.width;
height ocam_model.height;
c ocam_model.c;
d ocam_model.d;
e ocam_model.e;A [c,d;e,1];
T [xc;yc]*ones(1,n_points);m A^-1*(m-T);
M getpoint(ss,m);
M normc(M); %normalizes coordinates so that they have unit length (projection onto the unit sphere)function wgetpoint(ss,m)% Given an image point it returns the 3D coordinates of its correspondent optical
% rayw [m(1,:) ; m(2,:) ; polyval(ss(end:-1:1),sqrt(m(1,:).^2m(2,:).^2)) ];这个函数的主要功能是将图像平面上的二维点像素坐标转换为三维空间中的单位向量光线方向。具体步骤包括
通过仿射变换将像素坐标转换为归一化的度量坐标。使用多项式畸变模型将归一化的二维点映射到三维空间中的光线方向。将三维向量归一化到单位球面上。
这种转换通常用于全向相机的几何校正和三维重建任务中。
2、3D -- 2D
3D -- 2D是用θ来进行多项式近似θ是入射光线和图像平面的夹角这个和泰勒Kannala-Brandt模型很像θ是入射光线和Z轴的夹角只不过多项式阶数更高190度的鱼眼相机一般为12阶以上。这个比较简单我就不多介绍了。可以看出Scaramuzza的作者Davide Scaramuzza 想传达的思路在于2D鱼眼图片向其他坐标系转换的一种思路吗。
function m world2cam_fast(M, ocam_model)ss ocam_model.ss;
xc ocam_model.xc;
yc ocam_model.yc;
width ocam_model.width;
height ocam_model.height;
c ocam_model.c;
d ocam_model.d;
e ocam_model.e;
pol ocam_model.pol;npoints size(M, 2);
theta zeros(1,npoints);NORM sqrt(M(1,:).^2 M(2,:).^2);ind0 find( NORM 0); %these are the scene points which are along the z-axis
NORM(ind0) eps; %this will avoid division by ZERO latertheta atan( M(3,:)./NORM );rho polyval( pol , theta ); %Distance in pixel of the reprojected points from the image centerx M(1,:)./NORM.*rho ; % 和fisheyey一样也利用了入射光线和x轴夹角等于像素坐标系上该点的x夹角
y M(2,:)./NORM.*rho ;%Add center coordinates
m(1,:) x*c y*d xc;
m(2,:) x*e y yc;3、总结Scaramuzza 模型的核心思想
Scaramuzza 模型的核心思想
Scaramuzza 的模型主要用于将 2D 鱼眼图像上的点 转换为 3D 空间中的光线方向即从相机中心出发的单位向量。这个模型的核心在于 2D 到 3D 的映射 通过多项式函数 f ( ρ ′ ) f(\rho) f(ρ′) 来描述鱼眼图像的畸变特性。这里的 $\rho’ \sqrt{u’^2 v’^2} $ 是归一化的图像平面上的径向距离。多项式 f ( ρ ′ ) f(\rho) f(ρ′) 将 ρ ′ \rho ρ′映射到第三维即光线方向的 ( z ) 分量从而将 2D 图像点转换为 3D 光线方向。 高阶多项式 对于大视角如 190 度的鱼眼相机Scaramuzza 模型通常使用高阶多项式如 12 阶或更高来精确描述畸变。这是因为鱼眼相机的畸变在大视角下非常显著低阶多项式无法准确拟合。 目标 Scaramuzza 模型的主要目标是将鱼眼图像上的点映射到 3D 空间中的光线方向从而为后续的几何校正、三维重建或其他计算机视觉任务提供基础。
与 Kannala-Brandt 模型的对比
Kannala-Brandt 模型也是一种经典的鱼眼相机模型但它更侧重于 3D 到 2D 的投影 3D 到 2D 的映射 Kannala-Brandt 模型使用入射光线与相机光轴Z 轴的夹角 ( \theta ) 来描述投影过程。通过多项式函数 r ( θ ) r(\theta) r(θ)将 θ \theta θ 映射到图像平面上的径向距离 r r r。 多项式近似 Kannala-Brandt 模型的多项式通常阶数较低如 4 阶或 6 阶因为它的目标是描述 3D 到 2D 的投影而不是直接处理鱼眼图像的畸变。 目标 Kannala-Brandt 模型的主要目标是建模相机的投影过程用于相机标定和几何校正。
Scaramuzza 模型的独特之处
Scaramuzza 模型的独特之处在于 2D 到 3D 的逆向映射 它直接从鱼眼图像上的 2D 点出发通过多项式映射到 3D 空间中的光线方向。这种思路更适合处理鱼眼图像的畸变校正和几何变换。 高精度拟合 由于鱼眼图像的畸变在大视角下非常复杂Scaramuzza 模型使用高阶多项式来确保高精度拟合。 灵活性 Scaramuzza 模型不依赖于具体的相机几何结构如 Kannala-Brandt 模型中的光轴夹角 θ \theta θ而是直接从图像数据出发因此更具灵活性。
Scaramuzza 的意图
Scaramuzza 的模型确实传达了一种思路通过多项式映射将鱼眼图像上的 2D 点转换为其他坐标系如 3D 光线方向或单位球面。这种思路的核心在于 直接处理鱼眼图像的畸变 通过高阶多项式精确描述鱼眼图像的畸变特性。 为后续任务提供基础 将鱼眼图像上的点映射到 3D 空间中的光线方向可以为几何校正、三维重建、视觉里程计等任务提供基础。
Scaramuzza 的模型和 Kannala-Brandt 模型都使用多项式来描述鱼眼相机的投影过程但它们的思路和应用场景不同
Scaramuzza 模型侧重于 2D 到 3D 的逆向映射适合处理鱼眼图像的畸变校正和几何变换。Kannala-Brandt 模型侧重于 3D 到 2D 的投影适合相机标定和几何校正。
Scaramuzza 的模型通过高阶多项式和高灵活性为鱼眼图像的处理提供了一种有效的思路尤其是在大视角和复杂畸变的情况下。
4、标定实践
论文 《A Toolbox for Easily Calibrating Omnidirectional Cameras》是这么设置的设置了一个包含 6x848 个角点的棋盘平面。图案的尺寸为 150x210 毫米。作为相机模型我们选择一个 4 阶多项式其参数根据校准真实全向相机获得的参数进行设置。然后我们将虚拟相机的图像分辨率设置为 900x1200 像素。
通过校准全向相机我们指的是估计参数[A, t, a0, a1, a2 ,…, an ].
按照论文的步骤; 1、求解相机外部参数 总之校准的第一步可以找到校准模式每个姿势的外部参数 [r11,r12,r21,r22,r31,r32,t1,t2]除了平移参数 t3 。
2、求解相机内部参数 描述模型的内部参数 [a1,a2,a3,…,an] 。为了计算最佳多项式次数 N我们实际上从 N2 开始。然后我们以单位步长增加 N并计算所有校准点的重投影误差的平均值。当找到最小误差时该过程停止。
C. 内在和外在参数的线性细化。线性最小化步骤找出相机的内在参数并同时估计剩余的外在 t3 。
D. 迭代中心检测
E. 非线性细化
参考
OCamCalib: Omnidirectional Camera Calibration Toolbox for Matlab https://blog.csdn.net/ouyangandy/article/details/107088939 https://zhuanlan.zhihu.com/p/578678136