1

私はImageReader.OnImageAvailableListenerを使用してフレームバッファを取得し、最新の画像を取得してYプレーンを処理する簡単なAndroidアプリケーションを作成しています。この平面を使って、画面に何かを表示するかどうかを決定する単純なメトリックを計算します。Android Camera2 YUV_420_888 Yチャンネルの解釈

私の質問は、Y面だけを処理して解釈する方法でした(私はU面とV面は必要ありません)。私の理解では、Y平面には輝度チャネルが含まれています。すなわち、チャンネルは画像の明るさで表示されます。

ドキュメントには、各ピクセルが8ビット、つまり1バイトであることが記載されています。ピクセルはByteBuffer内にあるので意味があります。しかし、私のImageReader.OnImageAvailableListenerでLog.i(TAG, String.valueOf(image.getPlanes()[0].getBuffer().get(0)を呼び出すことによってYチャネルの最初のバイトを印刷した実験の後、画像の「明るさ」とバイトの値の間に相関はありません。たとえば、完全に黒い背景にカメラを置くと、輝度が〜0〜15の値が得られます。私が明るい白の背景に置くとき、私は-110の周りの値を取得します。しかし、これらはミニマムやマキシマのようなものではありません。全白でないか全黒のバックグラウンドでは、輝度と相関していないような値を得るでしょう。

私の質問は、これらの輝度値をどのように解釈すればよいのですか?特定のピクセルの画像の明るさとはまったく相関がありますか?フレームバッファの輝度値を正しく取得していますか?そうでない場合は、どのように取得する必要がありますか?

+0

関連:http://stackoverflow.com/questions/22793155/difference-between-yuv420-and-yuv422 –

答えて

0

私は最後に手を絞った後にそれを理解しました。私はthisリンクの答えの鍵を見つけました。報告されている値は実際には輝度値ですが、配置されているByteBufferはSIGNEDで、輝度値はUNSIGNEDです(リンクで報告されています)。このため、バッファからの各値は0xff& -edで、真の輝度値を取得する必要があります。これは意味があります。