《SURE: PHOTOGRAMMETRIC SURFACE RECONSTRUCTION FROM IMAGERY》
本文提出了一种多视图立体视觉( MVS )方法,用于生成稠密和精确的三维点云。该方法基于半全局匹配( Semi-Global Matching,SGM )方法,然后通过一个融合步骤来融合单个立体模型之间的冗余深度估计。我们针对SGM方法提出了一种由粗到精的分层解决方案,其中低分辨率金字塔的匹配结果用于限制高分辨率金字塔的视差搜索范围 。通过大幅面航空摄影和近景影像,我们证明了在保持视差估计质量的同时,可以显著地减少内存需求和处理时间。 通过合并多个立体模型的冗余视差估计,可以提高生成点云的精度和鲁棒性。基于对极几何的基本原理,提出了一种时间有效的离群点检测和最小化重投影误差的目标点三角剖分算法。从而考虑了相邻摄像机的几何配置。算法的实现SURE以及本文算法的库接口libTSgm可公开获取:http://www. ifp. uni-stuttgart. de / publications / software /。
2.1 校正模块
在图像校正模块中,生成用于匹配过程的极线影像 (epipolar images)。设 Ib\mathbf{I}_bIb 和 Im\mathbf{I}_mIm 是一对待校正的影像,Ibr\mathbf{I}_b^rIbr 和 Imr\mathbf{I}_m^rImr 是生成的核线影像。Ibr\mathbf{I}_b^rIbr 和 Imr\mathbf{I}_m^rImr 是虚拟影像,与原始影像 Ib\mathbf{I}_bIb 和 Im\mathbf{I}_mIm 具有相同的光学中心 ,但包含更新的旋转分量和内方位元素。校正后与校正前的影像方位(orientation)定义了两个 3×33 \times 33×3 的单应矩阵 Hb\mathbf{H}_bHb、Hm\mathbf{H}_mHm,它们分别将原始影像中的齐次图像坐标 xb\mathbf{x}_bxb、xm\mathbf{x}_mxm 与极线影像中的齐次图像坐标 xbr\mathbf{x}_b^rxbr、xmr\mathbf{x}_m^rxmr 联系起来,具体关系为
xbr=Hbxbxmr=Hmxm.\begin{align} \mathbf{x}_b^r &= \mathbf{H}_b \mathbf{x}_b \\ \mathbf{x}_m^r &= \mathbf{H}_m \mathbf{x}_m . \end{align}xbrxmr=Hbxb=Hmxm.
逆向映射可通过以下方式计算:
xb=Hb−1xbrxm=Hm−1xmr.\begin{align} \mathbf{x}_b &= \mathbf{H}_b^{-1} \mathbf{x}_b^r \\ \mathbf{x}_m &= \mathbf{H}_m^{-1} \mathbf{x}_m^r . \end{align}xbxm=Hb−1xbr=Hm−1xmr.
为解决寻找矩阵 Hb\mathbf{H}_bHb 和 Hm\mathbf{H}_mHm 这一核心任务,实现了两种算法:
-
采用 Fusiello 等人(2000)的方法,分别最小化影像平面对 (Ib,Ibr)(\mathbf{I}_b, \mathbf{I}_b^r)(Ib,Ibr) 和 (Im,Imr)(\mathbf{I}_m, \mathbf{I}_m^r)(Im,Imr) 的旋转分量;
-
采用 Loop 和 Zhang(1999)提出的方法,最小化核线影像中的投影畸变。
尽管两种方法的思路存在差异,原始影像 Ib\mathbf{I}_bIb 和 Im\mathbf{I}_mIm 经空间变换后,核线将变为水平方向,且任意物体点 Xi\mathbf{X}_iXi 被映射到核线影像平面 Ibr\mathbf{I}_b^rIbr 和 Imr\mathbf{I}_m^rImr 上时,其 yyy 坐标保持一致,因此核线影像的齐次坐标满足:
xbr(xbr,yr,1)=xmr(xmr,yr,1).\mathbf{x}_b^r (x_b^r, y^r, 1) = \mathbf{x}_m^r (x_m^r, y^r, 1) .xbr(xbr,yr,1)=xmr(xmr,yr,1).
校正操作的几何特性
校正过程中,仅修改影像平面的方向(orientation),光学中心 C\mathbf{C}C 和 Cr\mathbf{C}^rCr 保持不变。由此推导,校正后光学中心与物体点的向量差与原始影像的对应向量差也完全一致:
Cmr−Xi=Cm−XiCbr−Xi=Cb−Xi.\begin{align} \mathbf{C}_m^r - \mathbf{X}_i &= \mathbf{C}_m - \mathbf{X}_i \\ \mathbf{C}_b^r - \mathbf{X}_i &= \mathbf{C}_b - \mathbf{X}_i . \end{align}Cmr−XiCbr−Xi=Cm−Xi=Cb−Xi.
灰度值计算与模块流程
推导矩阵 Hb\mathbf{H}_bHb 和 Hm\mathbf{H}_mHm 后,在核线影像的整数位置像素处计算灰度值:先利用公式(1)将核线影像的整数坐标 xm\mathbf{x}_mxm 映射回原始影像,再对对应的灰度值进行插值。
该模块的输入包含原始影像及其中的内方位元素 (internal orientations)和外方位元素(exterior orientations)。首先移除影像的径向畸变,再执行核心的校正过程,从而与常见的"结构从运动"或空中三角测量软件(如 Bundler、VSFM、Inpho 等)建立接口。模块的输出是核线影像及其对应的内、外方位元素。
2.2.1回顾sgm
略
2.2.2 SGM 算法的修改 - tSGM
在 Hirschmüller(2008)的研究中,提出了一种层次化方法来初始化和细化 MI 匹配成本。初始视差图像通过匹配高层次(低分辨率)图像金字塔来计算。得到的视差随后用于细化处理后续金字塔层级的 MI 匹配成本。在我们的实现中,金字塔层级 lll 的视差进一步用于限制匹配下一个较低层级 l−1l-1l−1 的视差搜索范围。这种层次化方法适用于所有实现的匹配成本。搜索范围针对每个基图像像素单独确定。设 Dl\mathbf{D}^lDl 是从匹配图像金字塔 lll 得到的视差图像。对于每个像素 xb\mathbf{x}bxb,新的搜索范围通过评估 Dl(xb)\mathbf{D}^l(\mathbf{x}b)Dl(xb) 周围的有效视差来确定。如果 xb\mathbf{x}bxb 成功匹配,则在相对较小的 7×77 \times 77×7 窗口中推导并存储最小和最大视差 dmind{\text{min}}dmin 和 dmaxd{\text{max}}dmax,并存储在两个附加图像 Rminl\mathbf{R}^l{\text{min}}Rminl 和 Rmaxl\mathbf{R}^l_{\text{max}}Rmaxl 中。如果 xb\mathbf{x}bxb 未成功匹配,则在较大的 31×3131 \times 3131×31 窗口中搜索有效视差估计 dmind{\text{min}}dmin 和 dmaxd_{\text{max}}dmax。此外,当前层级 lll 的视差估计 d(xb)d(\mathbf{x}b)d(xb) 更新为搜索窗口中所有视差的中值**(也就是先利用sgm进行匹配,匹配后在窗口后寻找最大最小视差值,同时把窗口内视差中值当作该像素点的视差值,最大最小视差目的是在金字塔限制视差搜索范围,这里视差取中值,我猜在最后一层也就是原始图像,应该不会再用中值了)**。有效和无效像素的最大视差搜索范围分别限制为 16 和 32。下一步,图像 Dl\mathbf{D}^lDl,Rmaxl\mathbf{R}^l{\text{max}}Rmaxl 和 Rminl\mathbf{R}^l_{\text{min}}Rminl 进行上采样。这些图像定义了匹配下一个金字塔层级 l−1l-1l−1 图像的视差搜索范围。在匹配层级 l−1l-1l−1 时,潜在对应关系仅在范围 [2∗(xb+d−dmin),2∗(xb+d+dmax)][2*(x_b + d - d_{\text{min}}), 2*(x_b + d + d_{{max}})][2∗(xb+d−dmin),2∗(xb+d+dmax)] 内搜索。注意,这意味着最终搜索范围对有效像素限制为 32 像素,对无效像素限制为 64 像素。在处理第一个(最高)金字塔层级时,没有初始视差估计可用。在这种情况下,匹配图像中沿水平极线的所有像素被视为潜在对应关系。通过像素级适应视差搜索范围,保存局部成本 C(xb,d)C(\mathbf{x}_b, d)C(xb,d) 和 S(xb,d)S(\mathbf{x}_b, d)S(xb,d) 的数组的立方形状。
S(xb,d)S(\mathbf{x}b, d)S(xb,d) 不再得到保证(图 2)。在视差空间中,这些结构表示假设表面的潜在视差带。实际上,这些结构的所有值随后存储在一个一维数组中,并使用提供相应偏移量的图像访问与基图像像素相关的代价。此外,路径累积如方程(6)所示需要修改。由于邻近像素的成本字符串可能部分重叠或根本不重叠,项 Lri(xb−ri,d+k)L{r_i}(\mathbf{x}_b - \mathbf{r}i, d + k)Lri(xb−ri,d+k) 可能不存在。在这种情况下,使用邻近点代价的底部或顶部元素 Lri(xb−ri,dmin(xb−ri))L{r_i}(\mathbf{x}_b - \mathbf{r}i, d{\text{min}}(\mathbf{x}_b - \mathbf{r}i))Lri(xb−ri,dmin(xb−ri)) 和 Lri(xb−ri,dmax(xb−ri))L{r_i}(\mathbf{x}_b - \mathbf{r}i, d{\text{max}}(\mathbf{x}_b - \mathbf{r}_i))Lri(xb−ri,dmax(xb−ri))。方程(6)增强如下:
if d>dmax(xb−ri):Lˉri(xb,d)=Cri(xb,d)+P2\text{if } \; d > d_{\text{max}}(\mathbf{x}_b - \mathbf{r}i) : \quad \bar{L}{r_i}(\mathbf{x}b, d) = C{r_i}(\mathbf{x}_b, d) + P2 if d>dmax(xb−ri):Lˉri(xb,d)=Cri(xb,d)+P2
if d<dmin(xb−ri):Lˉri(xb,d)=Cri(xb,d)+P2\text{if } \; d < d_{\text{min}}(\mathbf{x}_b - \mathbf{r}i) : \quad \bar{L}{r_i}(\mathbf{x}b, d) = C{r_i}(\mathbf{x}_b, d) + P2 if d<dmin(xb−ri):Lˉri(xb,d)=Cri(xb,d)+P2
else :Lˉri(xb,d)=Lri(xb−ri,d)(8)\text{else :} \quad \bar{L}_{r_i}(\mathbf{x}b, d) = L{r_i}(\mathbf{x}_b - \mathbf{r}_i, d) \tag{8}else :Lˉri(xb,d)=Lri(xb−ri,d)(8)
在某一金字塔层级的图像对匹配过程中,基图像和匹配图像的角色被交换。这允许对估计的视差进行一致性检查,声称 ∥db−dm∥≤1\|d_b - d_m\| \leq 1∥db−dm∥≤1。此外,使用 Bradski(2000)分发的 OpenCV 库中的算法过滤离群值。惩罚参数 P2P_2P2 根据基图像中的灰度值自适应平滑。在 SURE 中,P2P_2P2 具有二值特性,并基于 Canny 边缘图像计算。如果检测到边缘,则使用 P2=P21P_2 = P_{21}P2=P21 进行低平滑;如果未检测到边缘,则通过设置 P2=P21+P22P_2 = P_{21} + P_{22}P2=P21+P22 强制增加平滑**(P21,P22是什么作者没说,这里相对于原始sgm取消了P1,P2只关注视差跳变比较大的图像)**。除了搜索范围限制外,匹配仅在通常在两个视图中捕获的场景部分的图像区域中进行。为了推导这些图像部分,最低金字塔层级的视差图经过严格过滤。然后像素按列从左和右图像边界传递到图像中心。在检测到第一个成功匹配的像素之前传递的所有像素都被无效并排除在进一步处理之外。由于视差范围限制,这导致匹配过程显著加速。
2.3 结构计算模块
本段描述了实现的 3D 对象点三角化算法。三角化模块的输入是校正/原始基图像和匹配图像的方向以及相应的视差图像。输出是 3D 点云或深度图像。实施了两种主要处理策略。第一种策略直接计算单个立体对的深度。对于航空应用,其中 2.5D DSM 是兴趣所在,这种方法在大多数情况下是足够的。为了去除粗差并提高从单个立体模型派生的点云的精度,所有点都被分配到地面对齐的 xy 网格,并且高度值经过中值滤波。对于近距离和倾斜航空应用,第二种视差图融合方法更为重要。处理真实 3D 结构时,网格方法和涉及的滤波机制不适用,因为会丢失太多信息。为了在处理 3D 场景时仍然去除粗差并提高精度,跨共享公共基视图的立体模型的冗余测量被链接并检查几何一致性。因为对于每组冗余视差估计,必须计算深度信息并且需要提供时间高效的算法。
2.3.1 立体对的结构
一对极线图像 Ibr\mathbf{I}^r_bIbr,Imr\mathbf{I}^r_mImr(如在 2.1 节中描述的校正过程中生成)的 3D 信息可以使用众所周知的公式(Kraus,1994)提取:
Z=Bfd(9)Z = \frac{Bf}{d} \tag{9}Z=dBf(9)
这是所谓的立体成像正常情况。除了低计算成本,精度分析也很方便。其中 BBB 表示基线 ∥Cbr−Cmr∥\|\mathbf{C}^r_b - \mathbf{C}^r_m\|∥Cbr−Cmr∥,ddd 是视差,fff 表示焦距。ZZZ 表示相对于相机帧的点的 z 分量。更一般情况下的 3D 坐标计算可以通过将齐次图像坐标 xb\mathbf{x}_bxb 转换到平面 z=1z=1z=1,表示为 (xˉbr,yˉbr,1)(\bar{x}^r_b, \bar{y}^r_b, 1)(xˉbr,yˉbr,1) 来轻松适应。然后可以类似地根据方程(9)计算相对于第一个相机的 Z 坐标,设置 f=1f=1f=1。相应的 x 和 y 坐标可以使用截距定理获得。校正基图像中心 Cbr\mathbf{C}^r_bCbr 和物体点 Xbr\mathbf{X}^r_bXbr 在光学射线上的距离 DbrD^r_bDbr 可以计算为:
Dbr=B(xˉbr)2+(yˉbr)2+1d(10)D^r_b = \frac{B \sqrt{(\bar{x}^r_b)^2 + (\bar{y}^r_b)^2 + 1}}{d} \tag{10}Dbr=dB(xˉbr)2+(yˉbr)2+1 (10)
2.3.2 多个立体对的结构
在许多重建场景中,捕获的图像可能高度重叠。因此,可以选择纳入匹配过程的图像对,使得对于同一表面区域可用冗余视差估计。**首先利用这种冗余通过评估几何一致性来消除错误的视差估计(离群点消除)。**一旦得到一组一致的测量值,最终的对象点坐标就会被计算。在此过程中,冗余被进一步利用来提高三角化点的精度(三角化) 。两个冗余估计视差的示例如图(3)所示。跨 nnn 个立体模型的对应图像坐标如下导出。基图像像素坐标 xb=(xb,yb,1)\mathbf{x}b = (x_b, y_b, 1)xb=(xb,yb,1) 使用如方程(2)所述的单应性转换为校正基图像坐标 xbr=(xbr,ybr,1)\mathbf{x}^r_b = (x^r_b, y^r_b, 1)xbr=(xbr,ybr,1)。对于 xbr\mathbf{x}^r_bxbr,视差在匹配过程中计算,校正匹配图像中的坐标可以表示为 xmr=(xbr+D(xbr),ybr,1)\mathbf{x}^r_m = (x^r_b + \mathbf{D}(x^r_b), y^r_b, 1)xmr=(xbr+D(xbr),ybr,1)。由于 xbr\mathbf{x}^r_bxbr 通常为实数值,实际视差通过双线性插值获得。校正基图像光学中心和物体点之间的距离 DbrD^r_bDbr 可以有效地使用方程(10)计算。将基图像像素 xb\mathbf{x}bxb 与 nnn 个立体模型链接导致 nnn 个深度估计 (Db,1r,...,Db,Nr)(D^r{b,1}, \ldots, D^r{b,N})(Db,1r,...,Db,Nr)。注意 Db,nrD^r_{b,n}Db,nr 是相对于校正基图像坐标系定义的。然而,方程(4)表明校正基图像射线上的深度 Db,nrD^r_{b,n}Db,nr 等于原始基图像射线上的深度,因此 Db,nr=Db,nD^r_{b,n} = D_{b,n}Db,nr=Db,n。通过扩展方程(10),可以在公共原始基坐标系中计算相机与物体的距离:
Db,n(xb,Tn,Dn)=B(t1,nxb)2+(t2,nxb)2+1Dn(Tnxb)(11)D_{b,n}(\mathbf{x}_b, \mathbf{T}_n, \mathbf{D}n) = \frac{B \sqrt{(\mathbf{t}{1,n} \mathbf{x}b)^2 + (\mathbf{t}{2,n} \mathbf{x}_b)^2 + 1}}{\mathbf{D}_n(\mathbf{T}_n \mathbf{x}_b)} \tag{11}Db,n(xb,Tn,Dn)=Dn(Tnxb)B(t1,nxb)2+(t2,nxb)2+1 (11)
其中 Tn=Kb−1Hb\mathbf{T}_n = \mathbf{K}^{-1}b \mathbf{H}bTn=Kb−1Hb 且 t1,n\mathbf{t}{1,n}t1,n,t2,n\mathbf{t}{2,n}t2,n 分别表示 Tn\mathbf{T}_nTn 的第一和第二行。这里先左乘单应变换到立体校正之前的像素坐标,再乘以内参逆矩阵变换到z=1相机坐标系下。代入公式10就得到了相机光心与物体点之间的距离,注意这里的Xb表示像素坐标,公式10中xb表示相机坐标。
离群值消除
在密集立体匹配过程中,错误的视差估计通过前向-后向一致性检查和斑点滤波器消除。然而,并非所有不匹配都可以通过这些 2D 滤波方法去除。因此,通过检查对象空间中的几何一致性来额外过滤错误的视差 。声称跨一组立体模型的冗余视差隐含的 3D 坐标在某些置信区间内空间上是一致的。对于校正图像的特殊情况,3D 点的一致性检查可以简化为一维问题。这允许快速处理和精确误差建模。设一个基图像被校正并匹配到 nnn 个匹配图像。此外,假设视差以由置信区间 σ\sigmaσ 定义的精度估计。该区间在由 xb\mathbf{x}_bxb 定义的光学基图像射线上诱导一个视差不确定性范围 Rn=[bnmin,bnmax]R_n = [b^{min}_n, b^{max}_n]Rn=[bnmin,bnmax]。其边界根据方程(11)计算:
bnmin,max=Db,n(xb,Tn,Dn(xb)±0.5σ)(12)b^{min, max}n = D{b,n}(\mathbf{x}_b, \mathbf{T}_n, \mathbf{D}_n(\mathbf{x}_b) \pm 0.5\sigma) \tag{12}bnmin,max=Db,n(xb,Tn,Dn(xb)±0.5σ)(12)
如果单个对象点的不确定性范围 RnR_nRn 重叠,则深度测量被视为一致并分配给一个簇。然后使用最大簇中的所有测量值进行最终对象点三角化。(公式12得到的是由视差计算得到的基准图像光心到物体距离再加上正负0.5 \\sigma范围,每个视差都有一个距离区间,这样得到一个距离区间集合,这个集合必须要有重叠的区间范围,选择重合最多的集合,也就是不在这个最大集合的都视为异常视差 )如果有两个或更多簇具有相同的大小 mmm,则提供最低平均射线交角的簇被认为是最可靠的并用于结构计算:
1m∑m(∡(X−Cb,X−Cm))(13)\frac{1}{m} \sum_m (\measuredangle(\mathbf{X} - \mathbf{C}_b, \mathbf{X} - \mathbf{C}_m)) \tag{13}m1m∑(∡(X−Cb,X−Cm))(13)
注意,在这种方法中,图像空间精度被正确传播。这对于可靠地检测离群值特别是存在变化的几何配置的立体模型非常重要。
三角化
3D 点三角化问题最小化重投影误差是一个非线性问题。通常使用迭代数值方法如 Gauss-Newton 或 Levenberg-Marquardt 来解决。这涉及求解具有设计矩阵 A\mathbf{A}A 的线性方程组,每个纳入模型具有两行。在校正图像的特殊情况中,该问题可以重新表述为具有每立体模型一行的方程组。在投影空间中,对象点三角化可以表述为线性问题(R. I. Hartley,2004)。然而,仅最小化代数误差而没有任何几何意义。在 SURE 中,通过最小化来自多个冗余深度的物体空间误差来实现 3D 坐标计算方法:
∑n(D^−Dm)2=!min(14)\sum_n (\hat{D} - D_m)^2 \overset{!}{=} \text{min} \tag{14}n∑(D^−Dm)2=!min(14)
该解简单地为估计深度的平均值 1n∑Dn\frac{1}{n} \sum D_nn1∑Dn。沿光学射线的精度可以通过标准偏差估计。尽管该方法速度快,但不同图像对的几何属性没有得到适当建模。因此,提供了一种最小化校正匹配图像的重投影误差的方法:
∑n12(x^m−xm)2=!min(15)\sum_n \frac{1}{2} (\hat{x}_m - x_m)^2 \overset{!}{=} \text{min} \tag{15}n∑21(x^m−xm)2=!min(15)
重投影误差可以通过标量表达,因为测量值以及更新的图像坐标位于水平极线上。方程(15)的最小值通过导数并设置为零定义。使用方程(10)和关系 Dm=D^D_m = \hat{D}Dm=D^(),该函数可以重新表述为依赖于共同未知深度 D^\hat{D}D^ 的函数:
fm(D^)=Bm(xˉb,m)2+(yˉb,m)2+1D^−dm(16)f_m(\hat{D}) = \frac{B_m \sqrt{(\bar{x}{b,m})^2 + (\bar{y}{b,m})^2 + 1}}{\hat{D}} - d_m \tag{16}fm(D^)=D^Bm(xˉb,m)2+(yˉb,m)2+1 −dm(16)
对于 nnn 个立体模型,这导致一组 nnn 个非线性方程 D^\hat{D}D^。通过 Levenberg-Marquardt(Lourakis,2004 年 7 月)或 Gauss-Newton 算法确定最小化方程(15)的最优 D^\hat{D}D^。这意味着线性化和求解非齐次线性方程 Ax=b\mathbf{A}\mathbf{x} = \mathbf{b}Ax=b。最小二乘解为 x^=(ATA)−1ATb\hat{\mathbf{x}} = (\mathbf{A}^T \mathbf{A})^{-1} \mathbf{A}^T \mathbf{b}x^=(ATA)−1ATb。注意,由于设计矩阵 A\mathbf{A}A 的维度为 n×1n \times 1n×1,ATA\mathbf{A}^T \mathbf{A}ATA 为标量,因此不需要矩阵求逆。初始深度值从方程(14)计算。估计深度的精度可以通过协方差矩阵获得。到目前为止,我们假设视差估计的精度是相同的。利用关于匹配精度的先验知识,根据射线交角,离群值检测可以细化,并且可以在最小化重投影误差的过程中使用加权调整。
🔷 一、公式 (15) 及其符号含义
公式 (15) 写为:
∑n12(x^m−xm)2=!min(15)\sum_n \frac{1}{2} (\hat{x}_m - x_m)^2 \overset{!}{=} \min \tag{15}n∑21(x^m−xm)2=!min(15)
🔷 二、公式 (16) 是什么?
公式 (16) 定义了一个函数:
fm(D^)=Bm(xˉb,m)2+(yˉb,m)2+1D^−dm(16)f_m(\hat{D}) = \frac{B_m \sqrt{(\bar{x}{b,m})^2 + (\bar{y}{b,m})^2 + 1}}{\hat{D}} - d_m \tag{16}fm(D^)=D^Bm(xˉb,m)2+(yˉb,m)2+1 −dm(16)
🔷 三、公式 (15) 与 (16) 的关系
🎯 核心思想:
最小化重投影误差(公式 15) ⇔ 最小化视差残差(公式 16)
🔗 推导逻辑如下:
-
在校正图像中,匹配点的 x 坐标满足:
xm=xb+dmx_m = x_b + d_mxm=xb+dm
其中xbx_bxb是基图像 x 坐标,dmd_mdm是视差。
-
若空间点深度为D^\hat{D}D^,则根据几何关系(类似公式 10),预测的视差应为:
d^m=Bm(xˉb,m)2+(yˉb,m)2+1D^\hat{d}m = \frac{B_m \sqrt{(\bar{x}{b,m})^2 + (\bar{y}_{b,m})^2 + 1}}{\hat{D}}d^m=D^Bm(xˉb,m)2+(yˉb,m)2+1
-
因此,预测的匹配点位置为:
x^m=xb+d^m\hat{x}_m = x_b + \hat{d}_mx^m=xb+d^m
-
于是重投影误差为:
x^m−xm=(xb+d^m)−(xb+dm)=d^m−dm=fm(D^)\hat{x}_m - x_m = (x_b + \hat{d}_m) - (x_b + d_m) = \hat{d}_m - d_m = f_m(\hat{D})x^m−xm=(xb+d^m)−(xb+dm)=d^m−dm=fm(D^)
✅ 所以:
x^m−xm=fm(D^)\hat{x}_m - x_m = f_m(\hat{D})x^m−xm=fm(D^)
代入公式 (15),得到等价优化问题:
minD^∑n12[fn(D^)]2=minD^∑n12(Bn(xˉb,n)2+(yˉb,n)2+1D^−dn)2\min_{\hat{D}} \sum_n \frac{1}{2} \left[ f_n(\hat{D}) \right]^2 = \min_{\hat{D}} \sum_n \frac{1}{2} \left( \frac{B_n \sqrt{(\bar{x}{b,n})^2 + (\bar{y}{b,n})^2 + 1}}{\hat{D}} - d_n \right)^2D^minn∑21[fn(D^)]2=D^minn∑21(D^Bn(xˉb,n)2+(yˉb,n)2+1 −dn)2
🔥 结论 :
公式 (16) 定义了公式 (15) 中误差项的具体函数形式 。换句话说,公式 (16) 是公式 (15) 的数学展开 ,将重投影误差表达为关于待优化变量 D^\hat{D}D^ 的非线性函数。
🔷 四、为什么这样做?
-
直接优化 3D 坐标 X\mathbf{X}X 需要处理 3 个自由度;
-
但因为所有观测都来自同一个基图像像素xb\mathbf{x}_bxb ,所以 3D 点必定位于从Cb\mathbf{C}_bCb出发、穿过xb\mathbf{x}_bxb的射线上;
-
因此,整个问题可以降维为仅优化一个参数:深度D^\hat{D}D^;
-
公式 (15)+(16) 正是利用这一约束,将多视图三角化转化为一维非线性最小二乘问题,计算高效且稳定。