当前位置: 首页 > news >正文

相机内参初始值估计的解析解推导【简洁明了】(cvInitIntrinsicParams2D)

相机内参初始值估计的解析解推导【简洁明了】(cvInitIntrinsicParams2D)

这是一个基于**张正友标定法(Zhang’s Method)**的解析解推导过程。其目标是在已知主点 (cx,cy)(c_x, c_y)(cx,cy) 且假设相机偏斜(skew)为 0 的条件下,求解相机的焦距 fxf_xfxfyf_yfy


1. 基本模型与单应性

相机针孔模型将一个世界坐标点 Mw=[X,Y,Z,1]TM_w = [X, Y, Z, 1]^TMw=[X,Y,Z,1]T 投影到图像点 m=[u,v,1]Tm = [u, v, 1]^Tm=[u,v,1]T

s⋅m=K[R∣t]Mws \cdot m = K [R | t] M_wsm=K[Rt]Mw

其中 KKK 是内参矩阵,[R∣t][R | t][Rt] 是外参矩阵。

假设标定板在世界坐标系的 Z=0Z=0Z=0 平面上,则 MwM_wMw 可简化为 M=[X,Y,1]TM = [X, Y, 1]^TM=[X,Y,1]T。投影关系简化为:

s[uv1]=K[r1 r2 t][XY1] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K [r_1 \ r_2 \ t] \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix}suv1=K[r1 r2 t]XY1

其中 r1,r2r_1, r_2r1,r2 是旋转矩阵 RRR 的前两列。

这个 3×33 \times 33×3 的变换矩阵 H=K[r1 r2 t]H = K [r_1 \ r_2 \ t]H=K[r1 r2 t] 被称为单应性矩阵(Homography)。它可以从 MMMmmm 的对应点对中计算出来(通常会有一个尺度因子 λ\lambdaλ):

H=λK[r1 r2 t](1)H = \lambda K [r_1 \ r_2 \ t] \quad (1)H=λK[r1 r2 t](1)

2. 简化内参矩阵

根据我们的假设:

  1. 主点 (cx,cy)(c_x, c_y)(cx,cy) 已知。
  2. 相机无偏斜(s=0s=0s=0)。

KKK 矩阵可以写作:

K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}K=fx000fy0cxcy1

我们可以将其分解为 K=KcKfK = K_c K_fK=KcKf

K=[10cx01cy001]⏟Kc[fx000fy0001]⏟KfK = \underbrace{\begin{bmatrix} 1 & 0 & c_x \\ 0 & 1 & c_y \\ 0 & 0 & 1 \end{bmatrix}}_{K_c} \underbrace{\begin{bmatrix} f_x & 0 & 0 \\ 0 & f_y & 0 \\ 0 & 0 & 1 \end{bmatrix}}_{K_f}K=Kc100010cxcy1Kffx000fy0001

我们定义一个“归一化”的单应性矩阵 H′H'H,它将世界坐标 MMM 映射到以主点为原点的图像坐标 [u−cx,v−cy,1]T[u-c_x, v-c_y, 1]^T[ucx,vcy,1]T

这个 H′H'H 与我们从像素坐标计算出的 HHH 之间的关系是:

H=K[r1 r2 t]=(KcKf)[r1 r2 t]=Kc(Kf[r1 r2 t])H = K [r_1 \ r_2 \ t] = (K_c K_f) [r_1 \ r_2 \ t] = K_c (K_f [r_1 \ r_2 \ t])H=K[r1 r2 t]=(KcKf)[r1 r2 t]=Kc(Kf[r1 r2 t])

H′=Kf[r1 r2 t]H' = K_f [r_1 \ r_2 \ t]H=Kf[r1 r2 t],则 H=KcH′H = K_c H'H=KcH

因此,我们可以通过 HHH 计算 H′H'H

H′=Kc−1H=[10−cx01−cy001]HH' = K_c^{-1} H = \begin{bmatrix} 1 & 0 & -c_x \\ 0 & 1 & -c_y \\ 0 & 0 & 1 \end{bmatrix} HH=Kc1H=100010cxcy1H

这个操作等价于将 HHH 的前两行分别减去 cxc_xcxcyc_ycy 乘以第三行。

H′H'H 的列向量为 h1′,h2′,h3′h'_1, h'_2, h'_3h1,h2,h3。根据 H′=λKf[r1 r2 t]H' = \lambda K_f [r_1 \ r_2 \ t]H=λKf[r1 r2 t](我们把 λ\lambdaλ 吸收进 H′H'H):

