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

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

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

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

C++

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

6085閲覧

OpenCVでキャリブレーションする場合に用いる画質はどの程度が最適か?

W.Sugimoto

総合スコア9

OpenCV

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

C++

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2018/07/14 09:56

キャリブレーションを実行する場合の画像の大きさについて疑問があります

今、ステレオカメラのキャリブレーションについて、左右のカメラを独立して一つずつ実行し、最後に平行化しようと考えています。
カメラには画質を変更する機能が付いており、キャリブレーションに用いる画像の画質を変更したところ、2KとVGAではかなり差がある結果に気づきました。

  • 2K(2208×1242)で取得したところ、再投影誤差は0.4~0.5pixl程度
  • VGA(1280×720)で取得したところ、再投影誤差は0.1~0.2pixl程度

プログラミングの質問とは少し違うのですが、OpenCVを用いたステレオ視の内容ということで、可能でしたら、以下の4点について質問させて下さい。

①画質が高くなるほど再投影誤差の値が大きくなるという認識で良いのでしょうか?

この結果について、再投影誤差は「変換結果とコーナー検出アルゴリズム(の結果)との間の差のノルムを計算する」(カメラ校正 - Qiita参照)ので画質が高くなればその分誤差のピクセルの値が高くなるのだろうと理解しています。

②再投影誤差の値の考え方について

再投影誤差の扱い方として、各画像の再投影誤差を比較して異常値を取り除くために用いるといった認識で宜しいのでしょうか?
画質によって値の大きさが変化するのであれば、0.1pixl以下にしたいと考えて頑張っても、あまり意味がないなと思いました。
再投影誤差を各画像で比較し精度の悪い画像は排除して再度キャリブレーションを実行するという使い方が良いのでしょうか?

③キャリブレーションに用いる画像の大きさはどれを用いたら良いのか

画質をHD2K, HD1K, HD720, VGAと4種類選べるのですが、どれをキャリブレーションに用いたら良いのかアドバイス頂けないでしょうか。
チェスボードを用いているのですが(ドットパターンへの変更はできません)、あまりにも高画質だと座標のズレが大きくなってしまう気もします。

④チェスボードとカメラの距離について

カメラに近いと精度が少し悪いのですが、ある程度離れると精度が良くなる現象を確認しています。
このため、多少離れてキャリブレーションするのが正解なのか、精度が多少悪くても全体的にキャリブレーションを実行した方が良いのか、そもそも距離は関係ないのか、良く理解していません。
キャリブレーションの画像までの距離について、アドバイス頂けると大変ありがたいです。

以上、ステレオ視についての数学的な知識が低いので理解不足が多々あるのですが、どなたか教えて頂けると大変助かります。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

実業務で色々試してみて、結局レンズの歪み補正なので解像度の違いの誤差は微小。したがってチェスボードを高速な低解像度で試した結果で運用しています。

投稿2018/07/14 11:12

MasahikoHirata

総合スコア3747

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

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

MasahikoHirata

2018/07/15 00:50

貴殿の結果からも1pixel内の誤差ですね。しかしながら実映像を数理的に変形するのがキャリブレーション。よって精度限界を考慮して最適なのは実運用の解像度でのキャリブレーションでしょう。また距離においても’レンズの歪み’補正と考えればn数(サンプル数)が多ければ距離はあまり影響しないのでは?それよりも対象に対しての傾きなどが多いほうが歪み補正に有効とおもいます。
W.Sugimoto

2018/07/15 06:15

回答ありがとうございます。 >よって精度限界を考慮して最適なのは実運用の解像度でのキャリブレーションでしょう。 2K画像で実運用予定なのですが、であればやはり2K画像でキャリブレーションを実施してみようと思います。 >また距離においても’レンズの歪み’補正と考えればn数(サンプル数)が多ければ距離はあまり影響しないのでは? ありがとうございます。距離の影響はあまり考えずに、傾きを重視してサンプリングしてみようかなと思います。 精度が良い画像ばかり集めても意味がないのでしょうか?そちらも気になるところです。
fana

2018/07/15 10:38

参考になるか(&どれほど意味があるか)わかりませんが,私は,傾けた(=チェスボードの法線がカメラからそれた姿勢の)絵を撮る場合,特徴点位置誤差に志向性が現れる可能性も考慮して,それと対になる「対称な」姿勢の得も撮るように意識しています.
MasahikoHirata

2018/07/15 10:39

そうですね。これらも考えて設置誤差を最小にするようにいつも意識しています。
guest

0

