JPEGにおける心理学

 画像ローダやエンコーダなどを作っているので一応JPEGが何をやっているかは一応知っているのでここでは画像圧縮と心理学との関係を説明しようと思う。圧縮技術に於いて動画、画像、音声と言った人間が知覚するためのものには多かれ少なかれ心理学が利用されているのだ。

可逆圧縮と非可逆圧縮

 JPEGは非可逆圧縮である。非可逆圧縮というのは圧縮前と復元後のデータが同一にならない圧縮方法のことである。これは画像が文書などと違い、概ね同じに見えればよいという曖昧性が許されているからである。

 一方、どちらも同じになるものを可逆圧縮と言う。これは通信データやテキストなどの圧縮で行われている。一字一句同じにならないと行けないからだ。この方法で圧縮している画像形式にはGIFやPNGなどがある。

 それでは非可逆圧縮の曖昧性は誰が担保しているかといえば人間である。つまり人間が大体同じと判断できれば非可逆で問題無いわけである。そのため人間が認知できないデータを切り捨てることにより圧縮率を上げるのである。

 要するにJPEGの要は数学ではなく心理学の範疇なのである。この論理は音声圧縮のmp3/aacや画像圧縮のmpegなどでも使われている。特に音声圧縮においては、心理学を利用しない圧縮方法の限界がおおむね1/2なのに対し、心理学を応用することで1/10以下に圧縮可能である。声が聞き取れればよいという条件付きなら1/20以上の圧縮が可能である。文字と言う究極の圧縮方式を採用すれば1/1000以下に減らせる。

 その前に可視光線の範囲に色を削っていたり、デジタル化の時に微少なデータを捨てたり、バイアスをかけたり(ガンマ補正)しているのだがJPEGとは関係ないので取り上げない。

JPEGで使われている2つの視覚認知

 JPEGは知覚心理学(認知心理学)を応用している。あるいは認知科学や知覚科学と言うかも知れない。認知心理学は1956年に生まれた心理学である。その走りの一つは言語を数理モデルに変換するチョムスキー言語学である。そして研究が進むと生物学的知見が必要になっていく。

 ともかくJPEGでは大きく2つの人間の知覚の性質を利用している。1つは「明るさに比べて色の変化に鈍感である」こともう一つは「人間は細かい視覚変化に鈍感」であることだ。

 画像圧縮では単純な性質しか利用していない。目的はあくまでも画像の圧縮であり加工ではないのとJPEGの制約により実装出来ないからだ。

明るさに比べて色の変化に鈍感である

 人の目は明るさに比べて色の変化に対して鈍感なのだ。これを利用することで色情報を間引きすることができる。

 一般的にコンピュータにおける色を表現する方法はRGB形式が一般的である。これは色を赤、緑、青の成分に分割する方式である。しかし実際には他にも色相、彩度、明度であらわすHSV形式やシアン、マゼンダ、黄色、黒で表すCMYK形式(これは印刷に使われる)などがある。ただし、JPEGで使うのはYUVもしくはYCbCrと呼ばれている色空間である。これは色を明るさ(輝度)と青み(青成分)と赤み(赤成分)で分割する方法である。大元はソニーのベータカムで使われていたらしい。この方式がJPEG向きなのはデータの2/3が色情報で構成されていて間引いてはいけない情報である明るさ(輝度)が完全に分離されているからある。

 人間が色の変化に鈍感ということは色データを飛ばしでもよいのだ。そういうわけで色データを一つずつ飛ばして(実際には平均値を取ることが多い)サンプリングする。これにより色データを1/4に減らせる(画像は二次元なので二乗する)。データ量はY=1 Cb=1/4 Cr=1/4になり 計算すると5/12(半分以下)に圧縮されるわけだ。JPEGでは4:1:1、mpegでは4:2:0という間引き方が多いのだが、圧縮率はどちらも同じなる。ここまで間引いても輝度情報に誤魔化されて錯覚して同じ様にみえる訳だ。

