1

GPU の処理能力を使用して、2 つの RGB ビデオ フレームの減算を実行したいと考えています。つまり、最初の画像の各ピクセルの R、G、B 値を 2 番目の画像で減算します。また、結果は負の RGB 値を持ち、NSMutableArray に格納する必要があります。AVCaptureSession を使用して、生のビデオ フレームを CMSampleBufferRef 形式で取得します。

1) 負の RGB 値をサポートする画像形式はありますか? または、画像を保存するためにマトリックスのようなクラスを作成する必要がありますか?

(一部の画像形式では float を使用して RGB 値を格納しているようです...)

(Image Different Blend Modeについて聞いたことがあります。これは私が望むものに似ていますが、RGB値を絶対値にします。結果に負の値を持たせたいです)

2) GPU 処理能力を使用して減算を行うにはどうすればよいですか?

(CPUでできるけどFPSが遅すぎて5~6FPSくらいで30FPSにしたい)

(OpenGL や Quartz Composer は役に立ちますか?)

ありがとう。

4

1 に答える 1

3

Hammer が指摘するように、私のオープン ソースGPUImageフレームワークの GPUImageDifferenceBlendFilter はまさにこれを行います。次のフラグメント シェーダーを使用して、赤、緑、青のチャンネルの絶対差を取得します。

 varying highp vec2 textureCoordinate;
 varying highp vec2 textureCoordinate2;

 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;

 void main()
 {
     mediump vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
     mediump vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);
     gl_FragColor = vec4(abs(textureColor2.rgb - textureColor.rgb), textureColor.a);
 }

連続するビデオ フレームを比較する必要がある場合は、GPUImageBuffer を使用して、古いフレームが現在のビデオ フレームとともに処理されるのを遅らせることもできます。フレームワーク内の FilterShowcase サンプル アプリケーションに、この例があります。

「結果は負のRGB値を持ちたい」という意味がよくわかりません。現在の iOS デバイスでサポートされているテクスチャ バックアップ フレームバッファ (レンダー ターゲット) 用の唯一のテクスチャ フォーマットは、32 ビット BGRA です。これは、各カラー チャネルの範囲が 0 ~ 255 であり、負の値が許可されていないことを意味します。ただし、その色範囲の下半分を負の値に使用し、上半分を正の値に使用できます。

次のようなフラグメント シェーダーを使用して、GPUImageSubtractBlendFilter を変更することができます。

 varying highp vec2 textureCoordinate;
 varying highp vec2 textureCoordinate2;

 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;

 void main()
 {
     lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
     lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);

     gl_FragColor = vec4((textureColor.rgb - textureColor2.rgb + 1.0) * 0.5, textureColor.a);
 }

次に、ピクセルを読み戻した後、0-255 の出力を -128 - 128 (または任意の範囲) に変換する必要があります。

于 2012-09-06T17:55:44.813 に答える