質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

8941閲覧

OpenCVで、内部パラメータから外部パラメータを求めたい。(個別にキャリブレーション)

nuiri1343

総合スコア54

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/10/13 06:57

前提・実現したいこと

最終的には、固定器具にがっちり固定され、覆われているカメラのキャリブレーションを行うプログラムが作りたいです。

しかし、カメラは固定器具に固定されているため、チェッカーパターンを複数の角度から撮影することが出来ません。
また、カメラと被写体は一体化しているように覆われているため、カメラと被写体の間に何か(例えばチェッカーパターン)を挿入することも出来ません。

そこで、こういった状況でキャリブレーションを行いたく、色々考えてみました。

1,カメラを固定器具に固定する前に、外で通常のZhangのキャリブレーションを行い、内部パラメータ(と外部パラメータ)を推定します。
2,カメラを固定後、1で求めた内部パラメータを用いて何らかの方法で、固定状態の外部パラメータを推定します。

内部パラメータとは、カメラ内部の固有の値なので、外でキャリブレーションを行っても大丈夫だと考えました。
そして、固定後に、カメラの位置や姿勢といった情報である外部パラメータを推定すればいいのではないかと考えました

カメラと被写体の間には一枚の薄いガラス板があり、そこに例えばチェッカーパターンを書いておくことは出来ます。
そのチェッカーパターンと、事前に求めた内部パラメータを使って外部パラメータを求められるのではないかと考えました。

以上のようなことは可能なのでしょうか?
可能であれば、その方法など、詳しくおしえていただけないでしょうか。

ネットで頑張って調べてはみたのですが、皆様Zhangの方法を使って内部パラメータと外部パラメータを同時に推定する方法について紹介しており
初心者の私にはそれ以上のことはわかりませんでした。

お詳しい方いらっしゃいましたら、アドバイスをお願いいたします。

補足情報(FW/ツールのバージョンなど)

Windows10を使っていますが、Windows7のPCもあります。
VisualStudio2017を使っています。
OpenCVは、3.4.2を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  1. 内部パラメータを先に推定する。カメラが固定されている場合は、チェスボードのほうを動かし、複数枚撮影する。calibrateCamera()
  2. 外部パラメータを推定する。solvePnP()

参考資料

内部パラメータはカメラ固有のものなので、1回だけ推定したら使い回せます。
外部パラメータは世界座標を設定する都度、行います。

追記

なるほど、特殊な状況なのですね。
外部パラメータは 4x4 行列で表されます。これは、「設定した世界座標」から「カメラ中心の3次元座標」へのアフィン変換行列を表しています。
例えば、外部パラメータが単位行列なら、世界座標はカメラの中心の座標と一致します。

なので、設定したい「世界座標の原点」から「カメラの中心」までの回転量、平行移動量を正確に計測できるのであれば、チェスボードに頼らずとも、この行列を自分で作れるかと思います。

イメージ説明

投稿2018/10/13 07:04

編集2018/10/13 11:42
tiitoi

総合スコア21954

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuiri1343

2018/10/13 07:45

2について、詳しく教えていただけないでしょうか。 2を行うのはカメラを固定後なので、チェスボードを撮影することはできません。 そうなると、solvePnP()という関数を使うことができないのではないのでしょうか?
tiitoi

2018/10/13 07:48

なぜ固定したあとはチェスボードを撮影できないのでしょうか?外部パラメータ推定には1枚だけチェスボードを撮影すればいいのですが、それも無理なのですか?
nuiri1343

2018/10/13 08:17

