0

プロジェクトで GPUImage を使用しており、列の合計を効率的に取得する方法が必要です。単純な方法は、明らかに生データを取得し、すべての列の値を追加することです。誰かがそのためのより速い方法を提案できますか?

4

1 に答える 1

1

これを行う 1 つの方法は、GPUImageAverageColor クラスで採用したアプローチを使用することです (この回答で説明されています)。各ステップで各フレームの合計サイズを縮小する代わりに、画像の 1 次元に対してのみこれを行います。

平均カラー フィルタは、X と Y の両方で 16 ピクセルを 1 ピクセルに平均化して、画像全体の平均カラーを決定します。単一方向で操作する場合、ハードウェア補間を使用して、ステップごとに単一方向で 18 倍の削減を良好なパフォーマンスで取得できるはずです。最終ステップでは、はるかに小さい画像で CPU ベースの迅速な反復処理を行うか、列の最後の数ピクセルをまとめてその列の最終結果ピクセルにするこのシェーダーの微調整バージョンが必要になる場合があります。

OpenGL ES 操作の出力値は、チャネルごとに 0 ~ 255 の範囲しかない色で表す必要があるため、ここで平均化について話していることに気付きました。合計はこれを簡単にオーバーフローしますが、より制限されたダイナミック レンジで、平均を合計の近似値として使用できます。

1 つのカラー チャネルのみを気にする場合は、より大きな値を RGBA チャネルにエンコードし、そのように 32 ビットの合計を維持することができます。

上記で説明したこと以外に、Accelerate フレームワークを使用してこの合計を実行することを検討できます。おそらくシェーダーベースのリダクションを行うほど高速ではありませんが、ニーズには十分かもしれません.

于 2012-10-12T18:16:11.330 に答える