画像に「ぼかし」を入れたとき、色と色の境界部分が2つの色の中間色ではない異なる色合いで表示され、違和感をおぼえることがあります。これは画像処理専門の画像編集ソフトで「ぼかし」を入れる場合でも、ソフトによっては起こりうることで、ソフトウエアに実装されているぼかしアルゴリズムが根本的に間違っているのが原因だとのこと。YouTubeで物理関連のムービーを多数公開しているminutephysicsチャンネルのムービーで、どのように間違っているのか、わかりやすく解説されています。

Computer Color is Broken - YouTube

カラフルな画像に「ぼかし」処理を加えた場合、現実の世界では起こりえない、色と色の境界部分に奇妙な影が表示されることがあります。





この問題は、画像の「ぼかし」に限らず、半透明な線を描いた時も、色と色の間に奇妙な影が映し出されることも。



この醜い影が発生するには、理由があります。



この問題を理解するには、まず「目がどのようにして明るさを感じるか」を知る必要があります。



たとえば、暗闇の中に1つの光があるとします。



2つなると、変化に気づきますが……



101個の光が102個になっても、変化に気づくのは容易ではありません。つまり、人は暗いシーンの相対的な明るさの違いを判別することは得意ですが、明るいシーンで同じ違いを見いだすのは苦手なのです。





一方、コンピューターは、周囲の状態に関係なく、輝度の増加量を測定でき……



画像を保存するときは、画像内のすべての座標で赤・緑・青の輝度値を記録します。



基本的に「0」は0%の輝度を示し、「1」は100%の輝度を示します。



では、輝度「0.5」は半分の明るさですか?



人間の目には中間の明るさに見えるかも知れませんが、それは明るさの対比で「そのように」見えるだけです。実際は22%程度の明るさしかありません。



頭がおかしくなるかも知れませんが、輝度「0.25」は5%の明るさしかありません。



なぜこうなるかというと、デジタルカメラが画像を撮影すると、画像内の輝度値をそのまま保存せず、ルートの値で保存しているからです。



これは画像を保存するときに、ルートをとることで、輝度が低く、画像の暗い部分の変化に対して、重点的にデータ量を使用し、明るい部分に対しては、データ量を少なくしています。こうすることで、暗い部分の明るさの変化に強い、人間の視覚特性を摸倣しつつ、ディスクスペースも節約できるので、一石二鳥というわけです。



そして、画像をモニターに表示するときは、画像内の輝度値を2乗するだけ。



画像を編集しなければ、これで問題はありません。しかし、画像に「ぼかし」を入れる場合、各ピクセルとその周囲にあるピクセルの平均の色に置き換える必要があります。



アルゴリズムは何も難しくありませんが、どの時点で平均を取るかで結果が変わってきます。たとえば、デジタルカメラで撮影し、画像として保存する直前に「ぼかし」を入れるのであれば、この方法で問題ありません。



しかし、画像ファイルを編集するタイミングで行うと、各ピクセルの輝度はルートの値で保存されているため、この値をベースに平均を取ると結果は変わってしまいます。さらに残念なことに、大多数のソフトウエアがこれを行ってしまっているのです。



たとえば、赤と緑の境界線にぼかしを入れるとき、中央部分は「半分の赤」と「半分の緑」になるはず。



しかし、画像ファイルは輝度をルートで保存しているので、単純にこの数式で計算すると、著しく輝度の低い値が出てしまい、暗くなります。



醜い影を避けるには、事前にルートを2乗することで元の値に戻し、平均化すれば良いだけです。



しかし、OSから画像編集ソフトまで大多数のソフトウェアは醜い手段で「ぼかし」を行っています。



さらに一部の画像編集ソフトでは、数学的にも一切誤りのないアルゴリズムを使用できるにもかかわらず、デフォルト設定となっていないそうで、この取り扱いは理解できないと批判されています。