2013-07-06 86 views
10

私が使用しているウェブカメラに対する写真のピクセルの角度を計算する方法を知りたい。私はこの種のものを初めて使い、私はウェブカメラを使用しています。本質的に、私は写真を撮り、それを処理し、私が探している画像のピクセル値で終わります。私は何とかそのピクセル値を意味のある量に変換する必要があります---ピクセルとカメラを通過する線/ベクトルを見つける必要があります。私は、大きさは必要ありません、ちょうどフェーズ。OpenCV:カメラとピクセルの間の角度を計算する

これを行うにはどうすればよいですか?カメラのキャリブレーションは必要ですか?私はそれについて少し読んできましたが、わかりません。あなたは対象物までの距離を知る必要はありません

おかげ

+2

これを行うには、ピクセルに対応するオブジェクトの距離とカメラの視野を知る必要があります。 –

+0

さて、私の問題をどのように解決できるかについてのアドバイスはありますか?私は基本的に特定の色のオブジェクトを探しています。私は、私が探している色に最もよく合ったピクセル座標を見つけます。次に、オブジェクトがどの方向であるかを言う何らかの方法が必要です。これは深さなしでは不可能ですか?私はピクセル座標からいくつかのベアリングを得ることができるだろうと思っていただろう... –

+0

状況の図を描く。あなたは、角が(A)オブジェクト、(B)カメラ、(C)画像の中央でオブジェクトの奥行き面にある点の直角三角形を持っています。どのように角度ABCを計算するつもりですか? –

答えて

7

、唯一の解像度やカメラの画角。

角度の計算には単純な線形補間が必要です。たとえば、1920x1080の解像度を持ち、斜め45度の画角をカバーするカメラを想定します。この場合

、SQRT(1920 + 1080 )は対角線に沿っ2292.19画素を与えます。つまり、各ピクセルは45/2292.19 = .0153994度を表します。

したがって、中心からの距離(ピクセル単位)を計算し、.0153994を掛けます。中心からの角度があります(カメラの場合は、あなたの解像度と角度を使用する必要があります)ビューの)。

もちろん、これはやや近似しています - その精度は、レンズの歪みの程度によって異なります。ズームレンズ(特に広い角度)では、通常、それはかなり高いと評価できます。固定焦点距離レンズ(特に90度以上の角度をカバーしていない場合は特に)は、通常はかなり低くなります。

精度を向上させたい場合は、カメラの画角の真っ直ぐに直線が描かれたフラットな矩形を撮影してから、結果の画像が完全に真っ直ぐにならないように歪みを計算します。あなたが非常に広角レンズで作業している場合、これはほぼ不可欠かもしれません。より狭い画角(特に既述のように、焦点距離が固定されている場合)をカバーするレンズでは、それほど価値があることはほとんどありません(そのようなレンズはしばしば歪みの割合がわずかしかない)。

+0

ありがとう、これは非常に役に立ちます。 「カメラキャリブレーション」は必要/価値があると思いますか? –

+0

@ user968243:私はOpenCVのカメラキャリブレーションは歪みを測定することを意図していると思いますので、答えの最後の段落で説明していることです。その有用性は、私が知らないレンズの歪みレベルに依存します。 –

+0

答えは一次近似に過ぎません。カメラを較正することで、より正確な答えを簡単に得ることができます。これは、通常、大きな非線形歪みを示すより広い角度のレンズ(> 90 deg FOV)に当てはまります。 –

11

レシピ:

1 - 本tutorialに記載されているようにこれが行われるOpenCVのにカメラ行列Kと歪みパラメータDを得、カメラのキャリブレーション。

2 - 関心のあるピクセル位置から非線形歪みを取り除きます。 OpenCVでは、引数RとPを渡さずにundistortPointsルーチンを使用して実行します。

3 - 関心のあるピクセルを、カメラの3D座標で光線(カメラの中心で尾を持つ単位ベクトル)に逆投影します。均質座標におけるピクセル位置は、カメラ行列の逆数を掛ける。

4 - 上記のベクトルと(0、0、1)の間の角度、カメラの焦点軸に関連付けられたベクトルです。

+0

こんにちは、ベアリングベクトルをピクセルPの位置から取得したいと思います。カメラの中心からピクセルPによって識別されるオブジェクトに移動する単位ベクトルです。 これを行うには、説明のポイント3に到達する必要があります。 camera_matrixは、たとえばカメラのキャリブレーションから出力される3x3マトリックスです。すべて正しいですか? ありがとうございます – kalmanIsAGameChanger

関連する問題