固定器具が被写体とカメラを覆う形になっており、カメラを固定後は、カメラと被写体との間にチェスボードを差し込むことができないのです。 申し訳ありません。私の日本語が拙いばかりに、うまくお伝えすることが出来ませんでした。 補足情報として、以下を追加します。 ・固定器具の中に光源用LEDがあります。(外部からの環境光は一切遮断されます) ・カメラレンズの直径は2mm~3mm程、固定器具の径は5mm程度 中々説明するのが難しいのですが、カメラ固定後に固定器具内に何かを入れたり出したりすることができません…… 唯一出来ることと言えば、固定器具の下の方(カメラから少し離れた位置)に薄いガラス板があるので、そこに模様を描くことだけです。 ですが、そのガラス板の先に被写体があるので、あまり多く模様を書くと撮影に支障がでてしまいます。
tiitoi

2018/10/13 11:20 編集

状況がわかりました。 内部パラメータは固定前に推定して、外部パラメータはチェスボードに頼らず計測して作りましょう。(回答欄追記) 外部パラメータの実態は設定したい世界座標からカメラ中心へのアフィン変換行列です。 不明な点があれば補足します。
fana

2018/10/13 16:06

状況が不明すぎる.(絵とかで説明できませんかね? 「固定危惧の径」とか言われてもわからん…) ・考えている外部パラメタって何?  "被写体"とカメラとの関係? それとも"固定危惧"とカメラとの関係? その他? ・「カメラを"固定危惧"に固定したが,まだ覆ってはいない」状態は有り得る?
fana

2018/10/15 01:32

Oh... "器具"がことごとく"危惧"に誤変換されてる… (おそらくそれ専用に作られた)器具へのカメラの取付精度を問題にしているのだと想像. そこで"ガラス板"を利用して "器具vsカメラ"を校正したとしてもそれで解決するのだろうか? "器具vs被写体"側の配置精度も相応に求められそうな気がするけど……そんなことはないのだろうか?
nuiri1343

2018/10/16 08:59

tiitoi様 追記に対する返答、本当にありがとうございます。 特別な状況ということがうまく伝わったようでとてもうれしいです。 >なので、設定したい「世界座標の原点」から「カメラの中心」までの回転量、平行移動量を正確に計測できるのであれば、チェスボードに頼らずとも、この行列を自分で作れるかと思います。 なるほど、チェスボードを使わずに、世界座標の原点からカメラ中心までの回転量や平行移動量を正確に計測する方法はあるのでしょうか。 例えば、定規や分度器等で目測で測るとかしか思いつきませんが、これでは正確ではないのではないかと思ってしまいます。 何かアイデアはありませんでしょうか。 度々、お手数をおかけしてしまい大変申し訳ありません。 何卒よろしくお願いいたします。
tiitoi

2018/10/16 09:40 編集

カメラに対して、世界座標はどのように設定したいのでしょうか? 質問者さんの特殊な状況というのが、具体的にどのようなものなのか図等がないのでわかりませんが、カメラと撮影対象物の距離等はコントロールできないのでしょうか? カメラの設置を決められるのであれば、回転量や距離は既知なので、外部パラメータは計算で導出できますよね。 ちなみに距離測定は、定規以外にレーザー計測機とかも手段としてはありますね。
nuiri1343

2018/10/16 09:46

カメラと被写体との距離や角度は、固定器具に固定後は基本的には変化しません。振動や衝撃等で多少変化するかもしれませんが… 固定器具は3Dプリンターで作成するため、カメラの設置高さや角度はある程度予め決めておくことはできます。しかし、それも正確とはいいがたいと考えております。実際に何マイクロメートルなのか、何度なのかを改めて計測する必要があると考えております。 世界座標はどのように設定したいのか?というのはどういうことなのでしょうか。 無知で申し訳ありません。
tiitoi

2018/10/16 10:07

カメラパラメータを求めたい理由というのは、画像上の点と実空間上の点の対応関係を取りたいからやるのですよね? カメラパラメータがわかると、3次元上の点が画像のどの点に対応するか求めることができます。 逆に画像の点が3次元上のどこに対応するかは、画像にした段階で深度の情報が失われているので、深度zを決めれば、求めることができます。 そして、世界座標で実空間のどこを原点とするかは設定する人の自由です。
tiitoi

