異なるレンズ、視野、解像度を備えた 2 台のカメラ (RGB、赤外線) の視野補正

背景

私が現在取り組んでいるプロジェクトでは、2 つのカメラを使用しています。1 つは熱画像カメラで、もう 1 つは通常の RGB カメラです。
最初の目標は、RGB 画像をクリックしたときにそのピクセルに対応する温度を知ることができるように、それらをピクセル レベルで重ねることです。しかし、やってみるうちに、それは基本的に不可能であることがわかりました。深度、オクルージョン、遠近法の歪み、視差などの問題により、2 台のカメラで捉えられたものは大きく異なり、一貫性がなくなる可能性があるためです。
ただし、opencv のデュアルターゲット定義を参照して水平方向の配置を実現できるはずです。【opencv/samples/cpp/stereo_calib.cpp】
ここに画像の説明を挿入します

実際の効果

しかし、この方法をそのまま実行してみると、効果はほとんどなく、画面がランダムに飛んだり、画面全体が真っ暗になって何も見えなくなったりすることがありました。

情報を探す

それから情報を探し続けたところ、ずっと前に誰かが同様のアイデアを試みていたことがわかりました。

情報1

[さまざまなカメラのステレオキャリブレーション (rgb と赤外線)]
この人は、rgb 写真とそれに対応する ir 写真を含む一連の写真を持っています。彼はそれらをここに置き、ここからダウンロードできます (はしごが必要です) [rgb+ir ]
ここに画像の説明を挿入します彼の要件は、2 台のカメラ画像の極面と極線の位置合わせを達成することでもあります。StereoCalibrate を直接使用する効果は良くありません。
彼がこの質問をした後、誰か[BConic、以前はAldurDiscipleと呼ばれていたようです]が彼に答えました。各カメラを個別にキャリブレーションしてカメラの内部パラメータを取得し、パラメータ CALIB_USE_INTRINSIC_GUESS + CALIB_FIX_INTRINSIC を設定して、stereoCalibrate を使用すると、より良い結果が得られると言われています。
ここに画像の説明を挿入します

質問者【DmT021】さんからの続報から判断すると、問題は概ね解決したとの報告がありました。

情報2

別の Q&A [解像度が異なる一対のカメラを調整するために OpenCV cvStereoCalibrate を使用する際に大きな再投影エラー] から判断すると、最初に独立したキャリブレーションを行ってから共同ソリューションを実行するこの方法は実行可能であるはずです。
ここに画像の説明を挿入します

解決

まず各カメラを個別にキャリブレーションし、次に、キャリブレーションにstereoCalibrateを共同で使用します。
キャリブレーションの前に、画像は同じサイズになるようにトリミングおよびスケーリングされます。(上記の情報では、同じサイズである必要はないということのようです。どのように使用されるかは不明です。)
stereoCalibrate を使用する場合、パラメータは CALIB_USE_INTRINSIC_GUESS + CALIB_FIX_INTRINSIC であることに注意してください。

最終結果

一般的には、しかし歯を噛むと効果があるはずです。
どちらの画像もかなり回転およびトリミングされています。私のサンプルに問題がある可能性があります。後で別の角度からさらにサンプルを収集して校正してみます。
ここに画像の説明を挿入します


参考:
[OpenCV に基づく両眼測距システムの実装]
[双眼カメラのキャリブレーションとステレオ測距の原理と OpenCV の実装]

おすすめ

転載: blog.csdn.net/joyopirate/article/details/131114282