問題タブ [camera-calibration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - OpenCVOpenNIはkinectを調整します
私は家を使ってkinectでキャプチャします:
深度ピクセル値を正しくするためにkinectをキャリブレーションする必要があるかどうかはわかりません。つまり、画像RBGからピクセル(u、v)を取得する場合、画像の深度からピクセル(u、v)を取得して深度の正しい値を取得しますか?
どんな助けでも大歓迎です。ありがとう!
iphone - iPhone 4フロントカメラの視野(FaceTime FOV)
この質問と他のいくつかのオンラインリソースには、メインカメラのFOVがリストされています。FaceTimeカメラについても同じだろうか。それは大きいですか?以下?
opencv - キャリブレーションOpencv
Opencvで6つのチェス盤の画像からカメラの外因性を見つけようとしています。私の出力は次のとおりです。
と:
では、画面上の点(u、v)の実際の座標をどのように計算しますか?
c++ - cvCvColorメソッドでアサーションが失敗したため、チェス盤のコーナーを描画できません
ステレオカメラのキャリブレーションのために、2台のカメラからGoodフレームを収集しています。
しかし、実行時に奇妙なエラーが発生します:-
また、ソース画像と宛先画像の両方のDimensionとnchannelの値が等しいことを確認しました。
前もって感謝します!!
opencv - ステレオ Web カメラの機械的キャリブレーションと微調整
ステレオ (コンピュータ) ビジョンに関する多くの資料があります。これらの読み取りから取り除かれる最も注目すべきメッセージは、OpenCV にかなり行き詰まっているということです...これは間違いなく悪いことではありません。
ほとんどの記事は、貧弱な/安価なレンズを補うために OpenCV 機能を使用して調整することに関するものです。
今は、バックプレーンにカメラを配置するための機械的なキャリブレーションに関心があります。キャリブレーションで補正できることは限られているため、カメラの位置をほぼ完璧にしたいと考えています。
2 台の Logitech 9000 をアルミ製バックプレートに約 10cm 離してねじ止めしています。私の目標は、2 ~ 40 メートルの範囲で深さを知覚することです。
カメラが相互に正しく配置されているかどうかを確認するにはどうすればよいですか? カメラを遠く (> 500m) に向けて、カメラの中心 (ピクセル) がシーンの同じ (一部) を見ていることを確認することを考えていました。これで十分ですか?隅に表示されるものにも注意を払う必要がありますか、それとも後でレンズ キャリブレーションによって行われますか?
また、やや関連するメモとして、最終的には視差マップを描く必要があります。「高速」アルゴリズムと「低速」アルゴリズムを使用した OpenCV に関するガイドは無数にあります。多くのパラメーターを使用して微調整する必要がある「高速」のものをリアルタイムで使用します。これはカメラの種類/レンズの 1 回限りの調整ですか、それとも (新しい) シーンごとに行う必要がありますか? 後者の場合、私のステレオカメラは実際にはあまり役に立たなくなります。
c++ - 未解決の外部シンボルcvFindChessboardCorners()
で宣言されているヘッダーファイルとcvFindChessboardCorners()
他の多くのファイルをインクルードしましたが、それでも機能しません。シンボルをどのように定義しますか?ここで何が起こっているのかわかりませんか?
さらに情報が必要な場合はお知らせください。ありがとう。
opencv - 再投影エラーが小さいということは、常にキャリブレーションが優れていることを意味しますか?
カメラのキャリブレーション中は、通常、ポーズや奥行きなどを変えて多くの画像(> 10)を使用することをお勧めします。ただし、通常、使用する画像が少ないほど、再投影エラーは小さくなります。たとえば、27枚の画像の場合、cv :: calibrateCameraは0.23を返し、3枚の場合は0.11を返します。これは、キャリブレーション中に、過剰決定系の最小二乗問題を解いているためである可能性があります。
質問:
キャリブレーションがどれだけ優れているかを示す絶対的な尺度として、実際に再投影誤差を使用していますか?たとえば、3つの画像でキャリブレーションして0.11を取得し、次に27の他の画像でキャリブレーションして0.23を取得した場合、「最初のキャリブレーションの方が優れている」と本当に言えますか?
OpenCVは、キャリブレーションとエラーの計算の両方に同じ画像を使用します。それはある種の過剰適合ではありませんか?実際に2つの異なるセット(1つはキャリブレーションパラメーターの計算用、もう1つはエラーの計算用)を使用した場合、より正確ではないでしょうか。その場合、同じ(テスト)セットを使用して、異なる(トレーニング)セットからのすべてのキャリブレーション結果のエラーを計算します。それはもっと公平ではないでしょうか?
opencv - 履歴書を開く - SfM のいくつかの方法
私は仕事を得ました:
カメラが人間の頭の周りを半円するシステムが動作しています。カメラの行列と、すべてのフレームの回転/移動がわかっています。(歪みなど...しかし、これらのパラメーターなしで最初に動作したい)
私の仕事は、この動きに対して一定であるカメラ マトリックスと、画像 (100 以上) だけを持っていることです。ここで、フレームごとに移動と回転を取得し、それを実際の回転と移動と比較する必要があります (私が持っているシステムから、比較のためだけに、私もそれを証明しました!)
これまでに行った最初のステップ:
- OpenCVクックブックのrobustMatcherを使用してください - うまくいきます - 40-70 各フレームにマッチします - 目に見えるのはとても良いです!
- getFundamental() を使用して、基本的なマトリックスを取得します。私は、robustMatcher と RANSAC の堅牢な Point を使用しています。
- F を取得したら、次のように CameraMatrix K を使用して Essentialmatrix E を取得できます。
cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12
ここで、SVD を使用して E から R と t を抽出する必要があります。ちなみに、どこかから開始する必要があるため、camera1 の位置はゼロです。
これが私の現状です!
私の計画は次のとおりです。
- すべての点を三角測量して 3D 点を取得する
- フレーム i をフレーム i++ と結合する
- 私の3Dポイントを何とか視覚化してください!
今私の質問は次のとおりです。
- この堅牢なマッチャーは時代遅れですか? 他の方法はありますか?
- このポイントを 2 番目のステップで説明したように使用するのは間違っていますか? それらは歪みか何かで変換する必要がありますか?
- ここで抽出した R と t は何ですか? camera1 からの視点での camera1 と camera2 間の回転と平行移動ですか?
- 聖書や論文などを読むと、R と t の可能性が 4 通りあることがわかります。´P' = [UWV^T |+u3] oder [UWV^T |−u3] oder [UW^TV^T |+u3] oder [UW^TV^T |−u3]´ P´ は、 2番目の画像。つまり、t が - または + で、R がまったく異なる可能性があるということです。1 つのポイントを 3D で計算し、このポイントが両方のカメラの前にあるかどうかを調べる必要があることがわかりました。正しい行列が見つかりました!
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt
私はインターネットでこのコードのいくつかを見つけましたが、彼はこれ以上計算しないと 言っただけです:t = svd.u.col(2); //=u3
なぜこれが正しいのですか?そうでない場合-OpenCVでこの三角形分割を行うにはどうすればよいですか? 私はこの翻訳を、私に与えられた翻訳と比較しました。(最初に camera1 との関係で平行移動と回転を転送する必要がありましたが、これを取得しました!) しかし、同じではありません。私のプログラムの値は、プラスからマイナスへのジャンプと呼びましょう。ただし、カメラは一定の円で移動しているため、より一定である必要があります。いくつかの軸が切り替わる可能性があると確信しています。変換が -1 から 1 までしかないことはわかっていますが、結果から比較値に係数を抽出できると考えたので、それは類似しているはずです。
誰かが以前にこのようなことをしたことがありますか?
多くの人がチェス盤を使用してカメラのキャリブレーションを行っていますが、この方法を使用して外部パラメーターを取得することはできません。
ビジュアル sfm で何とかできることはわかっています。(YouTube では、誰かが木の周りを歩き回り、ビジュアル sfm を使用してこれらの写真からこの木の再構成を取得するビデオがあります) これは、私がしなければならないこととほとんど同じです。
最後の質問:
誰かが私の 3D ポイントを視覚化する簡単な方法を知っていますか? 私はMeshLabの方が好きです。それについての経験はありますか?
opencv - ステレオキャリブレーション後、カメラ1の画像の2Dポイントをカメラ2の画像に投影します
opencvを使用して2台のカメラ(LとRと名付けましょう)のステレオキャリブレーションを行っています。20ペアのチェッカーボード画像を使用し、Lに対するRの変換を計算します。新しいペアの画像を使用し、画像Lの2Dチェッカーボードコーナーを計算し、キャリブレーションに従ってそれらのポイントを変換して、画像Rの対応する変換されたポイントは、その画像のチェッカーボードの角と一致することを期待しています。
2Dポイントを[x、y]から[x、y、1]に変換し、3x3回転行列を乗算し、回転ベクトルを追加してからzで除算するという単純な方法を試しましたが、結果が間違っているため、それほど単純ではないと思います(?)
編集(いくつかのことを明確にするため):
これを実行したい理由は、基本的に、新しいペアの画像でステレオキャリブレーションを検証するためです。したがって、実際には2つの画像間で新しい2D変換を取得したくないので、見つけた3D変換が正しいかどうかを確認したいと思います。
これが私の設定です:
2台のカメラ(E)に関連する回転と平行移動がありますが、各カメラ(E_R、E_L)に関連するオブジェクトの回転と平行移動はありません。
理想的には私がやりたいこと:
- カメラLからの画像の2Dコーナーを選択します(ピクセル単位、たとえば[100,200]など)。
- 私が見つけた行列Eに基づいて、2次元点に対してある種の変換を行います。
- カメラRから画像内の対応する2Dポイントを取得し、それらを描画します。うまくいけば、実際のコーナーと一致します。
しかし、考えれば考えるほど、これは間違っている/できないと確信しています。
私が今試していること:
- カメラの固有パラメーター(たとえば、I_RとI_L)を使用して、2つの最小二乗システムを解いてE_RとE_Lを見つけます。
- カメラLからの画像の2Dコーナーを選択します。
- それらのコーナーを対応する3Dポイント(3d_points_L)に投影します。
- 実行:3d_points_R =(E_L).inverse * E * E_R * 3d_points_L
- 3d_points_Rから2d_points_Rを取得し、それらを描画します。
何か新しいものがあれば更新します