測定結果の処理 (Stereo ace)#
概要#
Basler Stereo ace カメラは、整列済みのステレオ画像ペアを使用して、視差(ディスパリティ)、エラー、および信頼度画像を計算します。
整列後、オブジェクト上の点は、左右両方の画像内の同じ行に必ず投影されます。ただし、右画像内でその点が投影される列は、左画像内の同じ点の列よりも常に左側(つまり、小さいか等しい値)になります。視差は、左右の画像間における列の差であり、カメラから見たオブジェクトの奥行きや距離を表します。視差画像には、左カメラ画像のすべてのピクセルの視差値が格納されます。視差が大きいほど、オブジェクト点は近くなります。視差が 0 の場合、オブジェクト点の投影位置が同じ画像列にあり、オブジェクト点が無限遠にあることを意味します。
視差の信頼性の高い計算を妨げる要因には、以下のようなものがあります。
- オクルージョン(隠蔽): オクルージョンとは、右カメラから見えないオブジェクトの左側の領域のことです。視界から「隠れている」ため、視差を特定できません。
- テクスチャの不足: Stereo ace のプロジェクターを使用することで、完全に光を反射しない完全な黒色のオブジェクトなどの極端な場合を除き、テクスチャを作成することができます。
視差を特定できないピクセルには、視差値として 0 が割り当てられ、無効としてマークされます。無効な視差測定値と、無限遠にあるオブジェクトの視差測定値(0)を区別するために、後者の視差値は 0 を上回る最小の可能な視差値に設定されます。
視差値を計算するために、ステレオマッチングアルゴリズムは左右のカメラ画像内で対応するオブジェクト点を見つける必要があります。これらは、シーン内の同じオブジェクト点を表す点です。ステレオマッチングのために、Basler Stereo ace は SGM(セミグローバルマッチング)を使用します。
深度画像とポイントクラウドの計算#
視差画像には 16 ビットの符号なし整数値が含まれています。これらの値に、次の項目で指定されるスケール値を乗算する必要があります。 Scan3dCoordinateScale パラメータを使用して視差値を取得します d 単位はピクセルです。視差値から 3D オブジェクト座標を計算するには、焦点距離、ベースライン、および主点が必要です。これらのパラメータは以下の場所で利用できます。 Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU、および Scan3dPrincipalPointV 機能。焦点距離と主点は、選択したコンポーネントの画像解像度によって異なります。これらの値がわかっていれば、ピクセル座標と視差をカメラ座標系における 3D オブジェクト座標に変換できます。
情報
読み取りの前に Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU、および Scan3dPrincipalPointV、設定する必要があります ComponentSelector パラメータを次のように設定: Disparity これらの値はコンポーネントによって異なるためです。
d16 と仮定するとik は列における 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の値に置き換えることでデプス画像に変換されます。
ヒント
パラメータを直接読み取る代わりに、チャンクデータを使用できます。これにより、3D計算に必要な情報が ChunkScan3dCoordinateScale, ChunkScan3dFocalLength, ChunkScan3dBaseline, ChunkScan3dPrincipalPointU、および ChunkScan3dPrincipalPointV チャンクパラメータによってすべての画像に追加されます。チャンクデータを有効にするには、 ChunkModeActive パラメータを次のように設定: trueを設定します。これらのチャンクデータを読み取る前に、 ChunkComponentSelector パラメータを次のように設定: Disparity.
距離の計算#
mm単位の (x,y,z) のポイント座標が与えられた場合、カメラの光学的中心に対するそのポイントの距離は、次の式を使用して計算できます。
$$ d = sqrt( x * x + y * y + z * z ) $$