處理量測結果 (Stereo ace)#
概覽#
Basler Stereo ace 相機使用校正後的立體影像對來計算視差、誤差與信賴度影像。
校正後,可以確保物件點會投影至左側與右側影像中的相同列。然而,該點在右側影像中投影的行,總是會更靠左,亦即小於或等於左側影像中該點的行。視差是指右側與左側影像中行之間的差值,表示物件點距離相機的深度或距離。視差影像會儲存左側相機影像中所有像素的視差值。視差越大,表示物件點越近。視差為 0 表示物件點的投影位於相同的影像行,且物件點位於無限遠處。
有些因素會妨礙可靠地計算視差:
- 遮擋: 遮擋是指右側相機無法看見的物件左側區域。這些區域處於「隱藏」狀態,因此無法判定視差。
- 缺乏紋理: Stereo ace 的投射器可讓您建立紋理,但在極端情況下則例外,例如完全不反射任何光的全黑物件。
無法判定視差的像素會被指派 0 的視差值,藉此標記為無效。為了區分無效的視差量測與距離無限遠的物件之 0 視差量測,後者的視差值會設為大於 0 的最小可能視差值。
為了計算視差值,立體匹配演算法必須在左側與右側相機影像中尋找對應的物件點。這些點代表場景中的同一個物件點。為了進行立體匹配,Basler Stereo ace 使用了 SGM (Semi-Global Matching)。
計算深度影像與點雲#
差異圖包含 16 位元無符號整數值。這些值必須乘以在 Scan3dCoordinateScale 用於取得視差值的參數 d 以像素為單位。要根據視差值計算 3D 物體的座標,需要焦距、基線以及主點。這些參數可在 Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU的狀態,以及 Scan3dPrincipalPointV 特性。焦距與主點取決於所選元件的影像解析度。只要知道這些數值,即可將像素座標與視差轉換為相機座標系中的 3D 物體座標。
資訊
閱讀前 Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU的狀態,以及 Scan3dPrincipalPointV, 您必須設定 ComponentSelector 參數設為 Disparity 因為這些數值取決於元件。
假設 d16ik 是第 X 欄的 16 位元視差值 i 以及行 k 視差圖中的浮點數視差值 d(以像素為單位)ik 由以下公式給出:
$$ d_{ik}=d16_{ik} \cdot \mathrm{Scan3dCoordinateScale} $$
可以使用以下參數表示以公尺為單位的 3D 重建:
$$ P_x=\left(i+0.5-\mathrm{Scan3dPrincipalPointU}\right) \frac{\mathrm{Scan3dBaseline}}{d_{ik}}\ $$
$$ P_y=\left(k+0.5-\mathrm{Scan3dPrincipalPointV}\right) \frac{\mathrm{Scan3dBaseline}}{d_{ik}}\ $$
$$ P_z=\mathrm{Scan3dFocalLength} \frac{\mathrm{Scan3dBaseline}}{d_{ik}} $$
由視差影像計算出的所有物件點集合構成了點雲,可用於 3D 建模應用程式。透過將每個像素中的視差值替換為 Pz 的值,即可將視差影像轉換為深度影像。
提示
您可以使用 chunk data,而不必直接讀取參數。這樣一來,3D 計算所需的資訊就會由 ChunkScan3dCoordinateScale, ChunkScan3dFocalLength, ChunkScan3dBaseline, ChunkScan3dPrincipalPointU的狀態,以及 ChunkScan3dPrincipalPointV chunk parameters 新增至每個影像中。若要啟用 chunk data,請設定 ChunkModeActive 參數設為 true。在讀取這些 chunk data 之前,您必須設定 ChunkComponentSelector 參數設為 Disparity.
計算距離#
給定一個點的座標 (x,y,z) (單位為公釐),該點到相機光學中心的距離可以使用以下公式計算:
$$ d = sqrt( x * x + y * y + z * z ) $$