プレーンな C++ を使用してシームレスにブレンドするための画像ブレンド メソッドを実装しました。次に、このコードを GPU 用に変換します (モバイル デバイス用の OpenGL ES 2 シェーダーを使用)。基本的に、この方法では、各画像に対してガウス ピラミッドとラプラシアン ピラミッドが作成され、低解像度からトップに結合されます (Burt et.al. 1983 の論文「The Laplacian Pyramid as a Compact Image Code」も参照)。
私の問題は、ラプラシアン ピラミッド レベルが負の値を持つ可能性があることですが、私のデバイスは float または integer 型のテクスチャをサポートしていません (ORB_texture_float 拡張などを使用)。
GPU ベースのピラミッドを扱った論文を既に探しましたが、本当に役に立つものは見つかりませんでした。
- このようなピラミッドを GPU に効率的に実装するにはどうすればよいですか?
- 前のレベルを反復せずにガウス/ラプラシアン ピラミッド レベルを計算することは可能ですか?
よろしく、
EDIT 符号付きタイプ (ARB_texture_float など) またはより大きいタイプのいずれかをサポートしない 2 つのパス (符号用、値用) を使用する場合を除いて、GPU 上でラプラシアン ピラミッドを完全に計算する「良い」方法はないようです。画像のデータ範囲が [0..255] の間の場合のバイト。私のラプラシアン ピラミッドは、ARB_texture_float 拡張機能を備えた GPU で完全に動作しますが、拡張機能 (および範囲を圧縮するための調整) がないと、範囲圧縮のためにピラミッドが「間違った」ものになります。