質問: ### 前提・実現したいこと 最終的には、固定器具にがっちり固定され、覆われているカメラのキャリブレーションを行うプログラムが作りたいです。 しかし、カメラは固定器具に固定されているため、チェッカーパターンを複数の角度から撮影することが出来ません。 また、カメラと被写体は一体化しているように覆われているため、カメラと被写体の間に何か(例えばチェッカーパターン)を挿入することも出来ません。 そこで、こういった状況でキャリブレーションを行いたく、色々考えてみました。 1,カメラを固定器具に固定する前に、外で通常のZhangのキャリブレーションを行い、内部パラメータ(と外部パラメータ)を推定します。 2,カメラを固定後、1で求めた内部パラメータを用いて何らかの方法で、固定状態の外部パラメータを推定します。 内部パラメータとは、カメラ内部の固有の値なので、外でキャリブレーションを行っても大丈夫だと考えました。 そして、固定後に、カメラの位置や姿勢といった情報である外部パラメータを推定すればいいのではないかと考えました カメラと被写体の間には一枚の薄いガラス板があり、そこに例えばチェッカーパターンを書いておくことは出来ます。 そのチェッカーパターンと、事前に求めた内部パラメータを使って外部パラメータを求められるのではないかと考えました。 以上のようなことは可能なのでしょうか? 可能であれば、その方法など、詳しくおしえていただけないでしょうか。 ネットで頑張って調べてはみたのですが、皆様Zhangの方法を使って内部パラメータと外部パラメータを同時に推定する方法について紹介しており 初心者の私にはそれ以上のことはわかりませんでした。 お詳しい方いらっしゃいましたら、アドバイスをお願いいたします。 ### 補足情報(FW/ツールのバージョンなど) Windows10を使っていますが、Windows7のPCもあります。 VisualStudio2017を使っています。 OpenCVは、3.4.2を使っています。
回答: 1. 内部パラメータを先に推定する。カメラが固定されている場合は、チェスボードのほうを動かし、複数枚撮影する。calibrateCamera() 2. 外部パラメータを推定する。solvePnP() 参考資料 内部パラメータはカメラ固有のものなので、1回だけ推定したら使い回せます。 外部パラメータは世界座標を設定する都度、行います。 追記 なるほど、特殊な状況なのですね。 外部パラメータは 4x4 行列で表されます。これは、「設定した世界座標」から「カメラ中心の3次元座標」へのアフィン変換行列を表しています。 例えば、外部パラメータが単位行列なら、世界座標はカメラの中心の座標と一致します。 なので、設定したい「世界座標の原点」から「カメラの中心」までの回転量、平行移動量を正確に計測できるのであれば、チェスボードに頼らずとも、この行列を自分で作れるかと思います。 !イメージ説明