arutema47's blog

書いたり書かなかったり。

ステレオカメラの原理、信号処理について

はじめに

ステレオカメラの信号処理について詳細に記述しているメディアは少ない。 一方で現行のステレオカメラで最高の精度を誇るEnsensoのwhitepaperは非常に参考になる。

Obtaining Depth Information from Stereo Images

f:id:aru47:20200310094811p:plain

原理

ステレオカメラ自体の原理はシンプルで、人間が距離を認識するのと同様の"視差"の概念を使用する。

左センサで見た物体が右センサで見た時、何ピクセルズレているかに応じてセンサから物体までの距離が算出できる。 この視差をステレオカメラでは"Disparity"と呼ぶ。

課題

f:id:aru47:20200310095034p:plain

  • 歪み

一方でイメージセンサで得られた画像はレンズなどにより歪みが生じる。 歪があると左右のセンサで物体位置がheightによりズレてしまい、disparityを計算できない。

f:id:aru47:20200310174005p:plain

この画像では左右の画像で歪みが生じてしまい、左右センサでかなり指している画素位置が異なってしまう。 これでは効率よく計算できないため、歪を取り除く必要がある。 このような歪みはレンズキャリブレーションと同様、レンズ曲を打ち消すような逆関数を画像に掛けることで取り除くのが一般的である。

  • オフセット

f:id:aru47:20200310174150p:plain

歪みのような非線形な誤差をレンズキャリブレーションで取り除いても、今度はセンサ設置取り付けの誤差などで左右の画像間で高さや回転誤差が生じてしまう。このような誤差は画像を回転・平行移動してやることで取り除くことができる。

  • マッチング

また距離を推定するには左センサの画素が右センサのの画素と同一かマッチングを取る必要がある。 このような処理をcorrelation matchingと呼び、間違えると完全に違う距離を推定してしまう。このような画像処理はステレオカメラで最も難しく、精度や画質に大きな影響を与える。(例えばintel real senseなどは安価で良いセンサなのだが、マッチング処理が甘く大きく画素欠けが発生してしまい工業用途には厳しい。)

キャリブレーション

一般的には撮影前のキャリブレーションにより歪みは大きく低減可能である。 具体的には上記の歪み、オフセットを除去するための逆関数・回転行列を求めるのがキャリブレーションの目的となる。

歪を左右のセンサで極小化するため、ステレオカメラではキャリブレーションが非常に重要となる。 例えば数ピクセル分だけセンサ間でズレが生じたとしても距離にして数mmもズレてしまい、工業用途には適さない。 そのため高精度ステレオカメラを購入したら必ずキャリブレーションを行おう(ステップが多くかなり大変だがガイドラインが必ずあるはずだ。。)

まだキャリブレーションの手法などについては調査中。

Recitify

f:id:aru47:20200310174459p:plain

recitifyは本来では整流と信号処理では使用するが、ステレオカメラでは左右センサの歪を除去した画像の事を指す。 例の図中の一番下の画像は左右で歪み、オフセットが取り除かれており、recitified imageと呼ぶ。

Stereo matching

f:id:aru47:20200310094553p:plain

左右のセンサで捉えた画素が同一物体を指している場合のみ、disparityを導出できる。

そのためには物体が同一かどうか判定するMatching処理が必要になる。 このことについては後に追記する。