2012-10-02 18 views
12

私はカメラアプリを作っています。このアプリはユーザーにいくつかのフィルタを提供します。現在のところ、私のコードはNDK上にあり、うまく動作しますが、少し速くしたいのです。それはGPUのようで、OpenGL Es 2.0は道のりです。 GPUの私の唯一の懸念は、メモリの制限だということです。現代のカメラは5〜10枚の画像を撮るので、GPUのメモリ制限はそれよりはるかに小さいです。私はその限界を回避する方法があるのだろうかと思っていた。私には唯一の論理的な選択肢は、画像をより細かく分割してからGPUで処理し、最後に最終画像にアサンプルすることです。私の質問は、もしこのアプローチがまだパフォーマンスには良いのであれば、モバイルGPU上で高解像度の画像を画像処理するための他の選択肢もあります。GPUでの高解像度画像処理のためのGPUのメモリ制限を処理する方法は?

編集:画像処理にGPUを使用して、結果を画面に表示しないことを明確にする必要があります。別のテクスチャにレンダリングしてディスクに保存します。

+1

本当にあなたがしようとしていることに依存します。 GPUが提供するメリットは、それらが高度に並列であることですが、単純にコアを追加するだけで、すべての問題を容易にすることはできません。 – thecoshman

+0

私は一般的な問題を解決したいと思っていましたが、現在はCPU上で実行されると非常にコストがかかる「laplacian pyramid」をコード化しようとしています。 – dirhem

+0

まあ、イメージに色合いをつけるなど、すべてのビットに同じ操作を適用したい場合は、GPUにロードすることが明らかです。画像のぼかしなどのタスクは、各ピクセルの新しい値がピクセルの範囲に依存するため、少しトリッキーです。あなたのケースでは、ハードウェア間の多くの違い、例えばサポートするラムの量、テクスチャの大きさ、データの量などを考慮する必要があります。彼らはOpenCLスタイルの処理を行うことさえできないかもしれません。 – thecoshman

答えて

2

リコー2A03が1.79MHzの任天堂エンターテインメントシステムのため、あなたのタイリングアイデアが使用されています。これは良いアプローチです。 Googleでは地図表示を管理するためにタイリングを使用していますが、Crysisなどのゲームでもほとんどのテクスチャのテクスチャサイズは1024x1024(1メガピクセル)に制限されます。また、10メガピクセルには30メガのRAMが必要なため、ソースやデプステクスチャを使用すると60メガバイトのRAMが必要になるため、デバイスによっては問題が発生することがあります。

テクスチャのサイズは、2の累乗(2,4,8,16,32,64など)を使用する傾向にあることに注意してください。少なくとも、あなたがそれを切り刻んで画像を並べ替えると、より良い品質を得ることがあります。

2

は、このような表示がない(または私たちの間で普及していないかもしれないが)10 mp画像にリアルタイムフィルタを適用する必要はありません。 :)

したがって、表示されているピクセル(1900x1280?)にフィルタを適用するだけで済みます。 上記のタイル張りテクニックは、いくつかのシナリオではまだ使用されています。遅延レンダリングはそのような例です。 X-Box 360は、日常的に両方の技術(遅延したタイリング)を採用していました。タイル張りなしでは、遅延技法のための高いメモリ要求のために不可能であろう。

+0

私は画面上に画像をレンダリングするためにgpuを使用しないことを明確にするために質問を編集しました。私は画面とその解決策とは全く関係がありません。画像処理はバックグラウンドで行われ、画面にはプログレスバーのみが表示されます。だから、GPUのメモリ制限はまだ私のためにあります。 – dirhem