9

私はopencvを使ってiPhone用のアプリケーションを開発しています。メソッド solvePnPRansac を使用する必要があります。

http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html

このメソッドでは、カメラ マトリックスを提供する必要があり
ます
。fx 0 cx |
| | 0 年度 |
|_0 0 1 _|

ここで、cx と cy は画像の中心ピクセル位置を表し、fx と fy は焦点距離を表しますが、ドキュメントに記載されているのはそれだけです。これらの焦点距離に何を提供すればよいかわかりません。iPhone 5の焦点距離は4.1mmですが、この値がそのまま使えるとは思えません。

私は別のウェブサイトをチェックしました:

http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

これは、opencv がカメラ マトリックスを作成する方法を示しています。ここでは、焦点距離はピクセル単位で測定されると述べています。

私は別のウェブサイトをチェックしました:

http://www.velocityreviews.com/forums/t500283-focal-length-in-pixels.html

(約半分下)次の式を使用して、焦点距離をミリメートル単位からピクセルに変換できると書かれています。

私が見つけた別のリンクは、 fx = focusMM * width / (sensorSizeMM); と述べています。fy = focusMM * 長さ / (sensorSizeMM);

これらの方程式と、この行列を適切に作成する方法がわかりません。

正確なカメラ マトリックス (特に iPhone 5 の場合) を作成する方法に関するヘルプ、アドバイス、またはリンクは大歓迎です。

アイザック

ps (fx/fy) または (fy/fx) はカメラの縦横比に等しいと思いますが、それは完全に間違っている可能性があります。

アップデート:

3D ラインへのピクセル座標 (opencv)

このリンクを使用すると、中心からの距離に対して角度をスケーリングするために使用するため、fx と fy をどのようにフォーマットするかを理解できます。したがって、fx と fy はピクセル/(単位長さ) である可能性がありますが、この単位長が必要かどうかはまだわかりません。x と y が互いにスケーリングされている限り、任意にすることができますか?

4

5 に答える 5

10

mm 単位の焦点距離をカメラのセンサー (CCD、CMOS など) のピクセルの幅で割ったピクセル単位の焦点距離の初期 (大まかな) 推定値を得ることができます。

前者はカメラのマニュアルから取得するか、フル解像度で撮影した画像の EXIF ヘッダーから読み取ります。後者を見つけるのはもう少し複雑です。メーカーとモデル番号がわかっている場合は、インターウェブでセンサーのスペックシートを調べるか、センサーの感知領域の全体の幅をセンサーのピクセル数で割るだけです。側。

他の情報がない場合、通常は、ピクセルが正方形 (つまり、fx == fy) であり、センサーがレンズの焦点軸に対して直交していると仮定しても問題ありません (つまり、カメラ行列の最初の行と 2 番目の列の項は次のようになります)。ゼロ)。また、主点 (cx、cy) のピクセル座標は、通常、慎重に設計されたキャリブレーション リグと、慎重に実行されたキャリブレーション手順なしでは正確に推定するのが困難です (これは、画像に平行なカメラの移動と本質的に混同されるためです)。飛行機)。したがって、画像が非対称にトリミングされていることがわかっている場合を除き、画像の幾何学的な幾何学的中心に等しく設定することをお勧めします。

したがって、最も単純なカメラ モデルには、焦点距離 f = fx = f という未知のパラメーターが 1 つだけあります。

アドバイス: アプリケーションでは通常、ピクセル単位の焦点距離ではなく、水平 (または垂直) 視野角を使用する方が便利です。これは、FOV が画像のスケーリングに対して不変であるためです。

于 2013-02-05T13:29:21.167 に答える
6

ここで扱っている「焦点距離」は、ピンホール カメラ モデル (ウィキペディア リンク)で使用される、世界のオブジェクトからカメラ ピクセルへの単純な倍率です。そのため、単位はピクセル/単位長です。与えられたf に対して、距離 (カメラに対して垂直) zにあるサイズLのオブジェクトは、f*L/zピクセルになります。

したがって、既知のサイズのオブジェクトをカメラの既知の距離に配置し、画像内でそのサイズを測定することで、焦点距離を推定できます。中心点が画像の中心であると仮定することもできます。レンズの歪み ( solvePnPRansacのdist_coefパラメーター) を絶対に無視しないでください。

実際には、カメラ行列と歪み係数を取得する最良の方法は、カメラ キャリブレーション ツールを使用することです。このリンクから MRPT camera_calib ソフトウェアをダウンロードして使用できます。ここにはビデオ チュートリアルもあります。matlab を使用する場合は、Camera Calibration Toolboxを使用してください。

于 2013-02-08T10:05:46.420 に答える
4

ここに、iPhone 4 および 5 のカメラの仕様を示す表があります。計算は次のとおりです。

double f = 4.1;
double resX = (double)(sourceImage.cols);
double resY = (double)(sourceImage.rows);
double sensorSizeX = 4.89;
double sensorSizeY = 3.67;
double fx = f * resX / sensorSizeX;
double fy = f * resY / sensorSizeY;
double cx = resX/2.;
double cy = resY/2.;
于 2014-08-05T23:18:22.510 に答える
1

これを試して:

func getCamMatrix()->(Float, Float, Float, Float)
{

    let format:AVCaptureDeviceFormat? = deviceInput?.device.activeFormat
    let fDesc:CMFormatDescriptionRef = format!.formatDescription

    let dim:CGSize = CMVideoFormatDescriptionGetPresentationDimensions(fDesc, true, true)

    // dim = dimensioni immagine finale
    let cx:Float = Float(dim.width) / 2.0;
    let cy:Float = Float(dim.height) / 2.0;

    let HFOV : Float = format!.videoFieldOfView
    let VFOV : Float = ((HFOV)/cx)*cy

    let fx:Float = abs(Float(dim.width) / (2 * tan(HFOV / 180 * Float(M_PI) / 2)));
    let fy:Float = abs(Float(dim.height) / (2 * tan(VFOV / 180 * Float(M_PI) / 2)));

    return (fx, fy, cx, cy)
}
于 2015-11-20T10:49:30.123 に答える
1

古いスレッド、現在の問題。

Milo の回答の後に Milo と Isaac が言及したように、たとえば iPhone 5 で利用できる「共通の」パラメータはないようです。

参考までに、古い iPhone 5 で MRPT キャリブレーション ツールを実行した結果を次に示します。

[CAMERA_PARAMS]
resolution=[3264 2448]
cx=1668.87585
cy=1226.19712
fx=3288.47697
fy=3078.59787
dist=[-7.416752e-02 1.562157e+00 1.236471e-03 1.237955e-03 -5.378571e+00]

Average err. of reprojection: 1.06726 pixels (OpenCV error=1.06726)

distここでは歪みを意味することに注意してください。

これらのパラメーターを使用して、おもちゃのプロジェクトで実験を行っています---まあまあです。独自のプロジェクトでそれらを使用する場合は、開始するのに十分ではない可能性があることに注意してください. 最良の方法は、独自のデータを使用してマイロの推奨事項に従うことです。MRPT ツールは非常に使いやすく、提供されるチェッカーボードを使用できます。これが始めるのに役立つことを願っています!

于 2017-06-30T02:02:20.447 に答える