2017-01-17 6 views
1

私は実際にこのことを理解するのに苦労しています。私はPythonの初心者です。このコードには説明がありません。Python OpenCV Stereoオブジェクトポイントを調整する

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) 
objp = np.zeros((6*9,3), np.float32) 
objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2) 

原9はI 9と6は、それぞれ、チェス盤パターンの列と行の内側の角であると仮定7である、ということです。 (私のチェス盤は本当に10x7なので)

今、私はチェス盤の正方形の大きさを知っています。私が理解できないことは、そこに置く場所です。

objpoints.append(objp) 

そして、私が見ることができる、それは常に何度も何度も同じオブジェクトを押しています:すべての画像上の全ての反復、私はこれを行う見つけコードとして

2つの質問: どのように繰り返すごとにobjpoints.append(objp)が違いますか?

私はコードで正方形のサイズを指定できますか?どこに置くべきですか?

私はオブジェクトポイントがチェス盤の各四角形の3次元のポイントであることを知っています。それは非常に混乱しています。なぜなら、繰り返しごとに操作されていないからです。

ありがとうございます!

EDIT: stereocalibのための私のコード:http://pastebin.com/pw5n3pme

(これは、個々のカメラキャリブレーションの単なる修正版です)

+0

完全な回答が必要な場合は、コード全体をリンクする必要があります。私はとにかく答えようとします。 – marcoresk

答えて

1

私はあなたがthis codeまたは同様のものを使用して作業していると仮定します。

すべての繰り返しで(objpを)objpoints.appendんどのように最初の質問

は違いを作りますか? それはありません。あなたが投稿ラインから、ここでは、この

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2) 

を見て、それは特定のチェス盤には、常に同じで、チェス盤コーナーの配置を計算しています。あなたがカメラで異なるイメーグポイントを見つけるたびに、のチェス盤の同じ点について

同じポイントでなかった場合、あなたは

2番目の質問をキャリブレーションを行うことができませんでした

どのように私は、コード内の正方形のサイズを指定することができますか?どこに置くべきですか?

私が投稿したチュートリアルでは、PythonとOpenCV用に正方形のサイズを指定しないでください。これはモノラルキャリブレーションですので、スクエアサイズはスケールファクタにのみ関連し、モノラルカメラでは(まったく)役に立たなくなります。定義されていない(または1に等しいかもしれない)倍率で正しいカメラマトリックスを取得します。

コードが違う場合(例:ステレオキャリブレーション)、投稿して、正方形の寸法を置く場所を見つけようとします。

+0

Answer @marcoreskありがとうございます。私のstereocalib.pyのペーストビンです http://pastebin.com/pw5n3pme ここでは、私は左と右のカメラのための個別に較正された行列を使用しました。同時に2つのカメラを較正するのではなく、私のために働いていました。 – Wreigh

+0

をstereocalibに入れました。リンクしたコードをコピーしてすぐに2台のカメラ用にコピーしました。カメラ調整の代わりにstereoCalibrateメソッドを使用しました。 – Wreigh

+0

@WreighChristianSantosコードはチュートリアルのみでした。正方形のサイズを挿入するには、objpで使用する必要があります。 [この他の回答を読む](http://stackoverflow.com/questions/37310210/camera-calibration-with-opencv-how-to-adjustches-boardsquare-size) – marcoresk

1

私はまた、PythonとOpenCVでステレオカメラのキャリブレーションを行っています。私はあなたの2番目の質問への答えを知っています(1番目はすでに回答済みです)。

私はどのようにコードで正方形のサイズを指定できますか?どこに置くべきですか?

ここで、正方形のサイズを30mmとした場合、この値にobjp[:,:2]を乗算します。 objp[:,:2]としてこの

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)*30 # 30 mm size of square 

ように(0,0)、(0,1)、(0,2)...(8,5)として与えられるcheckboard隅の点の集合です。 (0,0)点は左上の最も正方形の角であり、(8,5)は右の最も低い角の角である。この場合、これらの点には単位はありませんが、これらの値に正方形のサイズ(たとえば30 mm)を掛けると、これらは(0,0)、(0,30)、.....(240,150)になります。実世界の単位です。この場合、翻訳ベクトルはmm単位になります。

関連する問題