個人的な経験則(?)ですが,特徴点の検出位置が特別悪い(間違っている)画像でも無いならば,誤差が多いからという理由だけで除外すべきではありません.やっていることは関数当てはめですから,結果はデータの偏りに支配されがちです.当てはまりの悪い画像を除外すれば「評価している誤差の値」は減るでしょうが,それがカメラ校正として良い結果であるとは限りません.
多数決によるオーバーフィッティングを避けるという意味では,サンプルの数を増やすだけでなく,カメラの画角全域に(偏らないように)パターンが分布するデータを用意するべきかと.(例えば,パターンが右側に写っている画像ばかりを用いるようなことをすると左右方向に光軸点がブレやすいですし,一定の角度域にのみデータが分布すると,他の角度域の精度が軽視された結果になりやすいです.)

距離に関しては,一定以上遠い(=占める立体角が小さい)画像は歪を計測するという点においては意味が薄いと思います.(パターンの映像から歪が見えないならば無意味)

複数の解像度で比較した経験はありませんが,モデル式の表現力が不足しているので無いならば,特徴点検出位置の精度の点で高解像度ほど有利な気もします.

投稿2018/07/15 09:30

fana

総合スコア11632

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

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

fana

2018/07/15 09:42

あと,校正計算に用いたデータ点の再投影誤差はあくまでも,用いたデータに対するモデル式の当てはまり具合でしかないので,「極端に大きいならば校正計算がうまくいっていないのではないか」という指標にはなるでしょうが,その絶対値の小ささを必要以上に求めても意味が無いでしょう.校正結果の良し悪しに関しては別の指標をもって判断すべきでしょう. ・直線を撮影した像について「歪除去」を行った結果の直線性を見る ・別のデータセットを用いた複数の校正結果と比較する 等を行うとよいかもしれません.
MasahikoHirata

2018/07/15 09:55

実経験から同意です。またステレオの場合はカメラ自体の傾き(時計方向)や向き(上下・左右)のズレを補正する必要もあり、単眼でのキャリブレーションよりテクニックが必要です。
fana

2018/07/15 10:32

テクニックとはどのようなものでしょうか(とか,質問者じゃないのに尋ねてもいいのかな?)
MasahikoHirata

2018/07/15 10:37

いいですよ、質問者のヒントにも成りますし。理想的なカメラの設置ではカメラの傾きや向き(平行)が理論通りになる設定ですが、実際にはカメラの設置には多少の誤差。それとレンズも全く同じでは無いので。従ってまずは単体でのキャリブレーションで固有の歪みを把握。これをベースにある程度の距離(少し遠め)でカメラの傾きなどを回転で修正。またカメラの中心点(画像の中心)が計算上の位置でなければこれも画像処理で出来るだけ理想な位置に。これを用いて私の場合は実装しています。
fana

2018/07/16 01:01

過去に平行化を行った際,かなり難航しました.内部パラメータ校正に用いたパターンボードを平行化用のパターンとしても流用したのですが,パターンボードが物理的に小さいために,2カメラの視野に相応の像サイズでパターンが収まるための撮影範囲はかなり{近距離に,各カメラから見ると視野の片側ばかりに}限定されていました. > (少し遠め) これが重要なのかも,ですね.
W.Sugimoto

2018/07/16 10:27

様々な回答ありがとうございます。 データの方よりに左右されるため、上下左右対称性となる画像でキャリブレーションを行うことが重要なのだと理解しました。 >またカメラの中心点(画像の中心)が計算上の位置でなければこれも画像処理で出来るだけ理想な位置に。 これはどの様に確認されているのでしょうか?
MasahikoHirata

2018/07/16 13:24

カメラの中心で撮影される点は無限距離ならばカメラの設置の間隔(カメラAとカメラBの距離をNcmとして)、撮影対象が無限の距離の場合(実際にはあり得ないので計算してチェスボードのどの位置を算出)を考慮。例えば10㎜間隔のチェスボードを使用する場合の例ですが、カメラの間隔(間の距離)が例えば10㎝として同時にカメラで撮影ならばチェスボードの横方向(カメラを横方向の設置の場合)10コマ以上にしてそれぞれの本来の中心になるチェスボードの交点が中心になるように調整。そしてキャリブレーションという意味です。(図を時間があるときに作成する予定です)。これだけでもカメラの設置調整の精度が上がります。
W.Sugimoto

2018/07/26 08:52

無限遠の場合、x/z, y/zが0に近づくためカメラの中心座標となるということでしょうか。 時間が経ってしまったので、ここでひとまず回答を締め切らせて頂きます。 貴重なご意見ありがとうございました。また質問させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問