自作カメラもいいものだ
即興で作った自作カメラだが、意外と街に馴染んでいた。右手で持って、背面の液晶を見ながら人差し指でシャッターを押せれば、それは立派なカメラなのである。
デジタル写真は、JPEGという規格で圧縮されている。圧縮率を高めれば高めるほど、当然ながら画質は悪くなっていく。とはいえ、普段ネットなどで見ている画像は、画質が悪くなりすぎないよう、ほどほどの圧縮率に抑えられている。
そのリミッタを外したとき、真の圧縮画像が姿をあらわすのだ。見せてもらおうじゃないか、JPEG圧縮の限界とやらを。
JPEGという画像圧縮の規格がある。人間の目には感じにくい情報を削ることで、画質をほとんど変えずにファイル容量を小さくする技術である。
当然ながら、画質と容量はトレードオフの関係にある。高画質を維持すればするほど容量は減らないし、逆に画質劣化を許容すれば、大幅に容量を減らすことができる。
一般に圧縮率を高めるとノイズ(ブロックノイズやモスキートノイズ)が目立つようになる。文字で表現すると「ガビガビ」で「イガイガ」な写真ができあがる。見た目にも汚くなるので、ここまで圧縮する人はあまりいないだろう。
だが、しかし! この程度の圧縮なんて生ぬるい。実に生ぬるいのだ。
さらに圧縮しようとすると、「画質が悪くなりすぎるわりに、容量削減の効果が薄い」という領域に達する。要はまだ圧縮しようと思えばできるけれど、あんまりやる意味がないので、バランスを取ってこの程度でやめているのである。
でも気になる。限界まで圧縮すると、どんな画像が出現するのか。
普通のソフトではそんな設定にはできないので、何とか限界まで圧縮できる方法を探ってみた。……とその前に、まずはJPEGの画質を決めるパラメータについて少し理解を深めておきたい。
JPEGの画質は、パラメータをいじって調整できる。例えば、ほとんどのレタッチソフトでは、画像を保存するときに画質設定のダイアログが出るだろう。
この設定を変えると圧縮率が変わるのだけど、もう少し具体的に言うと「量子化テーブル」という圧縮率を決めるパラメータが変わっている。
量子化テーブルには計64個のパラメータがあり、それぞれに1~255の値が入っている。ざっくり言うと、この値が小さいほど画質が良く(=圧縮率が低く)、値が大きいほど画質が悪く(=圧縮率が高く)なる。
なんで64個もあるのか、というのを説明するとややこしくなるので、ここでは「そんなもんだ」ということでOKである。なんとなくグラフの「山が低ければ高画質」、逆に「山が高ければ低画質」というのを覚えておいて欲しい。
山が険しければ険しいほど、登るのに体力を消耗して画質が劣化する、というのを頭の中でイメージすればいいかも。
実際に「Photoshop」で画質設定を変えると、この量子化テーブルが変化している。確認してみると……
山が高い最低画質の量子化テーブルを使うと、先にお見せしたような「ガビガビ」の画像になる。
でもグラフをよく見て欲しい。縦軸の目盛りが100までしかないことから分かるように、取り得る値が1~255までとは言っても、実際は100未満の値しか使われていない。
そういうことなのだ。つまり量子化テーブルの山を高くするほど画質は悪く、圧縮率は高くなるのだが、現実的に使える値はこの程度までなのである。
「JPEGはまだ本気を出していない」という意味が分かってもらえただろうか。一般に画質が悪いと言われている圧縮率であっても、パラメータが取り得る値としては十分な余裕があるのだ。
これが分かってくると、「じゃあ量子化テーブルの山をもっともっと高くすると、どんな画質になるのか?」という疑問がわいてくるのも必然であろう。登山家が山頂を目指すように、私の興味も高い山(量子化テーブル)へと向かっていった。
実用に耐えなくてもいい。JPEGにはまだまだ圧縮の余地があるはずだ。がんばれがんばれ。そういう気持ちなのである。
パラメータにはまだまだ余裕があると言っても、そんな圧縮ができるソフトなんて存在しない。先に紹介した「Photoshop」の最低画質ですら、かなり攻めた設定なのである。
「もうJPEG圧縮ソフトを自作するしかないかなぁ」と考えていた矢先、ラズパイ(Raspberry Pi)を使えばできることに気が付いた。というより別のことをしているときに偶然発見した。思わずアルキメデスよろしく「エウレカ!」と叫びたくなってしまった。
(詳しい方に向けて書くと、PicameraのAPI ”capture”の引数で、”quality=1”にするとできます)
理論的には、明るさ成分(輝度)は8x8ピクセル、色成分(色差)は16x16ピクセル単位でほぼ塗り潰されてしまうため、パッと見た感じはドット絵である。色ズレも起きていて、これはこれで味わい深い。
でも薄目でみると、それなりに元の雰囲気を残している。不思議な写真である。
いままでの山とは比べものにならない高さだ。エベレストともちょっと違う。全体が浮き上がっているため、天空の城みたいな雰囲気になっている。
JPEGの規格上、これ以上は圧縮しようがないという限界値である。さすがに画質は見るに耐えないが、期せずして謎のポップさが露呈している。何かしらのフィルタ効果をかけたような見た目であるが、断じてそうではない。ただ限界までJPEG圧縮しただけである。
このカメラをたずさえて、旅に出てみることにした。
という感じだったのである。途中で何やらさっぱり分からない画像が混じっているし、やたらサウンドノベルゲームっぽくなってしまったが、JPEGの圧縮率がMAXなので仕方ない。心の目で見るんだ。
最低画質(最高圧縮率)の写真を見ると、とても実用には耐えない画質であることが分かる。「Photoshop」が対応していないのも納得である。
逆にこれができてしまうラズパイ(Picamera)は、一体どうしてしまったのだろう。設定できるように実装した作者の方は、こんな風に誰かが気付いて使かってくれるのを期待していたのかもしれない。もしそうだったら大変おもしろい。
ちなみにファイル容量はというと、掲載してある640x480サイズの場合、正味6キロバイト程度まで圧縮できている(※)。記事中に写真をいっぱい載せているけれど、いわゆる「ギガ」にはやさしい。意外とウェブ向きかもしれない、と一瞬思ったが、たぶん違うな。
※初出時に「通常のJPEG写真の半分以下になった」と書いていましたが、実際にはJPEGファイル内に24キロバイト固定のサムネイル画像が埋め込まれており、それが容量の大部分を占めていました。サムネイルを除くと、正味の圧縮データは約6キロバイトです。お詫びして訂正します。
即興で作った自作カメラだが、意外と街に馴染んでいた。右手で持って、背面の液晶を見ながら人差し指でシャッターを押せれば、それは立派なカメラなのである。
▽デイリーポータルZトップへ | ||
▲デイリーポータルZトップへ | バックナンバーいちらんへ |