2013-06-13 29 views
6

- 更新2 - あなたは距離を計算するために、単一のカメラを使用している場合(これは、PythonではなくC++を使用しているが)計算距離(格差)OpenCVの

次の記事は本当に便利です。Find distance from camera to object/marker using Python and OpenCV

ベストリンクStereo Webcam Depth Detectionです。このオープンソースプロジェクトの実装は本当に明確です。

以下は元の質問です。


私のプロジェクトでは、2つのカメラ(ステレオビジョン)を使用してオブジェクトを追跡し、距離を計算しています。私はOpenCVのサンプルコードでそれらを較正し、視差マップを生成しました。

すでに色に基づいてオブジェクトを追跡する方法を実装しました(これにより、しきい値イメージが生成されます)。

私の質問:どのように視差マップ/マトリックスを使用して、追跡された着色オブジェクトまでの距離を計算できますか?

以下に、各ピクセルのx、y、z座標を取得するコードスニペットがあります。質問:Point.zはcm、ピクセル、mmですか?

このコードで追跡されたオブジェクトまでの距離を取得できますか?

ありがとうございます!

cvReprojectImageTo3D(disparity, Image3D, _Q); 

vector<CvPoint3D32f> PointArray; 
CvPoint3D32f Point; 

for (int y = 0; y < Image3D->rows; y++) {  

    float *data = (float *)(Image3D->data.ptr + y * Image3D->step); 

    for (int x = 0; x < Image3D->cols * 3; x = x + 3) 
    { 
     Point.x = data[x];   
     Point.y = data[x+1];  
     Point.z = data[x+2]; 
     PointArray.push_back(Point); 
     //Depth > 10 
     if(Point.z > 10) 
     { 
      printf("%f %f %f", Point.x, Point.y, Point.z);    
     } 
    } 
} 
cvReleaseMat(&Image3D); 

- アップデート1 -

例えばI(左カメラ)この閾値化画像を生成しました。私はほぼ同じカメラを持っています。

enter image description here

は、上記閾値画像に加えて、アプリケーションは、視差マップを生成します。どのように視差マップ内の手のピクセルのZ座標を取得できますか?

実際に、視差マップを使用して平均Z値(距離)を計算するために、手のピクセルのすべてのZ座標を取得したいと考えています。

答えて

2

このリンクを参照してください:詳細を書き、http://answers.opencv.org/question/5188/measure-distance-from-detected-object-using-opencv/
それはあなたの問題を解決することはできません場合は、OpenCV: How-to calculate distance between camera and object using image?Finding distance from camera to object of known sizeを - ピクセル単位で(格差を変換するなど、それが機能しない理由

+0

- 更新 - 最初の投稿を参照してください。 – Odrai

1

数学のか画像の幅のパーセンテージ)から実際の距離までの距離はかなりよく記録されていますが、それほど難しいものではありません。収束距離は、カメラレンズとの間の回転によって決定される

以下

は(ピクセル)の視差画像と2K(2048個の画素を横切って)画像の入力画像幅を与えられた例です。この例では5メートルになります。収束距離5(メートル)は、5メートル離れた物体の視差が0であることを意味します。輻輳距離の

CD = 5 (meters)   

逆数である1/CDメートル

SS = 0.035 (meters) //35mm camera sensor 

メートルにおけるセンサー上の画素の幅がカメラのセンサの

IZ = 1/5 = 0.2M 

サイズ

PW = SS/image resolution = 0.035/2048(image width) = 0.00001708984 

あなたの焦点距離メーター内のカメラ

FL = 0.07 //70mm lens 

InterAxial距離:左レンズの中心から右レンズの中心までの距離

IA = 0.0025 //2.5mm 

お使いのカメラリグ

A = FL * IA/PW 
の物理的なパラメータの組み合わせ

カメラ調整済みの視差:(左視用のみ、正面図は正の[視差値]を使用)

ここから
AD = 2 * (-[disparity value]/A) 

次の式を用いて、実際の距離を計算することができます

realDistance = 1/(IZ – AD) 

「トーイン」カメラシステム、並列カメラリグは無限大値を避けるために、わずかに異なる方程式を使用するため、この式はのみ動作しますしかし、私は今のところそれを残すでしょう。あなたがパラレルなものが必要な場合は、私に知らせてください。