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

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

ただいまの
回答率

90.51%

  • Python

    7978questions

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

  • C++

    3451questions

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

  • OpenCV

    1077questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 2
  • VIEW 332

W.Sugimoto

score 1

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

今、ステレオカメラのキャリブレーションについて、左右のカメラを独立して一つずつ実行し、最後に平行化しようと考えています。
カメラには画質を変更する機能が付いており、キャリブレーションに用いる画像の画質を変更したところ、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種類選べるのですが、どれをキャリブレーションに用いたら良いのかアドバイス頂けないでしょうか。
チェスボードを用いているのですが(ドットパターンへの変更はできません)、あまりにも高画質だと座標のズレが大きくなってしまう気もします。

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/15 09:50

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

    キャンセル

  • 2018/07/15 15:15

    回答ありがとうございます。

    >よって精度限界を考慮して最適なのは実運用の解像度でのキャリブレーションでしょう。
    2K画像で実運用予定なのですが、であればやはり2K画像でキャリブレーションを実施してみようと思います。

    >また距離においても’レンズの歪み’補正と考えればn数(サンプル数)が多ければ距離はあまり影響しないのでは?
    ありがとうございます。距離の影響はあまり考えずに、傾きを重視してサンプリングしてみようかなと思います。
    精度が良い画像ばかり集めても意味がないのでしょうか?そちらも気になるところです。

    キャンセル

  • 2018/07/15 19:38

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

    キャンセル

  • 2018/07/15 19:39

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

    キャンセル

+2

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/15 18:42

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

    キャンセル

  • 2018/07/15 18:55

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

    キャンセル

  • 2018/07/15 19:32

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

    キャンセル

  • 2018/07/15 19:37

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

    キャンセル

  • 2018/07/16 10:01

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

    キャンセル

  • 2018/07/16 19:27

    様々な回答ありがとうございます。
    データの方よりに左右されるため、上下左右対称性となる画像でキャリブレーションを行うことが重要なのだと理解しました。

    >またカメラの中心点(画像の中心)が計算上の位置でなければこれも画像処理で出来るだけ理想な位置に。
    これはどの様に確認されているのでしょうか?

    キャンセル

  • 2018/07/16 22:24

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

    キャンセル

  • 2018/07/26 17:52

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    OpenCVでカメラの姿勢を推定する方法

    前提・実現したいこと 1:撮影した画像から,カメラの位置と姿勢を推定したい. 2:斜め上から撮影するような形のときに,真上から撮影されたような画像に変換したい. 現在できてい

  • 解決済

    opencvを用いた自動撮影

    opencvを用いて、USBカメラから、1秒間に30フレームの自動撮影を行おうとしています。 しかし、プログラム初心者な為うまくいきません。 以下にプログラムを示します

  • 解決済

    opencvでのカメラ認識

    opencvでカメラの認識を行っています。 以下のプログラムで実行したところ、 1台目のカメラ(HD Pro ウェブカメラ C910) では、うまく認識を行うことが出来た

  • 解決済

    Kinect カラー画像と深度画像の合わせこみ("gml c++ camera calibratio...

    前提・実現したいこと kinect v2のカラーカメラとデプスカメラの画像の合わせこみについての実験をしています。 Kinect SDKを使ったカラー画像とデプス画像の合わせこ

  • 解決済

    PythonのOpenCVで画像のオブジェクト数のカウントとサイズ測定

    ラズベリーパイで撮影した写真の解析をしたいと考えております。 やりたい事は写真の中のオブジェクト(顔ではありません)の数のカウントとオブジェクトのサイズを測る事です。 画像解析

  • 解決済

    複数のUSBカメラの論理番号の固定化について

    OpenCVとDirectXにて画像の認識ソフトを作成しています。 今までは1台のカメラにて様々な開発、検証が出来ています。 今回、3台のUSBカメラでメーカーが同じ、型番が同

  • 解決済

    PythonのOpenCVでUSBカメラ画像の取得が突然真っ暗になる

    Python3でOpenCVを使ったアプリの開発を行なっています。 やっていることはUSBカメラから画像を取得する一般的な手法です。 カメラ画像を取得して画像解析を行うプログラムで

  • 解決済

    リアルタイムエッジ検出

    閲覧有難うございます。 前回の質問から、少しずつですが開発をしています。 リアルタイム笑顔検出は、できるようになりました。 現在行おうとしていることが、リアルタイムで得た動

同じタグがついた質問を見る

  • Python

    7978questions

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

  • C++

    3451questions

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

  • OpenCV

    1077questions

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