Floyd -Steinberg Dithering Pixel Shaderの代替品
-
27-09-2019 - |
質問
そんなこと知ってる フロイド - スタインバーグディザリング アルゴリズムは、そのアルゴリズムが厳密に連続的であるため、ピクセルシェーダーでは実装できません。しかし、多分、視覚的な出力がフロイド・スタインバーグアルゴリズムに似ているいくつかのhigly平行なディザリングアルゴリズムが存在するのでしょうか?
質問は、ピクセルシェーダー(できればGLSL)に実装するのに適したディザリングアルゴリズムとは何ですか?
ところで。マルチパスアルゴリズムは、2パス以下になり、それらのパス間のCPUオーバーヘッドが小さいまで許可されます。
何か案は ?
編集:
24ビットの色から21ビットの色までのディザリングが必要です。
(つまり、8ビット/チャネルから7ビット/チャネルに変換する必要があります。)
編集2たぶん私は問題をあまりよく説明していません。それで、私は正確な問題について少し拡大しようとします。問題はこれです - 私たちがこの写真を持っていると考えてください:
上に写真がありますが、ディザリングアルゴリズムで処理されています。
これは、あなたのディザリングが私にとって良いかどうかをテストする手順です:
1.これらの写真をPhotoshopに2層の1つの写真としてロードします。
2.レイヤーブレンドモードを「差」に選択します。
3.レイヤーで「可視」操作を「マージ」して、1つのレイヤーのみを取得します。
4.操作を実行=>>画像/調整/イコライズ
その後、あなたはそのようなイメージを取得する必要があります:
ご覧のとおり、モノトーンの赤い色であった中央のピクセルはまったくディザリングされませんでした。また、左右の画像ゾーンのディザリングは少し異なります。そのような動作でディザリングアルゴリズムを再構築してみてください。
解決
8ビットから7ビットに減少する場合、ほとんど情報を捨てていません。あなたもあなたがディザルする必要さえ必要ですか?
むさぼりする必要がある場合は、ランダムなノイズを追加してからクリップすると、アプリケーションに適しています。
他のヒント
使用することができます 注文したディザー. 。フロイド・スタインバーグよりも粗く見えますが、ピクセル間に依存関係はありません。
編集: あなたは一つしか削除しないので、これはほとんど些細なものになります。注文されたディザーの背後にある原則は、遷移しきい値にバイアスをかけるパターンを作成することです。この場合、バイアスは0または1で、パターンは2x2ピクセルになります。これらの2つの変更により、パターンはウィキペディアの記事のパターンよりもはるかに不快になります - フロイドスタインバーグよりも好きなかもしれません。
ここにいくつかの擬似コードがあります:
bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e
編集2: これが私の違いの結果です。 7ビットの値を8ビットにマップする方法がわからない場合は、うまくできません。