mw::mo::mocam::autofocus::Handle::Calculate
メンバ関数ErrorCodes Calculate( const u8* src0,const u8* src1, u32 width,u32 height,u32 stride, s32 maxParallax, bool formatPlanarY=false );
名前 | 説明 | |
---|---|---|
in | src0 | フォーカスする最初の画像のポインタです。 画像フォーマットは 8 ビット YUY2(Y のみ使用するため、U と V は 0 で構いません)、または 8 ビット Planar Y(以下の formatPlanarY フラグを参照してください)です。 4 バイト境界である必要があります。 |
in | src1 | フォーカスする 2 つ目の画像のポインタです。 画像フォーマットは 8 ビット YUY2(Y のみ使用するため、U と V は 0 で構いません)、または 8 ビット Planar Y(以下の formatPlanarY フラグを参照してください)です。 4 バイト境界である必要があります。 |
in | width | ピクセル単位で表す src0 と src1 の幅です。 |
in | height | ピクセル単位で表す src0 と src1 の高さです。 |
in | stride | バイト単位で表す連続の 2 ライン間の距離です(通常は、YUY2 用に width*2、または Planar Y フォーマット用にwidth です)。 4 バイトの倍数である必要があります。 |
in | maxParallax | 計算のために内部で使用する最大視差値です。 maxParallax 値が高いほど、オートフォーカスはより近くまでフォーカスすることが可能になります。 オートフォーカス値でソース画像をクロップする必要があるため、ソース画像の幅は使用可能内の最大値を決定します。 例えば、2 つの VGA 画像のキャプチャをし(幅 640 ピクセル)、3DS の表示画面の解像度を使用する場合(幅 400 ピクセル)、 maxParallax 値は、240=640-400 に設定することが可能です。この値は、約 9 cm の最も近いフォーカスでの距離を与えます。 通常の"高い"値は、VGA で 120 ピクセル前後です。これは、18 cm のオブジェクトが"2D のピンボケ"(不鮮明)になる近い距離までフォーカスさせます。 通常の"低い"値(VGA の場合)は、例えば 64 (34 cm)になります。 オートフォーカス計算の CPU 負荷は、一部 maxParallax 値に比例します。 視差値は絶対値のため、キャリブレーションを考慮に入れるために、キャリブレーション translationX 値を任意の maxParallax 範囲に追加する必要があります。 |
in | formatPlanarY | src0 と src1 ピクセルのフォーマットが YUY2 (デフォルト)あるいは Planar Y(このフラグが true の場合)のいずれかであることを示します。 |
2 つの画像の 3D オートフォーカスを計算します(通常、左右のカメラでキャプチャされた画像)。
オートフォーカスは、"一番近いオブジェクト"にフォーカスしようとしますが、"重要でない"オブジェクトは切り捨てます(画面サーフェスの約 20% より小さいオブジェクト)。
この関数は、内部のオートフォーカス値で 1 度の計算によって行われます。
そのため、通常、毎フレームごとのオートフォーカス計算を避けるために、スレッドで非同期的に呼び出します。
そして、毎フレームごとに補間されたオートフォーカス値を読み出すために Get を使用します。
カメラのキャリブレーションを考慮に入れるため、画像の補正をする並進移動とともに、オートフォーカスを呼び出す必要があります。
通常、以下のようになります(translationX/translationY キャリブレーション用):
CONFIDENTIAL