人間は細かい視覚変化に鈍感

 細かい視覚変化とは何だろうと考えて、間違い探しが思いついた。人は注意深くみないと変化に気がつかない生き物なのである。人間は画像をみたとき最初に大まかなイメージをつかんでからそこから細部を見ていく様である。注意を向けないような微細な変化に関しては気もとめない。

 JPEGの解説では通常、低周波成分に対して敏感で高周波成分に対して鈍感になると書かれていることが多い。しかし、この言い回しはあまりに直感的に分かりにくい。その理由は数学に引きずられた言い回しをしているからだ。ザックリと言い替えて人間は大雑把な変化に比べて細かな変化に鈍感だと言った方が良い気がする。この人間の視覚特性を考えて微細な変化を切り捨てしまえば、それだけ情報が減る。これがJPEG圧縮の本質的な部分である。

 この処理を行うために前処理としてDCT(離散コサイン変換)が行われる(この部分の説明は数学なので割愛)。DCTを採用した理由はDCTがこの処理に一番都合が良かったからである。

 ただ、これだけでは圧縮率は上がらない。ここからが肝の部分になる。DCTは、この肝の為に行う前処理に過ぎないのである。

 情報量を減らすために人間が気がつきにくい細かい変化(高周波成分)を切り捨てるのである。この処理は量子化と呼ばれている。量子化というとむつかしく聞こえるが実際にやっているのは単なる割り算だ。8x8の量子化テーブルを使い、低周波成分を小さな数で割り、高周波成分を大きな数で割る。ここで重要なのは、割り算により高周波成分の部分を概ね0にすることである。要するに気がつきにくい情報を丸ごと消してしまうのである。さすがにこの割り算の数字を大きくしすぎると原型を留めない汚い画像が出来上がる。そのためこの量子化の数値を多くのJPEGエンコーダーでは品質や画質と呼んでいる。

 これらの途中の計算は、小数点でも整数でも良いのだが最終的には0-255の範囲に丸められる(8bitx3=24bitの色空間の場合)ため、この処理を終えた後は、大抵の場合、0が一番多く、1や2などの小さい数字が大量にならぶことになる。

 そして、この量子化の意味は0を大量に出すことだ。しかも前処理で高周波成分を後ろに固めているので、8x8のブロック、つまり64個の数字の大半が0の連続になることもある。圧縮のアルゴリズムは、同じ数字が多ければ多いほど、連続した数字が多ければ多いほど圧縮がかかりやすいのである。[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]と書くより[1 0x63] と書いた方が短くて済む。このようにしてデータを圧縮するのである(この後ハフマン符号化して圧縮率を更に上げる)。この部分では数学と心理学を利用して圧縮をかけやすくする為の細工を行っている訳だ。

JPEGの弱点

 このような性質をもつJPEGには弱点がある。それは変化の乏しい画像の中の急激な変化に弱いと言う点である。その代表例がアニメ塗りと呼ばれるものである。アニメ塗りは色の変化が乏しく色と色の境で急激な変化が起きるため、その部分の情報まで飛んでしまうのだ。この様な画像では微細な変化が気になるのだ。またグラディエーションなどにも弱くマッハバンドやバンディングノイズと呼ばれる縞模様が出やすい。ここでは心理学でマッハ現象と呼ぶ色境界を強く認識しやすい人間の視覚特性が悪い方向に出てしまう。

 また情報が切り落とされたことにより生じる細かいノイズが気になるケースや誤読する場合がある。二値画像などにも向いていないし、ドットは必ず潰れる。このようなケースでは圧縮率を下げてでもPNGを使うべきだろう。

おまけ

 認知心理学(初心者向け)の本を開いてもこのあたりは書いていない。実装は工学的知見によるのかも。

#情報工学 #画像圧縮 #数学 #心理学 #プログラミング


この記事が気に入ったらサポートをしてみませんか?