Home

Awesome

depth_estimate_blur

Defocusによる画像ボケを利用した深度推定

TIER IV C1カメラのレビューをしていたところ,光学的に良好な特性を持つカメラであることがわかった.ここにテスト用コードとともに,良好な特性結果をここに簡易にまとめた.

組み込み向けCPUなど処理能力やメモリといったリソースが比較的少ないデバイスでのコンピュータビジョンにも利用できそうである. (組み込み機器にGMSL2インターフェースがあるのかという議論はまた別であるし,USB変換も可能であるのでここでは取り上げない)

ここでは順に

を取り上げていく.

コード

フィルタによる深度推定手法

ここからはすべてTIER IV C1カメラで撮像した映像を前提とする.他の撮像デバイスから取得した映像は,ここにあげたコードでの動作は推奨されない.

なお,下記説明はオフラインのMATLABでの動作を前提としているが,ブラウザからMATLAB Onlineでも動作確認ができる .アカウントを取得済みであれば,即導入できるので是非試していただきたい. (Thanks @minoue-xx)

https://matlab.mathworks.com/open/github/v1?repo=panda5mt/depth_estimate_blur&file=./main.m

  1. 静止画での深度推定
    • 動作確認

      元の画像は以下のものを使用する.

      main.mをMATLAB/MATLAB onlineで実行する.

      下記Figureが出現する. カラーマップは赤色になるほどカメラに近く,水色ほど遠ざかる.(物体は焦点面よりもレンズから遠ざかっているものとする) ナンバープレートは加筆で消したため,その部分の深度推定ができなくなっている模様である.ご了承いただきたい.

    • パラメータ調整

      深度適用時のフィルタ長さNと物体の閾値thresを調整することができる. $N$ は解像度が高いときは大きめ,解像度低めの際は小さめにすると良好な特性が得られることが多い. ( $4\le N \le 25$ ).

      物体が存在していないはずのところを深度推定している場合は $thres$を0より大きくすると解決することがある.( $0\le thres \le N^2 \times \frac{1}{2}$)

DCTを用いた周波数領域からの深度推定

離散コサイン変換(DCT)を利用し,sparse(疎)な深度推定とdense(密)な深度推定を行う手法.画像を8x8のブロックに分割しDCTを適用し,条件に応じて,疎,密それぞれを計算する.工夫次第では扱うデータを1/64まで圧縮できるので,限られたメモリの環境ではこちらの手法を取ることも考えられる.

TIER IV C1カメラとは

映像を撮影,録画した環境について

アドバンテージ

  1. 高速化のための工夫
    詳細は後述するが,Defocus Blurによる深度推定は大まかに下記の手順を毎フレーム,画像ごとに処理を行う.
  1. 各ロジックの代替となる画像処理

    高速化やコード量の削減のため,工夫をしている.

深度推定基本

  1. 深度推定において参考となる論文は下記2つである

  2. 概要

    • 対象物が焦点距離に近い場合,ピントが合っている状態となるが,遠ざかれば遠ざかるほど,ピントは合わなくなる.

    • 画像処理でピントが合っている画像を意図的にボケさせることができる.ガウシアンフィルタ.

    • 焦点が合っている部分ほど強くボケがかかり,すでにぼやけている部分にボケをかけてもそれほど差が生じない.

    • ボケの度合いを推定するには輪郭を抽出しどれほど減衰したかで知ることができる

    • 輪郭抽出にはCannyエッジフィルタが最適であることがわかった

    • この性質を利用すれば,1枚の画像から疎な深度情報を推定することができる

    • dense(密)な深度推定はsuperpixelによる画像分割から行う 

  3. 数式での表現

結論

チューニングされたThin lens modelに従う複合レンズと,HDRイメージセンサを搭載したC1カメラを簡易評価した.優れた光学的特性,そしてイメージセンサのダイナミックレンジにより,単純なロジックでも深度推定が可能であることを示した.

ADASも含め,ロボティクス方面でカメラを利用したり,工場内移動ロボット(群ロボ)などコンピュータリソースが潤沢にない環境で画像処理をする分野で威力を発揮するものと思われる.