問題タブ [extrinsic-parameters]
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 - opencvを使用して、固有および外部パラメータを持つポイントの3D位置を見つける方法
opencvで点の位置を知りたいです。cvCalibrateCamera2 を使用して 2 台のカメラを調整しました。だから私は内因性と外因性の両方のパラメータを知っています。既知の固有パラメータと外部パラメータがあれば、三角測量で簡単に 3D を再構築できることを読みました。これを達成するためのopencvの機能はありますか.cvProjectPoint2が役立つかもしれないと思いますが、正確にはわかりません. では、ポイントの 3D 位置を見つける方法を教えてください。
ありがとう。
matlab - 2D ホモグラフィからの内因性および外因性パラメーター
私は単一の画像を持っています。私は(例えば、15)2D投影点(x [ピクセル]、y [ピクセル])と対応する(X、Y、Z)(m)を持っています。同じ平面上にあるすべてのポイント。
3D ポイントは 2D に変換されます
Xtrans=X./Z; Ytrans=Y./Z; Ztrans=0;
ここで、Hartley と Zisserman によって与えられた正規化された直接線形変換アルゴリズムに従って、2d ホモグラフィ (H3*3=[...];) を計算しました。
intransic および extransic パラメータを取得したい。この問題を解決するリンク、コードが見つかりませんでした。誰かが私を案内してくれませんか。よろしく
matlab - 既知の内因性および外因性パラメーターからMatlabで透視補正を行う方法は?
Jean-Yves Bouget の Camera Calibration Toolboxを使用して、カメラのキャリブレーションに Matlab を使用しています。キャリブレーション手順からのすべてのカメラ パラメータがあります。キャリブレーション セットに含まれていない新しい画像を使用すると、その変換方程式を取得できます。たとえば、Xc=R*X+T です。ここで、X はワールド フレーム内のキャリブレーション リグ (平面) の 3D ポイントであり、Xc はその座標です。カメラフレーム。言い換えれば、私はすべてを持っています (外部パラメータと内部パラメータの両方)。
私がやりたいことは、この画像に対して遠近法補正を実行することです。つまり、遠近法を削除して、キャリブレーション リグが歪んでいないことを確認します (チェッカーボード)。
Matlab の新しいコンピューター ビジョン ツールボックスには、3X3 行列 H が与えられた場合に、画像に対して透視変換を実行するオブジェクトがあります。問題は、既知の内因性および外因性パラメーターからこの行列を計算できないことです!
opencv - OpenCVキャリブレーションパラメーターとステレオカメラからの3Dポイント変換
私は4台のps3eyeカメラを持っています。そして、OpenCVライブラリのcvStereoCalibrate()関数を使用して、チェス盤のパターンを使用して、コーナーを見つけ、それらの3D座標をこの関数に渡すことにより、camera1とcamera2を調整しました。
また、camera2とcamera3で表示される別のチェス盤画像のセットを使用してcamera2とcamera3を調整しました。
同じ方法を使用して、camera3とcamera4をキャリブレーションしました。
これで、camera1とcamera2の外因性と内因性のパラメーター、camera2とcamera3の外因性と内因性のパラメーター、camera3とcamera4の外因性と内因性のパラメーターがわかりました。
ここで、外因性パラメーターは回転と並進の行列であり、内因性パラメーターは焦点距離と主点の行列です。
ここで、camera1とcamera2では表示されないcamera3とcamera4で表示される3dポイント(ワールド座標)(ステレオカメラから3d座標を見つける方法を知っています)があるとします。
私が持っている質問は、camera3とcamera4によって表示されるこの3Dワールド座標点を取得し、回転、平行移動、フォーカス、および主点パラメーターを使用して、camera1とcamera2のワールド座標系に対してどのように変換するかです。
c++ - C ++はワールド座標でカメラの位置を取得します(opencv)
わかりました。最初に、Matlab ツールと chessboardthingie を使用して組み込みパラメーターを取得します。そして、私は cv::solvePnP() を使用します
はい、検索を使用しましたが、残念ながらあまり役に立ちませんでした。
タイトルが示すように、現実世界のカメラ座標を見つける必要があります。しかし、opencv コマンドに関するいくつかの問題にも直面しています。これまで、画像内のいくつかのポイントと対応するワールド座標を知っています。(最悪6点が判明)
カメラ座標を取得するには、次の式を使用することを考えました。
transp(x,y,z)= - transp(R)*t 、ここで R と t は外部パラメータです
だから今私の問題は次のとおりです: R と t を計算する方法は? この問題を解決する opencv 関数は存在しますか? 実際には多くのカメラキャリブレーション機能があります。それとも、最初に固有パラメータを計算する必要がありますか?
編集:ここに私が意味する機能があります :
しかし、パラメータがどのように見えるべきかわかりません。たとえば、 cv::Mat ([[x1] [y1] [z1]] .... [[x6] [y6] [z6]]) のような 3x6 マトリックスを手動で初期化するにはどうすればよいですか
computer-vision - 2 番目のカメラに対する 1 つのカメラの外部パラメータを計算する方法は?
いくつかの世界座標系に関して 2 台のカメラを調整しました。ワールドフレームに対するそれぞれの回転行列と並進ベクトルを知っています。これらの行列から、あるカメラの回転行列と平行移動ベクトルを他のカメラに対してどのように計算するのですか??
ヘルプや提案をお願いします。ありがとう!
opengl - ワールド空間オブジェクトを使用してopencvからopenglへの外部カメラを決定する
私は opencv と openframeworks (つまり、opengl) を使用して、画像 (および後で三角測量のためのいくつかの画像) からカメラ (世界の変換行列と投影行列) を計算しています。
opencv の目的上、「フロア プラン」は、世界の中心が 0,0,0 のオブジェクト (つまり、チェス盤) になります。世界/床の位置はわかっているので、投影情報 (歪み係数、fov など) とカメラの外部座標を取得する必要があります。
これらのフロアプラン ポイントのビュー位置を、正規化されたビュー空間の 2D イメージにマッピングしました ([0,0] は左上、[1,1] は右下)。
オブジェクト(フロアプラン/ワールドポイント)はxz平面、-yアップ上にあるため、平面である必要があるため、opencvのxy平面に変換します(zアップが負か正かはわかりません...)
ImageSize として 1,1 を calibrationCamera に渡します。フラグがCV_CALIB_FIX_ASPECT_RATIO|V_CALIB_FIX_K4|CV_CALIB_FIX_K5
calibrateCamera
正常に実行され、エラーが少なくなります (通常は約0.003
)。
を使用するcalibrationMatrixValues
と、通常は約 50 度の適切な FOV が得られるため、固有のプロパティが正しいと確信しています。
ここで、カメラの外部ワールド空間変換を計算します... オブジェクトが 1 つしかないので、使用する必要はないと思いsolvePnP
ます (ただし、以前にこれをすべて試して、同じ結果で戻ってきました)。
これで、回転と変換の行列が得られましたが、それは列優先です (転置しないとオブジェクトが完全に歪んでいると思います。上記のコードは列優先に見えます)。
前の逆行列を使用して、平面を座標空間 (y を上) に戻します。
これを行う必要があるかどうかわかりません...キャリブレーションに入れるときに飛行機を無効にしませんでした...
そして最後に、モデルビューはオブジェクト相対カメラであり、カメラ相対オブジェクト(0,0,0)になるように反転したい
これにより、カメラが間違った場所に配置され、間違った回転が行われます。それほど離れていません。カメラは Y 平面の右側にあり、変換は大幅にずれていません。正しい方法だと思います....まだ正しくありません。ペイントで描かれた青い円は、カメラがあると予想される場所です。
私はたくさんのSO回答、ドキュメントを何十回も調べましたが、正しいものは何も見つかりませんでした。スペース変換に関して必要なすべてをカバーしたと確信していますが、明らかな何かを見逃している可能性があります? それとも間違った順序で何かをしていますか?
更新 1 - ワールド空間平面... openCV の入力と一致するように、ワールド空間のフロア平面を XY(Z アップ) に変更しました。(gWorldToCalibration は恒等行列になりました)。回転はまだ間違っており、投影出力は同じですが、翻訳は正しいと思います (確かにマーカーの正しい側にあります)
Update2 - 実際の画像サイズ カメラのキャリブレーションに入る画像サイズで遊んでいます。正規化された 1,1 を使用していますが、imageSize パラメーターは整数であるため、これは重要であると思いました...そして、そうであると思います (赤いボックスは、投影されたビュー空間ポイントが z と交差する場所です) =0 床面) 歪み補正なしの結果は次のとおりです (変更されたのは、画像サイズが 1,1 から 640,480 に変更されただけです。正規化された入力ビュー空間の座標にも 640,480 を掛けます) 歪みを追加してみます完全に並んでいるかどうかを確認するための修正...
opencv - カメラ姿勢推定 (OpenCV PnP)
ウェブカメラを使用して、既知のグローバル位置を持つ 4 つのフィデューシャルの画像からグローバル ポーズ推定値を取得しようとしています。
多くのstackexchangeの質問といくつかの論文をチェックしましたが、正しい解決策が得られないようです. 私が得た位置番号は再現可能ですが、カメラの動きに直線的に比例するものではありません。参考までに、C++ OpenCV 2.1 を使用しています。
このリンクには、私の座標系と以下で使用されるテスト データが描かれています。
これまでのところ、これらの数値に何か問題があるとわかる人はいますか? たとえば、MatLAB (上記のコードは m ファイルに適しています) などでチェックインしていただければ幸いです。
この時点から、rMat と tvec からグローバル ポーズを取得する方法がわかりません。この質問で読んだことから、rMat と tvec からポーズを取得するには、次のようにします。
しかし、私が読んだ他の情報源から、それはそれほど単純ではないと思われます。
実世界の座標でカメラの位置を取得するには、何をする必要がありますか? これが実装の問題かどうかはわかりませんが (理論上の問題である可能性が最も高い)、OpenCV で solvePnP 関数をうまく使用したことがある人にこの質問に答えてもらいたいと思いますが、アイデアも大歓迎です!
どうぞよろしくお願いいたします。
opencv - OpenCV: 移動する単一カメラの回転行列と並進ベクトル
キャリブレーションされた(固有パラメータ)カメラがあります。後で、オブジェクトから別の写真を撮るために使用する必要があります。それらは、画像のいくつかのポイントを再投影するために使用されます。
重要なステップは、同じオブジェクトの 2 つの画像を使用して、回転行列と平行移動ベクトルを計算することです。私は画像処理の初心者で、その方法がわかりません。任意の情報をいただければ幸いです。
ありがとう!