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 の場合)のいずれかであることを示します。

返り値

エラーがなければ、OK を返します。

説明

2 つの画像の 3D オートフォーカスを計算します(通常、左右のカメラでキャプチャされた画像)。
オートフォーカスは、"一番近いオブジェクト"にフォーカスしようとしますが、"重要でない"オブジェクトは切り捨てます(画面サーフェスの約 20% より小さいオブジェクト)。
この関数は、内部のオートフォーカス値で 1 度の計算によって行われます。 そのため、通常、毎フレームごとのオートフォーカス計算を避けるために、スレッドで非同期的に呼び出します。 そして、毎フレームごとに補間されたオートフォーカス値を読み出すために Get を使用します。

カメラのキャリブレーションを考慮に入れるため、画像の補正をする並進移動とともに、オートフォーカスを呼び出す必要があります。
通常、以下のようになります(translationX/translationY キャリブレーション用):

さらに、maxParallax に translationX を含める必要があります。(視差範囲検索は、maxParallax+translationX になります。)

バージョン履歴

2011/03/15
初版

CONFIDENTIAL