madVR 0.90.10 のditheringのテスト
以前に誤差拡散法(error diffusion)について否定的であると書いたが、本当にそう考えてたので、テストするまでに2年も経ってしまった。
テストに使う映像は、720×480を1440×1080にアップスケーリングした物。

(上の画像はブログに載せる為に1/10にしてます)
これはアップスケーリングによって、小数点以下の値が出るので、ディザリングの効果が出やすいと考えた為。
まずはディザリング手法を切り替えて、画像の一部で効果を見る。

上はdithering:noneでの物。
このままだと判りずらいので、CGツールを使ってコントラストを上げる。

これで判り易くなった。
以下、他の手法を使った時の画像。
random

ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

none & artifact removal(deband)

ついでにdithering:noneで、artifact removalを有効にした時もテストした。
面倒なので、以後はartifact removalの事を、一般的に使われている用語のdebandと書く。
デバンドとディザリングは同じような手法で実現していると何処かで読んだので、代わりに使えるのではと前から考えてたのだが、思った通り似た効果がある。
というかどの手法も、効果に大きな違いが無いように見える。
次は各手法を使う事で画像全体にどれだけ変化が起きるかを調べた。
元画像(上のテストと同じ物。以下ブログに載せる為に1/10にしてます)

これにrandomを掛けた画像と、noneの画像を、CGツールで「差の絶対値」を取った物が以下。

真っ黒。
差分画像の輝度値は最大2しか無い(輝度値1以下のディザノイズを加えてる)。
これをCGツールで、差を64倍に拡大する。

これで画像の変化が見えるようになった。
以下、他のディザリング手法で同じ事を行った物。
ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

none & deband

下に行く程画像が暗くなっていくのが判ると思う(画像を別タブで開いて切り替えて見ると判り易いです)。
暗いという事はnoneとの差が少ないという事だ。
noneの画像は、RGB16bitの内部バッファの画像と、各画素で±0.5以下の違いが出る。
ディザリングすると、ディザノイズが各画素に乗るので、RGB16bitの内部バッファの画像と、各画素で±1以下の違いが出る。
noneの方が画素単位でみると元画像に近い事に意外と感じるかもしれないが、ディザリングは局所的にはノイズが増えるが、全体的には元画像に近くなるという処理なのだ。
つまり簡易的な判断方法として、noneとの差が少ない事で、ローノイズだと判断出来る。
従って、暗い画像になる程ローノイズなので、madVRの説明通り、ノイズの量は、random>ordered>error diffusionなのが、このテストで確認出来た。
error diffusion1、error diffusion2、colored noiseのチェック有り無しによる差が確認出来ないのは、noneの画像の誤差(±0.5以下)の為だと思う。
noneの画像の誤差であやふやになり、僅かの差は確認出来ないのだろう。
この辺はmadVRの説明通り、error diffusion2が一番低ノイズだと信じればいい。
デフォルトがcolored noiseのチェック入りなので、このチェックもそのままで良いだろう。
ただし見て判る差では無いだろうから、error diffusionの中で一番負荷が低い物を選んでも別に構わないだろう。
そしてdebandだが、興味深い結果が出てる。
error diffusionよりもnoneとの差が少ない。
デバンドはバンディングを消すのが目的の処理な為、画像に対して最小限の変更しかしない事が、error diffusionよりもnoneとの差が小さい理由かと思われる。
しかしディザリングと似た効果を出す事は、最初のテストからも、この差分画像テストからも判る。
別の映像を使って追加テストする事にした。
元から1920×800の画像を使って、noneとの差を取って、差を85倍に拡大した。
(64倍だと差が少なくて暗かった)
元画像(以下ブログに載せる為に1/10にしてます)

random

ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

deband

randomからerror diffusion2までは白黒の絵での結果と同様になった。
debandは元の絵と相関があるのが判る。
そしてやはりnoneとの差が一番少ない。
debandをditheringの代わりに使う事を考えてみる、
利点:ローノイズ、error diffusionよりも負荷が軽い。
欠点:正確な輝度、色再現という面では、後退する。
debandは使ってみる価値があると感じたので、ditheringをnoneにして、debandにチェックを入れてしばらく使ってみる事にした。
色々見ている最中だが、色乗りが良くて、透明度が高く、抜けが良い画質に感じる。
ちょっとノッペリしてるか?と思ってdebandを切って、ditheringのチェックを入れて見直してみると、元々そういう映像で、debandの影響ではないという事が何回かあった。
今の所はノッペリしてると感じたりするのは、気にし過ぎから来る物という結論になってる。
アニメがメインの人はdebandを使う設定が常用で何も問題無いと思う。
実写メインの人はerror diffusionを使えばいいし、それが使えない環境なら、orderedを使えばいいだろう。
興味があるならdebandを試すといい。
テストに使う映像は、720×480を1440×1080にアップスケーリングした物。