2018/10/16 10:11 編集

ちなみにマイクロメートルの精度が要求されるのですか? チェスボードのキャリブレーションでもそこまでの精度はでないです。
nuiri1343

2018/10/17 09:13

今回キャリブレーションを行ってカメラパラメータを求めたいと思ったのは、ステレオ視を行いたかったからです。 ステレオ視計算にはかならずカメラパラメータが必要になると思ったからです。 チェスボードのキャリブレーションでも精度はそこまでではないというのは初めて知りました。 自分の中で、Zhangのキャリブレーションは完璧なものという印象があったので、驚きました。 ということは、極端なことを言ってしまえば、プログラム(OpenCV)を使って外部パラメータを求めず、実空間で、カメラの位置や角度を計測すると言う方法もかなり現実的だということでしょうか。 ちなみに、世界座標の原点というのは、カメラの位置や角度を、どこからの位置か、どこと比べての角度かというのを決める点という認識で合っていますでしょうか? 初歩的な質問ばかりで本当に申し訳ありません。
tiitoi

2018/10/17 09:47

> 自分の中で、Zhangのキャリブレーションは完璧なものという印象があったので、驚きました。 実際に試されるのがいいと思いますが、マイクロメートルの精度は経験上、ないです。よくてミリ精度でしょう。 検証してる記事 http://opac2.lib.oita-u.ac.jp/webopac/report07-08._?key=JLZJQQ ちなみに、世界座標の原点というのは、カメラの位置や角度を、どこからの位置か、どこと比べての角度かというのを決める点という認識で合っていますでしょうか? はい、その認識であっています。
fana

2018/10/17 09:50

Zhangの手法そのもののではなく,現実的な実施形態側の精度(カメラの解像度,パターンの精度)の話をしているのだと思うが. (外野の話は無視するスタンスなのかもしれないけど) 【ステレオカメラを組み上げてから,それを"固定器具"に設置する】という手順を踏めないのですか?
tiitoi

2018/10/17 09:55

コメントありがとうございます。 すいません、ご指摘は私もしくは質問者さんのどちらに対するものでしょうか?
fana

2018/10/17 10:16

精度の話の指摘は,質問者に対してのつもりです. 方法論に精度限界の要因があるかのような捉え方をしているように見受けたので. (仮に手元のカメラとパターン使ってmm単位の精度だったとして,その世界をスモールライトでまるごと1/1000に縮小すればμmの精度になるわけで.)
fana

2018/10/18 03:37

傍から見てて必要だと思う情報: (1)最終的にやろうしている処理に関して:  (カメラと無関係に定義される)何らかのワールド座標系で物事を考える必要があるのか否か (2)ステレオカメラを用いる目的に関して:  平行化だけできればよい(相対的な奥行関係がわかればよい)のか?  それとも基線長も必要である(奥行の絶対値を知りたい)のか? (3)取付の方法や手順に関して: ・【ステレオカメラを組み上げてから,それを"固定器具"に設置する】という手順は可能なのか? ・【カメラを"固定器具"に固定したが,まだ覆ってはいない状態】は存在し得ないのか?  (この状態が無いなら,分度器がどうのとかいう話が出てくるのは不自然に思うが) (4)その他: ・"被写体"の像を校正に利用できる可能性はあるのか? ・これ系の話は経年変化の問題がありそうだけど果たして?
nuiri1343

2018/10/18 07:44

他の回答者さんのコメントという形ではなく、普通に回答という形でお話がしたかったです。 純粋に見にくくなってしまうためです。
nuiri1343

2018/10/18 07:45

tiitoi様 固定器具は3Dプリンターで印刷するので、カメラが固定される高さや角度はある程度予め決めることができます。 なので、Zhangのキャリブレーションでできるキャリブレーション精度と変わらないくらいの精度のパラメータも得られるのではないかと考えます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問