SOARISTO工房 Logo

【OpenCV】広角レンズの歪み補正

 またも、前回からだいぶ間が開いてしまいましたが、とある“構想”がありまして、それに向けたスタディーです。

Camera Lens Distortion

 物体を広角レンズで撮影すると、レンズの四隅にいくほど、物体が引っ張られたような「歪み」が生じます。この歪み(レンズ歪み)は、使用するレンズによって、それぞれ特性が微妙に異なります。

 レンズ歪みを補正するためには、Photoshopなどに組み込まれているフィルターを使う方法がありますが、これはあくまで簡易的なものであって、使用するレンズに合致したものではありません。

 OpenCV(Open Source Computer Vision Library)には、このレンズ歪みの特性(歪み係数)を推定して、画像を補正する関数が備わっています。

 最終的には、Jetson TK1上で実時間で動作させるとして、まずはWindows7上でテストすることにしました。

Sony αNEX-5R

 評価用となるカメラです。

 Sonyの「αNEX-5R」に、「フィッシュアイ」(VCL-ECU1)と「パンケーキ」(SEL16F28)を組み合わせています。

OpenCV + Visual Studio Express 2012

 「OpenCV 2.4.10」と「Visual Studio Express 2012 Update4」とをインストールし、Windows7上(64bit版)で動作させます。

OpenCV Camera Calibration

 まずは、カメラキャリブレーションのサンプルプログラムを元にして、レンズの歪み係数を推定します。

 チェスボードパターンを撮影した画像を複数枚用意し、関数cvFindChessboardCorners()により、チェスボードのコーナーを検出させます。

 このコーナーの位置から、関数cvCalibrateCamera2()および関数cvFindExtrinsicCameraParams2()により、三次元のワールド座標系から二次元のカメラ座標系への変換係数を求め、これよりレンズの歪み係数を推定します。

#説明を、かなり端折りましたが。0xF9C7

 画像では、検出されたチェスボードのコーナーが七色で表示されています。

OpenCV Camera Calibration

 つづいて、推定されたレンズの歪み係数から、関数cvUndistort2()により、画像を補正します。

 画像は、左側が補正前、右側が補正後です。

 歪みが取れている(軽減されている)ことが分かります。

OpenCV Camera Calibration Porsche 911

 実画像で試してみます。

 補正前。

OpenCV Camera Calibration Porsche 911

 補正後。

OpenCV Camera Calibration Porsche 911

 補正前。

OpenCV Camera Calibration Porsche 911

 補正後。

Trackback(0)

Trackback URL: http://www.soaristo.jpn.org/mt/mt-tb.cgi/997

Post Comment