[h1′ h2′ h3′]=[fx000fy0001][r1 r2 t][h'_1 \ h'_2 \ h'_3] = \begin{bmatrix} f_x & 0 & 0 \\ 0 & f_y & 0 \\ 0 & 0 & 1 \end{bmatrix} [r_1 \ r_2 \ t][h1 h2 h3]=fx000fy0001[r1 r2 t]

我们得到 h1′h'_1h1h2′h'_2h2r1,r2r_1, r_2r1,r2 的关系(其中 rijr_{ij}rijRRR 的元素):

  • h1′=[fxr11,fyr21,r31]Th'_1 = [f_x r_{11}, f_y r_{21}, r_{31}]^Th1=[fxr11,fyr21,r31]T
  • h2′=[fxr12,fyr22,r32]Th'_2 = [f_x r_{12}, f_y r_{22}, r_{32}]^Th2=[fxr12,fyr22,r32]T

我们可以反解 r1r_1r1r2r_2r2(其中 hij′h'_{ij}hijH′H'H 矩阵第 iii 行第 jjj 列的元素):

r1=[h11′/fxh21′/fyh31′](2)r_1 = \begin{bmatrix} h'_{11}/f_x \\ h'_{21}/f_y \\ h'_{31} \end{bmatrix} \quad (2)r1=h11/fxh21/fyh31(2)

r2=[h12′/fxh22′/fyh32′](3)r_2 = \begin{bmatrix} h'_{12}/f_x \\ h'_{22}/f_y \\ h'_{32} \end{bmatrix} \quad (3)r2=h12/fxh22/fyh32(3)

3. 利用旋转矩阵的正交约束

旋转矩阵 RRR 的列向量 r1r_1r1r2r_2r2 是正交的单位向量,因此它们满足:

  • 正交性r1Tr2=0r_1^T r_2 = 0r1Tr2=0
  • 单位长度r1Tr1=r2Tr2=1r_1^T r_1 = r_2^T r_2 = 1r1Tr1=r2Tr2=1 (我们这里使用 r1Tr1=r2Tr2r_1^T r_1 = r_2^T r_2r1Tr1=r2Tr2
4. 建立线性方程组

我们定义两个未知数,令 F0=1/fx2F_0 = 1/f_x^2F0=1/fx2F1=1/fy2F_1 = 1/f_y^2F1=1/fy2

约束 1: r1Tr2=0r_1^T r_2 = 0r1Tr2=0

将 (2) 和 (3) 代入:

h11′h12′fx2+h21′h22′fy2+h31′h32′=0\frac{h'_{11} h'_{12}}{f_x^2} + \frac{h'_{21} h'_{22}}{f_y^2} + h'_{31} h'_{32} = 0fx2h11h12+fy2h21h22+h31h32=0

整理为 F0,F1F_0, F_1F0,F1 的线性方程:

(h11′h12′)F0+(h21′h22′)F1=−h31′h32′(A)(h'_{11} h'_{12}) F_0 + (h'_{21} h'_{22}) F_1 = -h'_{31} h'_{32} \quad \text{(A)}(h11h12)F0+(h21h22)F1=h31h32(A)

约束 2: r1Tr1=r2Tr2r_1^T r_1 = r_2^T r_2r1Tr1=r2Tr2

将 (2) 和 (3) 代入:

h11′2fx2+h21′2fy2+h31′2=h12′2fx2+h22′2fy2+h32′2\frac{h'^{2}_{11}}{f_x^2} + \frac{h'^{2}_{21}}{f_y^2} + h'^{2}_{31} = \frac{h'^{2}_{12}}{f_x^2} + \frac{h'^{2}_{22}}{f_y^2} + h'^{2}_{32}fx2h112+fy2h212+h312=fx2h122+fy2h222+h322

F0,F1F_0, F_1F0,F1 的项移到左边,常数项移到右边:

(h11′2−h12′2)1fx2+(h21′2−h22′2)1fy2=h32′2−h31′2(h'^{2}_{11} - h'^{2}_{12}) \frac{1}{f_x^2} + (h'^{2}_{21} - h'^{2}_{22}) \frac{1}{f_y^2} = h'^{2}_{32} - h'^{2}_{31}(h112h122)fx21+(h212h222)fy21=h322h312

整理为 F0,F1F_0, F_1F0,F1 的线性方程:

(h11′2−h12′2)F0+(h21′2−h22′2)F1=−(h31′2−h32′2)(B)(h'^{2}_{11} - h'^{2}_{12}) F_0 + (h'^{2}_{21} - h'^{2}_{22}) F_1 = -(h'^{2}_{31} - h'^{2}_{32}) \quad \text{(B)}(h112h122)F0+(h212h222)F1=(h312h322)(B)

(注: hij′h'_{ij}hij 是矩阵 H′=Kc−1HH' = K_c^{-1} HH=Kc1H 的元素)

5. 求解

对于每一个(第 iii 个)标定板姿态,我们都可以计算一个 Hi′H'_iHi,并得到两个线性方程 (A) 和 (B)。

如果我们有 NNN 个姿态,我们就得到 2N2N2N 个关于 F0F_0F0F1F_1F1 的方程。我们将它们组合成一个超定线性方程组 A⋅x=bA \cdot x = bAx=b

[(h11′h12′)1(h21′h22′)1(h11′2−h12′2)1(h21′2−h22′2)1⋮⋮(h11′h12′)N(h21′h22′)N(h11′2−h12′2)N(h21′2−h22′2)N][F0F1]=[(−h31′h32′)1−(h31′2−h32′2)1⋮(−h31′h32′)N−(h31′2−h32′2)N]\begin{bmatrix} (h'_{11} h'_{12})_1 & (h'_{21} h'_{22})_1 \\ (h'^{2}_{11} - h'^{2}_{12})_1 & (h'^{2}_{21} - h'^{2}_{22})_1 \\ \vdots & \vdots \\ (h'_{11} h'_{12})_N & (h'_{21} h'_{22})_N \\ (h'^{2}_{11} - h'^{2}_{12})_N & (h'^{2}_{21} - h'^{2}_{22})_N \end{bmatrix} \begin{bmatrix} F_0 \\ F_1 \end{bmatrix} = \begin{bmatrix} (-h'_{31} h'_{32})_1 \\ -(h'^{2}_{31} - h'^{2}_{32})_1 \\ \vdots \\ (-h'_{31} h'_{32})_N \\ -(h'^{2}_{31} - h'^{2}_{32})_N \end{bmatrix}(h11h12)1(h112h122)1(h11h12)N(h112h122)N(h21h22)1(h212h222)1(h21h22)N(h212h222)N[F0F1]=(h31h32)1(h312h322)1(h31h32)N(h312h322)N

通过最小二乘法(例如 SVD)求解这个 2N×22N \times 22N×2 的方程组,得到 F0F_0F0F1F_1F1 的最优解。

6. 恢复焦距

最后,从解 F0F_0F0F1F_1F1 中恢复焦距:

fx=1/F0f_x = \sqrt{1 / F_0}fx=1/F0

fy=1/F1f_y = \sqrt{1 / F_1}fy=1/F1

http://www.dtcms.com/a/525193.html

相关文章:

  • 操作系统 | Linux:第三章 用户和权限
  • 做外国的网站卖东西男生女生做污事网站 localhost
  • wordpress主题制作插件seo三人行网站
  • 帝国cms 网站地图 自定义wordpress建表
  • 在JavaScript中,查看对象有哪些属性
  • openEuler配置docker
  • 42.渗透-Kali Linux-工具-Ettercap(arp广播欺骗,局域网流量拦截)
  • 仓颉语言第一课:从 HelloWorld 到鸿蒙原生 HTTP 服务
  • 拟定一个农产品电商网站的建设需求wordpress vs
  • 网站开发销售wordpress中文版去广告
  • 诡异的Mysql连接中断导致的事务‘失联‘
  • STM32项目分享:校园绿色照明智能控制系统
  • 共享经济型网站开发湖北省节能建设网站
  • 免费在线网站建设敦化建设局网站
  • oracle数据泵数据库自动备份脚本
  • 数据库运维查询SQL语句集合
  • 家具在线设计网站网上最好购物网站
  • 青岛房地产团购网站建设佛山网站建设网站建设收费
  • Pytest+requests进行接口自动化测试9.0(redis + excal文件的使用)
  • Python+Selenium+Pytest+POM自动化测试框架封装详解
  • 大模型-模型压缩:量化、剪枝、蒸馏、二值化 (1)
  • 高中男女做那个视频网站挂机软件定制
  • 怎么查看一个网站的浏览量自豪地采用wordpress
  • 微网站建设哪里便宜wordpress仿wiki
  • 计算机网络设计:从基础到原则的体系化指南
  • 在安阳想建个网站怎么做经典的网站设计工具
  • 生物油分离及分离产物结构性质与表征
  • Android开发教程之Java入口方法介绍 Java打印 Java注释 Java变量 常量申明 变量命名规则
  • 一个新的面向东亚地区的高精度天气模拟的基准算例已开源发布
  • 宁波易通建设网站网站个人备案百度推官