激光三角法


非常感謝朱志浩師哥對激光三角法的詳細講解,使我獲得了很多新知識。

三維重建的方法:單目、雙目、光度立體等

激光三角法是單目+線結構光的方法

激光器發射出的是一個激光平面,也叫光刀面,激光平面照射到物體上就形成了一道線激光

整個儀器一邊是相機,另一邊是線激光器,線激光器將線結構光打在物體上,相機拍攝到線激光的畫面,(右圖)然后計算出激光線上的像素點的深度值,就能夠恢復出物體的三維結構了。

相機標定->激光平面標定->三維重建

相機標定的目的就是獲得相機內參矩陣和畸變參數等一系列參數,相機標定的方法很多,這里使用張正友標定法。

激光平面標定的目的:

獲得激光平面在相機坐標系下的平面方程\(Ax+By+Cz+D=0\),從而可以獲得圖像線激光上像素點的深度

注意:平面方程是在相機坐標系下定義的,所以一旦激光平面標定完成之后,激光器和相機的相對位置就必須固定不動了。

左圖就是從圖像中提取激光線得到的光條中心線,每一張圖片都能提取出一條激光線。三個不共線的點可以確定一個平面,所以我們最少可以使用2張激光線的圖片,在激光線上提取3個點就可以得到激光平面方程,但這樣做誤差肯定很大。

所以這里用到了很多張圖片,一條激光線代表一張圖片,最終通過最小二乘法擬合得到一個平面,就是所要求的激光平面。

流程:相機標定\(\longrightarrow\)提取激光線\(\longrightarrow\)激光線上的點轉化到相機坐標系\(\longrightarrow\)擬合激光平面

提取激光線:

方法:極值法、閾值法、灰度質心法

極值法:圖像中的激光線是由一定的寬度的,而且激光線的中心亮度最大,激光線從中心到兩側邊緣亮度逐漸減小,所以極值法就是尋找圖像中每一行的最大值作為激光線的光條中心。

閾值法:首先設定一個閾值T,然后從圖像的兩側向中間尋找灰度值為T的像素點A、B,最后取A、B的中心作為激光線的光條中心。

灰度質心法:用到了重心公式,把圖像的灰度值當作質量,灰度值越大,也就是質量越大,找到圖像中每一行的重心當作激光線的光條中心。

這三個方法其實都非常容易受到噪聲的干擾,所以需要進一步的改進方法。

將激光線上的像素點的像素坐標轉化到相機坐標系下是重點,因為最后需要激光平面的方程就是定義在相機坐標系下的,所以需要將剛才提取到的激光線像素坐標轉化到相機坐標系下。

首先需要明確的是,在相機標定過程中定義的世界坐標系是以標定板所在的平面為\(z=0\)\(xoy\)平面)的平面,也就是說標定板平面在世界坐標系下的平面方程為\(z=0\),接下來需要求的是標定板平面在相機坐標系下的方程。

通過相機標定,我們能得到世界坐標系到相機坐標系的\(R,T\),這里的\(R\)\(T\)是從世界坐標系到相機坐標系的,求逆后得到相機坐標系到世界坐標系下的\(R,T\)

\[\begin{eqnarray} \left( \begin{matrix} x_w\\y_w\\z_w \end{matrix} \right) &=&R^{-1}\left( \begin{matrix} x_c\\y_c\\z_c \end{matrix} \right)+(-T)\\ &=&\left( \begin{matrix} r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33} \end{matrix} \right) \left( \begin{matrix} x_c\\y_c\\z_c \end{matrix} \right)+\left( \begin{matrix} t_x\\t_y\\t_z \end{matrix} \right)\\ &=&\left( \begin{matrix} r_{11}x_c+r_{12}y_c+r_{13}z_c+t_x\\ r_{21}x_c+r_{22}y_c+r_{23}z_c+t_y\\ r_{31}x_c+r_{32}y_c+r_{33}z_c+t_z \end{matrix} \right) \end{eqnarray} \]

將公式展開之后把第三行提取出來,由於標定板平面在世界坐標系下的方程為\(z_w=0\)

所以\(r_{31}x_c+r_{32}y_c+r_{33}z_c+t_z = 0\),把$ z_w=0$代入即為標定板在相機坐標系下的方程得到這個方程之后,我們就可以求出打在標定板平面上的激光線上的點在相機坐標系下的三維坐標了。

\[z_c \left( \begin{matrix} u\\v\\1 \end{matrix} \right) \overset{K}{\longrightarrow}\left( \begin{matrix} x_c\\y_c\\z_c \end{matrix} \right) \]

其中帶\(u,v\)參數的兩個方程,將方程里的\(x_c,y_c\)代入上式\(r_{31}x_c+r_{32}y_c+r_{33}z_c+t_z = 0\),即可求出\(z_c\)。(大概是這樣,我沒太聽懂)

通過剛才求出的很多激光線上的點在相機坐標系下的三維坐標,通過最小二乘法擬合即可得到激光平面方程

以上相機標定和激光平面標定都是激光三角法的准備工作,接下來才正式進入三維重建的過程

對掃描拍攝到的圖像進行三維重建,這個過程也分為三個步驟:

  1. 提取激光線,也就是之前提到的三個方法:極值法、閾值法、灰度質心法

  2. 根據標定得到的激光平面方程,可以求得激光線上的點在相機坐標系下的三維坐標,每一幀圖像都可以得到一條激光線上的三維點坐標,但都是相機坐標系下的坐標,需要轉化到世界坐標系下,所以需要進行多幀拼接,也就是把所有相機坐標系下求得的三維點轉化到一個世界坐標系下。這里定義第一幀圖像的相機坐標系定義為世界坐標系,接下來每一幀圖像都需要變換到這個世界坐標系下,也就是求外參\(R,T\),這里需要根據儀器的不同求出不同的\(R,T\)

    以旋轉掃描為例,在儀器運轉過程中相機只會發生旋轉運動,所以只需要求旋轉矩陣\(R\)即可,根據相機坐標系的定義,\(z\)軸指向鏡頭的前方,\(y\)軸指向鏡頭的上方,所以旋轉掃描是圍繞\(y\)軸旋轉,對應的旋轉矩陣\(R\)就是這樣的

  3. 最終將所有相機坐標系下的三維點都變換到世界坐標系下,得到的所有三維點坐標就是重建物體的三維模型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM