画像品質の最適化#
フレームレート、exposure time、ゲインなどのカメラパラメータによって、画像の撮影タイミングと方法が決定されます。また、これらは画質にも大きな影響を与えます。深度画像の画質をさらに向上させるために、調整可能なステレオマッチングパラメータがいくつか用意されています。
どちらのタイプのパラメータも、pylon 3D Viewerを使用して設定できます。これにより、設定変更の結果をそれぞれの画像ウィンドウで即座に確認できます。
カメラパラメータ#
行った変更を確認するには、Intensity 画像ウィンドウを使用します。
フレームレート#
達成可能な最大フレームレート(単位:fps(frames per second))は、カメラの設定とホストシステムのハードウェアの両方に依存します。フレームレートには、いくつかの重要な要素が影響します。
- 照明制御:プロジェクターのデューティサイクルは最大 2.5 % に制限されています。最大 5 ms の exposure time と相まって、これが画像取り込み速度を制限しています。
- Exposure Time:exposure time は画像取得間隔に直接影響します。exposure time を短くすると高フレームレートが可能になり、長くすると実現可能な最大フレームレートが低下します。
- 深度の計算: 深度画像の計算に必要な時間は、次のパラメータで設定された解像度
BslDepthResolutionおよびホストシステムで使用可能な処理ハードウェア(CPU または GPU)によって異なります。高解像度かつ処理能力の低いハードウェアを使用すると処理時間が長くなり、その結果、達成可能なフレームレートが低下します。
フレームレートによって、GigE Vision インターフェイス経由で転送される画像の数が決まります。フレームレートを下げることで、ネットワーク負荷だけでなく、Stereo ace カメラと受信側ホストコンピュータの両方の演算負荷を大幅に軽減できます。多くのアプリケーションでは、システムの能力に合わせつつアプリケーションの要件を満たすために、フレームレートを下げることができます(また下げるべきです)。
Exposure Time と Gain#
exposure time とは、画像取得時にイメージセンサーが光に晒される時間の長さを指します。撮影した画像の明るさに影響します。exposure time は通常、数ミリ秒のオーダーです。シーン内の光量が少ない場合は、より長い exposure time が必要になります。ただし、長時間の exposure time は、シーン内の物体や Stereo ace カメラ自体が動いた場合にブレを引き起こす可能性があります。
画像の明るさに影響する 2 つ目のパラメータはゲインです。ゲインは、画像をより明るく表示するための増幅係数です。しかし同時に、画像ノイズも増加させます。
exposure time とゲインを設定することで、シーンの中心にあるオブジェクトなど、アプリケーションに関連するシーンの部分に焦点を合わせることができます。関心領域内の露出過多は避けなければなりませんが、アプリケーションに関係のないシーン部分であれば許容できます。
一般原則として、露出過多の領域ではピクセルが急速に飽和して情報が失われるため、画像処理においては露出不足よりも露出過多の方が悪影響を及ぼします。対照的に、露出不足の領域には画像処理に十分な情報が含まれていることがよくあります。そのため、画像を明るくしすぎるよりも、暗めになるようにパラメータを設定する方が得策です。
ゲインは、低照度環境の場合や、モーションブラーを防ぐために exposure time を短縮したい場合にのみ増加させる必要があります。原則として、ゲイン値は常にできるだけ低く抑える必要があります。
ステレオマッチングパラメータ#
行った変更を確認するには、Point Cloud、Depth Map、および Confidence の各画像ウィンドウを使用します。
ワーキングレンジ#
まず、アプリケーションのワーキングレンジを考慮する必要があります。 BslDepthMaxDepth パラメータを特定の値に設定すると、それよりも遠い深度画像内のすべてのピクセルが無効になります。これは、アプリケーションに関係のないシーンの一部を除外する簡単な方法です。
同様に、対象物が指定された距離よりも Stereo ace カメラに近づくことが絶対にないと確信している場合は、 BslDepthMinDepth パラメータを大きくすることができます。最小深度を大きくすると、深度画像の計算にかかる時間も短縮され、その結果フレームレートが向上するというメリットがあります。
レイテンシー#
アプリケーションによっては、深度値の品質よりも、深度画像の計算におけるレイテンシの方が重要になる場合があります。この場合、 BslDepthResolution パラメータを Full から High または Lowから小さくすることができます。深度解像度を下げると、ステレオマッチング前の画像サイズが縮小されます。これにより、処理時間が短縮され、達成できるフレームレートが大幅に向上します。ただし、深度画像を計算するためのフレームレートは、常にカメラのフレームレート設定によって制限されます。
ホスト側の転送および表示負荷がボトルネックになっている場合は、 BslIntensityResolution.
も削減できます。前述のように、レイテンシの削減と達成可能なフレームレートの向上のためにも、可能な限り最小深度を大きくする必要があります。
密度#
密度とは、画像内に無効なピクセルがどれだけ存在するかを示す指標です。密度が高いほど、無効なピクセルが少ないことを意味します。深度画像には、pylon 3D Viewerに表示される深度マップ上で黒く表示される無効な値が含まれていることがよくあります。これは、指定されたワーキングレンジの外側にあるシーンの部分や、オブジェクトの左側の領域で発生します。これは、左カメラが基準カメラであり、背景の一部が右カメラから見えないためです。これはオクルージョンと呼ばれ、通常の現象です。
一般的に、無効なピクセルは望ましくありません。これらは、ステレオマッチング方式で深度を計算できないことが原因で発生します。これにはさまざまな理由があります。深度画像の密度を高めるために、5つの異なる(かつ補完的な)戦略を利用できます。
- 画像露光の調整:露光オーバーの領域にはマッチングに必要な十分な情報が含まれていないため、無効として表示されます。さらに、画像ノイズがシーンのテクスチャよりも強い場合、領域が無効として表示されることがあります。Exposure Time and Gainセクションで説明されているように、露光時間とゲインの設定を調整することで、両方の問題を解決できます。
- 静的シーンの活用: 画像キャプチャ中にシーンと Stereo ace カメラが動かない場合は、静的モード(
BslDepthStaticSceneパラメータ)を使用することをお勧めします。このパラメータが有効な場合、Stereo ace カメラは内部で連続画像を収集し、これらの画像を平均化してノイズを低減します。これにより、テクスチャの弱いオブジェクトでもステレオマッチングが可能になります。これにより、多くの場合、はるかに高密度な深度画像が得られます。 - プロジェクターによるシーンのテクスチャの改善:屋内環境で無効な領域が発生する最も一般的な原因の1つは、テクスチャの欠如、または非常に反復的なテクスチャの存在です。通常、壁やテーブルはテクスチャのない単色です。その他の構造物は非常に反復的です。どちらのケースも、成功したステレオマッチングにはあまり寄与しません。これらのおよびテクスチャが過剰または不足しているオブジェクトやシーンの部分がアプリケーションにとって重要である場合は、プロジェクターを使用して人工的にテクスチャを追加することでのみキャプチャできます。
- Illumination Modeの選択: シーン内に投影パターンなしで輝度データを取得するには、
AlternateActiveIllumination Modeを使用します。このモードでは、画像ごとに2回の露光が実行されます。1回は深度計算用のプロジェクターを有効にした露光、もう1回は輝度データをキャプチャするための露光です。AlternateActiveはレイテンシを増加させることに注意してください。視差データのみが必要な場合は、BslIlluminationModeからAlwaysActiveではなくAlternateActiveを設定することでレイテンシを削減できます。これにより、露光中常にプロジェクターが有効になります。 - 照明の設定: シーンに合わせて投影パターンを最適化するように、 Illumination Strength パラメータ
BslIlluminationStrengthおよびBslIlluminationModeを調整します。 Illumination Strengthを大きくすると、特に強い環境光があるシーンにおいて、投影パターンの視認性を向上させることができます。同時に、デューティサイクルと最大アクティブ化時間を超えないようにする必要があります。最良の結果を得るには、適切なIllumination Modeを選択して、プロジェクターをカメラの露光と同期させます。AlternateActiveIllumination Mode を使用する場合、周囲の光が少なく、投影パターンなしの画像が暗すぎる場合は、Illumination Strength を下げ、Exposure Time を長くすることで、画像の明るさを改善できます。
深度アーチファクト#
次のような深度アーティファクトが一般的です。
- Outliers: 通常、ワーキングレンジ内のどこにでも発生する可能性がある、深度値の小さなパッチ。
- Geometric errors: 不正と判断されたものの、実際の深度に近い深度値。
フィルタリングエラーとは、不正な深度値を無効に設定することを意味します。 BslDepthFill パラメータを使用すると、通常はエラーフィルタリングによって発生する小さな領域を補間できます。Fill 値を高くすると、補間できる領域の数が増加します。補間される領域のサイズは、エラーフィルタリングのセグメンテーション設定に直接依存します。
Outliers は、 BslDepthSeg パラメータを使用してフィルタリングできます。このパラメータは、削除する接続ピキセルの最大数を指定します。これより少ないピクセルを持つすべてのパッチは無効に設定されます。このサイズは、 BslDepthFill パラメータにも使用されます。このフィルターによって生じたホールは、通常、補間されます。
Outliers が発生する可能性を減らすもう一つの方法は、minimum confidence を増やすことです。コンフィデンスは、ピクセルがアウトライアではない確率であるためです。
潜在的に高い geometric error を持つ深度値は、 BslDepthMaxDepthErr パラメータ。
を使用してフィルタリングできます。アプリケーションによっては、深度画像の表面が滑らかであることが必要な場合があります。これは、Smoothing パラメータを有効にすることで実現できます。
カメラ画像にハイライト(正反射)が含まれており、それが深度画像で再構築されない場合は、これらのハイライトがカメラのプロジェクターによって引き起こされたものかどうかを確認できます(例:プロジェクターをオフにするだけ)。このような場合、Basler では Double-Shot モードの使用を推奨しています。