問題タブ [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 - OpenCVで画面座標から世界座標を計算するには
OpenCVを使用してカメラの内因性および外因性パラメーターを計算しました。ここで、画面座標(u、v)から世界座標(x、y、z)を計算します。
どうすればいいですか?
注意:kinectを使用しているので、z座標はすでにわかっています。
どんな助けでも大歓迎です。ありがとう!
c++ - 2D画像ピクセルから3D座標系でx、yを取得する
固定位置のカメラを使用して、動いているオブジェクトを追跡し、事前に選択した座標系でローカライズする必要があります。アイデアは、既知の高さを持つオブジェクトの上部に特定のカラー マーカーを配置することです。これにより、Z 座標が認識されます。色の追跡が完了したら、色が見つかった u と v の画像座標から X と Y を見つける必要があります。私はすでにカメラのキャリブレーションを行っており、cv::solvePnP を使用して回転と平行移動ベクトルを取得する予定です。また、ここでカラー トラッキングについて学び、そこから C++ API を作成しました。
ここで同様の質問を見つけて、そこから多くのことを学びましたが、違いは、Z 座標がわかっている (以前に測定された) ため、X と Y のみを評価する必要があることです。事前に指定された Z でこれらの X 座標と Y 座標を取得するにはどうすればよいですか? 手伝ってくれてありがとう!
opencv - 基本行列のテスト
私の質問は次のとおりです。
- 基本行列が正しいかどうかを確認するにはどうすればよいですか?
- 以下に投稿したコードは、それに向けて良い努力をしていますか?
私の最終目標は、ある種の3D再構成を行うことです。現在、2台のカメラの差を推定できるように、基本行列を計算しようとしています。私はこれをopenFrameworks内で、ofxCvアドオンを使用して行っていますが、ほとんどの場合、それは純粋なOpenCVです。ofxCvも開発中であるため、問題を切り分けるコードを投稿することは困難です。
私のコードは基本的に、ウェブカメラがわずかに異なる位置から取得した2つの640x480フレームを読み取ります(基本的には、ラップトップを少し水平にスライドさせるだけです)。を使用するofxCvのキャリブレーションコードから取得した、そのキャリブレーションマトリックスをすでに持っていますfindChessboardCorners
。歪みのないサンプルコードは、キャリブレーションマトリックスが正確であることを示しているようです。画像間のオプティカルフロー(またはのいずれcalcOpticalFlowPyrLK
かcalcOpticalFlowFarneback
)を計算し、それらのポイントペアをにフィードしfindFundamentalMatrix
ます。
基本行列が有効かどうかをテストするために、回転行列と変換行列に分解しました。次に、回転行列に2番目の画像のポイントを掛けて、カメラ間の回転の違いを確認しました。違いは小さいはずだと思いましたが、大きな違いが出てきています。
これが私の最後のコードの基本的な回転行列です。
これが、2枚目の写真が撮られた後に発生するコードの私の部分です。
何か案は?私の基本行列は正しく見えますか、それともテストで間違った考えを持っていますか?
matlab - 既知のカメラ パラメータを使用して、Matlab で画像の歪みを解消するにはどうすればよいですか?
これはOpenCVで簡単に実行できますが、かなり効率的で簡単に変更できるネイティブの Matlab 実装が必要です。このメソッドは、上記のリンクで指定されているカメラ パラメーターを取得できる必要があります。
c++ - opencv エラー: カメラを調整すると、convert.cpp (opencv) でアサーションが失敗しました
カメラ (opencv 2.3.1、VS 2010、および Windows 7) を調整しようとしましたが、プログラムをコンパイルすると、opencv エラーが発生します。
"Assertion Failed:<src.size==dst.size && src.channels<>dst.channels<>> in unknown function , file ....modules \core\src\convert.cpp, line 1277".
ここにコードの一部、
この問題を何度も解決しようとしましたが、助けが必要です。
computer-vision - 2 番目のカメラに対する 1 つのカメラの外部パラメータを計算する方法は?
いくつかの世界座標系に関して 2 台のカメラを調整しました。ワールドフレームに対するそれぞれの回転行列と並進ベクトルを知っています。これらの行列から、あるカメラの回転行列と平行移動ベクトルを他のカメラに対してどのように計算するのですか??
ヘルプや提案をお願いします。ありがとう!
opencv - 三角測量、calibrateCameras()のtvecおよびrvecから
私の質問に対する答えを正確に見つけるのは難しいので、他の場所で十分に説明されていなくても、ここで質問したいと思います。誰もが私の結果に戻れるように、コードにソリューションを追加しようとしています。しかし、最初にそれを解決する必要があります。
OpenCVによる三角測量についてcv::triangulatePoints()
です。私はその貧弱な文書を知っていますが、ウィローガレージ(現在)で見つけることができます(文書2.4.9を検索してください)
- チェス盤のキャリブレーションには、角度の異なる22のステレオ画像(2つのカム)を使用します。安定した固有パラメータの場合。
- チェス盤のコーナーを手に入れました
cv::findChessboardCorners()
- オプション-
cv::cornerSubPix()
- すべてのチェス盤ポイントにobjectPoints
cv::Point3f( k*m_squareSize, j*m_squareSize,0.0f)
を作成します(k-チェス盤の幅、jチェス盤の高さ、またはその逆、squareSize =実世界のサイズ) - 2.-4を実行します。すべての画像に対して
- ここにすべてを入れてください:
cv::calibrateCamera(object_points1, image_points1, image.size(), intrinsic1, distCoeffs1, rvecs1, tvecs1);
この機能は私が望んでいたように完璧に機能します、私は2番目のカメラ画像でもそれをやっています。長い調査の結果、私はこれを見つけました。 cv::Mat R12 = R2*R1.t(); cv::Mat T12 = T2-R*T1;
これは、cam1とcam2の関係(R | T)用です。これはかなりうまく機能します。の結果でテストしましたcv::stereoCalibrate()
。- このステップでは、tvecsとrvecsを使用して、2Dも3D、3Dも2Dを再投影したいと思いました。最後に、
cv::projectPoints(object_points1[i],rvecs1[i],tvecs1[i],intrinsic1, distCoeffs1, imagePoints1);
->正常に動作します-たった1つのポイントで2Pixelの差から最大48 * 2*22ポイントを取得しました。しかし、2Dから3Dへの三角測量をこれ以上進めることはできません。私は持っています!あまりにも使用しますcv::triangulatePoints()
。どうすればこの作品を手に入れることができますか?
私がこれまでに行ったことは、良い結果が得られずに試みました。最初に、射影行列P1とP2が必要です。
申し訳ありませんが、これは重く見えますが、回転行列(rodrigues(rvecs1、R1))とtranslationvectortvecs1のみです。これは間違っていますか?回転行列R1を逆にする必要がありますか?
次のステップ:左右の画像にimagePoints(Corners)が必要です。これらのimagePointsは、findChessboardCorners()から取得した歪みのないコーナーです。
cv::triangulatePoints(P1, P2, cv::Mat(undisPt_set1).reshape(1,2), cv::Mat(undisPt_set2).reshape(1,2), point3d);
point3dを使用した後は、4番目のパラメータが次のように削除された「4D」ポイントです。convertPointsHomogeneous(point3d.reshape(4, 1), point3dCam1);
これは私がこれまでに行ったことですが、機能していません。誰かが私が間違っていることを知っていますか?最後のステップで何か間違った考えはありますか?計算を試しましたが、projectionMatrixP1とP2についてはよくわかりません。[R | t]のように構築されていることは知っていますが、それは私のtvecsとtvecsですか?それは転置ですか、それとも逆ですか?どんな助けでも素晴らしいですが、plsはいくつかのコードや明確な手順で私を助けてくれます-私が読んで考える必要があるより多くのリンクではなく、私は本当に研究をしました、私は学習OpenCV本、OpenCV2クックブック、そしてここにハートリーとジッサーマンを持っています私の目の前で。しかし、私はそれに到達することはできません。
opencv - 画像点から x,y 座標 (3D) を計算する
3D 座標系でオブジェクトを見つけるタスクがあります。ほぼ正確な X 座標と Y 座標を取得する必要があるため、この図のオレンジ色のボールのように、移動オブジェクトの上部に配置される既知の Z 座標を持つ 1 つのカラー マーカーを追跡することにしました。
最初に、カメラのキャリブレーションを行って内部パラメーターを取得し、その後、次のコードのように cv::solvePnP を使用して回転と平行移動ベクトルを取得しました。
すべての行列を取得した後、画像ポイントを世界座標に変換するのに役立つこの方程式:
ここで、M は cameraMatrix、R - 回転マトリックス、t - tvec、s は不明です。Zconst はオレンジ色のボールの高さを表し、この例では 285 mm です。したがって、最初に前の方程式を解いて「s」を取得する必要があります。その後、イメージ ポイントを選択して X 座標と Y 座標を見つけます。
これを解決すると、行列の最後の行を使用して変数 "s" を見つけることができます。これは、Zconst が既知であるためです。そのための次のコードを次に示します。
この後、結果が得られました: P = [-2629.5, 1272.6, 285.]
それを測定値と比較すると、次のようになります。 Preal = [-2629.6, 1269.5, 285.]
エラーは非常に小さく、非常に良いのですが、このボックスをこの部屋の端に移動すると、エラーが 20 ~ 40 mm になる可能性があり、これを改善したいと考えています。誰でもそれを手伝ってもらえますか、何か提案はありますか?
opengl - 2台のカメラによる頭部姿勢推定
2 台のカメラを使用した頭部姿勢推定プロジェクトに取り組んでいます。1 つのカメラ システムに対して動作し、各カメラ座標系に対する頭部の回転行列と並進ベクトルを返します。頭の動きを表すために回転および変換された OpenGL シーンでオブジェクトをレンダリングしました。計算された回転行列と並進ベクトルを表示するには、次の OpenGL コマンドを使用するだけです。
ここで、ポーズ マトリックスは、頭部の回転マトリックスと並進ベクトルから構成される OpenGL ModelView マトリックスです。
現在、2 台のキャリブレーション済みカメラに対してこれを実行しようとしています。最初のカメラが顔の追跡を失ったが、2 番目のカメラが頭の姿勢を推定した場合、2 番目のカメラに対する回転と平行移動を表示し、その逆も同様です。どちらの場合も、1 つの OpenGl オブジェクトを表示して移動したいと考えています。そのためには、ポーズ行列を共通の座標フレームに転送する必要があります。
2 台のカメラの相対的なジオメトリを知っています。カメラの 1 つがワールド座標フレームであると仮定し、最初のカメラに対して 2 番目のカメラのポーズ マトリックスとキャリブレーション マトリックスを乗算することにより、2 番目のカメラのヘッド ポーズ マトリックスを最初のカメラのフレームに転送します。この乗算された行列を OpenGL ModelView 行列にロードすると、間違った結果が得られます。最初のカメラが顔をキャプチャすると、オブジェクトは右に移動しますが、2 番目のカメラではオブジェクトが平行移動および回転し、最初のカメラの場合と同じ場所にはありません。
何が問題なのですか?OpenGLの表示部分が間違っているのでしょうか?
opencv - Opencvでのキャリブレーション後のポイントワールド座標の検索
次のようなOpenCVの機能はありますか?
- 画像平面内のマーカーの座標
- 外因性パラメータ
- 固有のパラメータ
- z座標(センサーkinectを使用しているため、マーカーとカムの間の距離)
マーカーの対応する世界座標を提供しますか?
どんな助けでも大歓迎です。ありがとう!