(上の画像はブログに載せる為に1/10にしてます)
これはアップスケーリングによって、小数点以下の値が出るので、ディザリングの効果が出やすいと考えた為。
まずはディザリング手法を切り替えて、画像の一部で効果を見る。

上はdithering:noneでの物。
このままだと判りずらいので、CGツールを使ってコントラストを上げる。

これで判り易くなった。
以下、他の手法を使った時の画像。
random

ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

none & artifact removal(deband)

ついでにdithering:noneで、artifact removalを有効にした時もテストした。
面倒なので、以後はartifact removalの事を、一般的に使われている用語のdebandと書く。
デバンドとディザリングは同じような手法で実現していると何処かで読んだので、代わりに使えるのではと前から考えてたのだが、思った通り似た効果がある。
というかどの手法も、効果に大きな違いが無いように見える。
次は各手法を使う事で画像全体にどれだけ変化が起きるかを調べた。
元画像(上のテストと同じ物。以下ブログに載せる為に1/10にしてます)

これにrandomを掛けた画像と、noneの画像を、CGツールで「差の絶対値」を取った物が以下。

真っ黒。
差分画像の輝度値は最大2しか無い(輝度値1以下のディザノイズを加えてる)。
これをCGツールで、差を64倍に拡大する。

これで画像の変化が見えるようになった。
以下、他のディザリング手法で同じ事を行った物。
ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

none & deband

下に行く程画像が暗くなっていくのが判ると思う(画像を別タブで開いて切り替えて見ると判り易いです)。
暗いという事はnoneとの差が少ないという事だ。
noneの画像は、RGB16bitの内部バッファの画像と、各画素で±0.5以下の違いが出る。
ディザリングすると、ディザノイズが各画素に乗るので、RGB16bitの内部バッファの画像と、各画素で±1以下の違いが出る。
noneの方が画素単位でみると元画像に近い事に意外と感じるかもしれないが、ディザリングは局所的にはノイズが増えるが、全体的には元画像に近くなるという処理なのだ。
つまり簡易的な判断方法として、noneとの差が少ない事で、ローノイズだと判断出来る。
従って、暗い画像になる程ローノイズなので、madVRの説明通り、ノイズの量は、random>ordered>error diffusionなのが、このテストで確認出来た。
error diffusion1、error diffusion2、colored noiseのチェック有り無しによる差が確認出来ないのは、noneの画像の誤差(±0.5以下)の為だと思う。
noneの画像の誤差であやふやになり、僅かの差は確認出来ないのだろう。
この辺はmadVRの説明通り、error diffusion2が一番低ノイズだと信じればいい。
デフォルトがcolored noiseのチェック入りなので、このチェックもそのままで良いだろう。
ただし見て判る差では無いだろうから、error diffusionの中で一番負荷が低い物を選んでも別に構わないだろう。
そしてdebandだが、興味深い結果が出てる。
error diffusionよりもnoneとの差が少ない。
デバンドはバンディングを消すのが目的の処理な為、画像に対して最小限の変更しかしない事が、error diffusionよりもnoneとの差が小さい理由かと思われる。
しかしディザリングと似た効果を出す事は、最初のテストからも、この差分画像テストからも判る。
別の映像を使って追加テストする事にした。
元から1920×800の画像を使って、noneとの差を取って、差を85倍に拡大した。
(64倍だと差が少なくて暗かった)
元画像(以下ブログに載せる為に1/10にしてます)

random

ordered

error diffusion1

error diffusion1 (colored noiseのチェック無し)

error diffusion2

error diffusion2 (colored noiseのチェック無し)

deband

randomからerror diffusion2までは白黒の絵での結果と同様になった。
debandは元の絵と相関があるのが判る。
そしてやはりnoneとの差が一番少ない。
debandをditheringの代わりに使う事を考えてみる、
利点:ローノイズ、error diffusionよりも負荷が軽い。
欠点:正確な輝度、色再現という面では、後退する。
debandは使ってみる価値があると感じたので、ditheringをnoneにして、debandにチェックを入れてしばらく使ってみる事にした。
色々見ている最中だが、色乗りが良くて、透明度が高く、抜けが良い画質に感じる。
ちょっとノッペリしてるか?と思ってdebandを切って、ditheringのチェックを入れて見直してみると、元々そういう映像で、debandの影響ではないという事が何回かあった。
今の所はノッペリしてると感じたりするのは、気にし過ぎから来る物という結論になってる。
アニメがメインの人はdebandを使う設定が常用で何も問題無いと思う。
実写メインの人はerror diffusionを使えばいいし、それが使えない環境なら、orderedを使えばいいだろう。
興味があるならdebandを試すといい。