問題タブ [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 - チェス盤の画像なしで 3D キャリブレーション?
関数を OpenCV で動作させるには長い時間がかかるので、それを実現しようとする詳細に飛び込む前に、全体的な計画が理にかなっているのかどうかを知りたいと思います。(2.3.1、Windows 7、C++) アドバイスをいただければ幸いです。
問題:
私はスキート練習場で働いており、クレー ターゲットが命中するまでの飛行に関する 3D 情報を知りたいと考えています。
データ:
2 台のカメラ (最終的にはさらに数台追加される予定です) は離れているため、両方が見えるように十分な大きさのチェス盤を作成することはできません。
傾斜した丘のターゲット エリアの両側に 50 ~ 100 ヤードの範囲に数本の木があり、少なくとも水平方向に各カメラの視野をカバーしています。それぞれの特定のスポット (最初の左肢と胴体の接合部など) までの距離を測定しました。
プラン
木の位置を Point3f オブジェクトとして objectPoints ベクトルに入れます
各カメラの画像に表示されるポイントを見つけ、それらの Point2f オブジェクトを各カメラの imagePoints ベクトルに配置します。
ステレオキャリブレーション
質問
- 私の計画は球場にもありますか?
もしそれが
カメラから足を離したチェス盤で各カメラを個別に調整してから、固有マトリックスと distCoeffs マトリックスを stereoCalibrate に渡す方がよいでしょうか?
チェス盤なしで stereoCalibrate を実行する場合、Size として関数に何を渡す必要がありますか?
アドバイスありがとうございます。
c# - Emgucvを介してopencvを呼び出す
私はc#でEmgucvを使用して、射影行列を回転行列、変換行列、カメラ行列に分解しようとしています。RQ-Factorizationで簡単に実行できましたが、EmgucvAPIリファレンスを調べても見つかりませんでした。
Emgucvはopencvラッパーなので、opencv関数を検索すると、次のc++関数が見つかりました。
問題は、これらの関数をEmgucvで使用できる方法はありますか?
c# - EmguCV FindFundamentalMat - 入力パラメータ
私は OpenCV 用の EmguCV ラッパーを使用しており、基本行列を介して校正されていない整流を実行しようとしています。
両方のカメラから FindChessboardCorners 関数を使用して画像ポイントを見つけました。次に基本行列を見つけたいのですが、関数 eCvInvoke.cvFindFundamentalMat() CvInvoke.cvFindFundamentalMat()にパラメーターを渡す際に問題があります。
私を悩ませているのは、2D ポイントの配列です。それを OpenCv 関数 cvFindFundamentalMat に渡すための適切な形式を取得できません。
私が理解しているように、EmguCV/OpenCV openCv は、IntPtr を介して渡された CvMat 型の 1 次元配列を想定しています...しかし、そうしても、OpenCV はエラー メッセージをスローします。 1"
私は何を間違っていますか?
python - OpenCV(python)の基本マトリックスと必須マトリックスが一致しない
OpenCV(Pythonインターフェイス)を使用してステレオカメラを調整しようとしています。最初に2台のカメラをcalibrateCamera2で別々にキャリブレーションし、次にパラメーターをstereoCalibrateにフィードしました
(OpenCVブックで説明されているように)エピポーラ制約を使用して結果を確認すると、平均誤差は約0.0039になります。
原則として、基本マトリックスと基本マトリックスをカメラマトリックスと関連付けることができるはずです。だから私がすることは:
ただし、結果の行列F2はFにまったく似ていません。私が間違っていることは明らかですか?ヘルプは大歓迎です。
編集: dotとinvはnumpyからのものです。
image-processing - 基本行列による未較正カメラの整流
Emgu/OpenCV を使用して、Kinect カメラと外部カメラのキャリブレーションを行おうとしています。私は立ち往生しており、何か助けていただければ幸いです。
基本行列、つまりエピポーラ幾何を介してこれを行うことを選択しました。しかし、結果は私が期待したものではありません。結果の画像は黒いか、まったく意味がありません。Mapx および mapy ポイントは通常、すべて無限または - 無限に等しいか、すべてが 0.00 に等しく、通常の値を持つことはめったにありません。
これは私が修正を試みた方法です:
1.)イメージ ポイントの検索 は、イメージ セットからイメージ ポイントの 2 つの配列 (カメラごとに 1 つ) を取得します。私はチェス盤と FindChessboardCorners 関数でこれを行いました。
2.) 基本行列を見つける
画像のセット全体から収集したすべてのポイントを渡しますか、それとも修正しようとしている 2 つの画像からのみ渡しますか?
3.)ホモグラフィ行列を見つける
4.) mapx と mapy を取得する
ここで問題があります...キャリブレーションされた画像を使用していないため、カメラの行列と歪み係数は何ですか? 基本行列またはホモグラフィ行列からどのように取得できますか?
5.)リマップ
そして、これは良い結果を返しません。誰かが私が間違っていることを教えてくれれば幸いです。
25 組の画像とチェス盤のパターン サイズ 9x6 のセットがあります。
c++ - カメラのセンサーサイズ
リグ構成として接続された 2 台のカメラ (640X360 画像を取得する Microsoft HD3000 CMOS カメラ) を使用して、ステレオ再構成を試みています。ステレオ マッチング アルゴリズムのある時点で、「個々のセンサー要素のサイズ」などを指定して、ビュー シーンと一致する距離測定値を取得できるようにする必要があります。センサーサイズを調べるにはどうすればよいですか?カメラのデータシートには、この情報は存在せず、正確な測定に不可欠な焦点距離も含まれていないことに注意してください。
opencv - カメラのキャリブレーションと再マッピングはピンホール カメラ モデルを生成しますか?
私はいくつかのオブジェクトを測定するためにopencvを使用しています。カメラのキャリブレーションを行って元の画像を再マッピングした後、結果の画像はピンホール カメラ モデルによって生成されたものと見なすことができますか? (したがって、 x = Xf/Z の簡単な方程式を使用できます)
computer-vision - キャリブレーションされたステレオビジョンリグでは、3D三角測量アルゴリズムを実装するために必要な「カメラマトリックス」をどのように取得しますか?
私は、将来、完全な「最適なアルゴリズム」を実装することを目的として、Hartley&Zissermanの「MultipleView Geometry」(12.2秒)から(比較的単純な)線形同次(DLT)3D三角測量法を実装しようとしています。現在、この質問に基づいて、Matlabで動作させようとしています。後で、C ++とOpenCVに移植して、適合性をテストします。
問題は、自分が持っているデータの使い方がわからないことです。ステレオリグを調整し、2つの固有のカメラ行列、歪み係数の2つのベクトル、2つのカメラに関連する回転行列と平行移動ベクトル、および基本行列と基本行列を取得しました。また、2つの画像の座標系(それぞれ1番目と2番目のカメラで撮影)の単一の3Dポイントの対応であると想定される2つのポイントの2D座標もあります。
このアルゴリズムは、2つの点座標と2つの4x3「カメラ行列」PおよびP'を入力として受け取ります。これらは明らかに、キャリブレーションから得られた固有のカメラ行列(M、M')ではありません。1つは3x3であり、それらを単独で使用した投影では3Dポイントが2つの異なる座標系に配置されるためです。回転/平行移動)データがありません。
H&Zブックには、SVD分解を使用して基本行列または必須行列のいずれかから必要な行列を復元するための情報(第9章)が含まれていますが、それ自体に追加の問題(スケールのあいまいさなど)があります。回転と平行移動が明示的に定義されているので、それは必要ないと思います。
問題は次のとおりです。最初の「カメラ行列」(P = [M | 0])としてゼロの余分な列を持つ最初の固有行列を使用し、次に2番目の固有行列に外部行列を乗算するのは正しいでしょうか。 2番目に必要な「カメラ行列」(P'= M'* [R | t])を取得するための追加の列として、回転行列と変換ベクトルから構成されますか?それとも別の方法で行う必要がありますか?
ありがとう!
transform - これは、2 つの 2D 点を 1 つの 3D に変換する正しい方法ですか?
MSVSC++ の Windows 7 PC の 2 つの MS LifeCam で imagePoints を 2 回識別した移動オブジェクトがあります。これらの 2 つの 3D ポイント間の距離を特定したいと考えています。私が使用している手順が示されています。正しい OCV 2.3.1 関数を使用しているかどうかを知りたいだけなので、詳細はほとんど含めませんでした。
)1. 各カメラの calibrationCamera
出力: 各カメラの cameraMatrix と distCoeffs
)2. simpleBlobDetect 各カメラに対して 1 回、2 回
)3. ステレオキャリブレーション
)4. stereoRectify
)5. undistortPoints
)6. パースペクティブ変換
30k フィートから、これらは正しい手順ですか?
ありがとう。チャールズ