内容が古くなっている場合があります。
つい最近もJPEG画像をつくる作業で、きめ細かく変化するグラデーションに段階的に縞(仮に段付きと呼ぶことにする)が発生した。段あるいは縞はRAWデータを調整しているときディスプレイに現れていないし、書き出したTIFF画像にも段付きはない。こうした現象はWEB用のJPEG圧縮や表示サイズを縮小する際に出がちだ。干渉縞とは違うのでモアレではない。
以下の画像は圧縮度を品質優先にしても段付き(縞)が現れた例だ。WEBに例示するにはJPEGくらいしか表現方法がないのでRAWデータを展開したものやTIFF画像の見た目を示せない点はご理解いただきたい。
次に示すのが上掲画像の部分切り出しだ。
わかりやすくするため低品質・高圧縮JPEG画像を例示する。
空のグラデーションに縞が出ているのがわかるだろう。画像下部に描いたB&Wのモノトーンによるグラデーションも同様に縞が出ているし、本来ないはずの赤が浮き上がっている(空にも赤浮きがある)。
切り出したのがこちら。
JPEGは非可逆圧縮なので、圧縮後は元となる画像と一致しない。JPEGにも可逆圧縮が可能なロスレス圧縮の規格があるもののまったくといってよいほど普及していない。なぜなら、画質劣化があったとしても容量を減らしたいがためJPEGで圧縮するのだから、容量を削減しにくいロスレス圧縮は普及しないのだ。
圧縮効率が優れ普及度が高くWEBでも使い勝手がよいとしても、非可逆圧縮圧縮で元画像との違いが大きい点は写真・画像の品質を気にするケースではデメリットになる。
JPEGのメリットとデメリットを知るには、JPEGとは何者か知る必要がある。
デジタルで扱う写真画像はRGB(赤・緑・青)の三原色データで表現されるが、JPEGで圧縮するときYCrCb方式に変換して輝度・赤方向の色相・青方向の色相の三要素にする。
YCrCb方式に変換した画像は、8pixel四方(8×8)を1ブロックとする単位で圧縮される。
人間の視覚は輝度の変化には敏感でも色相の変化には鈍感なので、JPEG圧縮時の色相のサンプリングは1pixelおきに間引いたものを使う。輝度情報より色相情報が少なく取得されている。
ブロックごと8×8=64pixelのデータを周波数分解(フーリエ変換)する。このとき高周波の細かな変化は人間には感じ取れない、感じ取れたとしても影響は微々たるものとされ、輝度、色相、彩度の細かな変化は省略される。これで64pixelの値は64段階の周波数成分に分解される。
データを整数で割って端数を端数を切り捨て、小さな誤差を省略して、データを量子化する。
この後、8×8の1区画内をジグザグスキャンしてデータを一列に整列させ、エントロピー符号化(圧縮)する。
こうして得られたJPEGは圧縮率が高いだけでなくフルカラーが扱えるため写真向きだ。しかし後述するデメリットが存在している。
JPEG圧縮では画像に特有のボケ(シャープネスが失われ陰影の境界が曖昧になる)やモスキートノイズ、ブロックノイズが発生するが、圧縮後の状態をプレビューしながら作業できる環境がほとんどだろうから圧縮率を調整して劣化を許容できる範囲に収めるのは難しくない。
階調表現に現れる段付き(縞)もプレビューしながら圧縮率を探れば度合いがわかるのだが、画質優先の低圧縮にしても回避できない場合があるのがやっかいだ。
段付き(縞)によって階調表現が不自然になるのは、低コントラスト化(コントラストの幅を広く取ってゆっくり輝度を変化)させたケースに多い。
ここで「コントラスト」とするものが何か定義しておく。
真っ黒から真っ白まで均等に推移する階調があるとする。以下の模式図のA、B、Cはどれも真っ黒から真っ白まで均等に推移しているが、幅の違いによって階調推移がゆっくりになったり急激になったりしている。
RAW現像ソフトや画像修正ソフトで「コントラストを低くする、高くする」と呼ぶ操作は、元になる階調が上図Aであったとしたとき「コントラストを低くする」ならB、「高くするなら」Cのような見かけにしている。
実際には画像の幅を変えている訳ではないが、コントラストの高低を考えるとき「コントラストの違いとは階調推移がゆっくりか急激かの差」で、グラデーションが描かれた幅広のゴムベルトを伸ばしたり縮めたりしたときの変化のようなものと解釈すると理解しやすく実作業に利用しやすい。
コントラストが高い状態とは階調が間引かれているとも言える。真っ黒からはじまって値0、1、2、3、4、5……と推移していたものを値0、5、10、15、20、25……のように変化させたり、もともと値0、5、10、15、20、25……のような画像はコントラストがより高く見える。
これを極端にするなら、真っ黒から真っ白への推移を16値、8値、4値、(真っ黒と真っ白のみの)2値にすることもできる。これで明暗の推移が極端であることと、階調が間引かれることの関係が理解できるだろう。
JPEG圧縮は元になる画像のデータを間引いて容量を減らしている。
JPEG圧縮のデータの間引きかたは、階調(輝度)推移がゆっくりした情報量が多いコントラストが低い画像で弊害が現れやすく例示したような段付き(縞)状になりやすい。
またフルカラーの写真・画像では輝度の変化だけでなく色相の変化も相まって階調が推移しているので、色相情報をより多く間引くJPEG圧縮では圧縮後の輝度の変化と色相の変化のバランスが崩れやすい。
前述のように輝度情報より色相情報をより多く間引き、高周波の細かな変化も省略して丸めているのが、こうした変異に影響しているのではないだろうか。
この現象は色深度(bit数)が多い画像から8bit化する際に発生するとも疑ったが、8bitのJPEGで発生する劣化が、圧縮方式が違い可逆圧縮の8bitのTIFFでは発生しないのでJPEG固有の問題としてよいと思う。
段付き(縞)は圧縮率を低く(低圧縮に)しても発生する場合があるので、回避するには元画像やJPEG圧縮用の素材をつくる際は表現意図に反しない範囲でコントラストを高めにするほかない。そのほか「ぼかし効果」を加えて段付きを目立たなくする方法もあるが、元画像と印象が変わるため使い所が難しい。
私はテーマごとRAW現像用レシピを用意しているが、レシピの多くは現像開始時にデフォルト状態から[トーンカーブ]を逆S字にして応答特性(ガンマ値)を穏やかにしたうえで更に[コントラスト]を低くしている。これは出発点で階調の幅を広く取り、輝度の微妙な変化を含んだ画像にしておき、この後に加える部分補正の可変幅を広くするためだ。
冒頭で例示した写真もまた、逆光、濃度が高い空、岩場とハイコントラストに見えるかもしれないが、上記した方法で階調の幅を広く取って実現している。
JPEG化で段付き(縞)が出た空は、太陽の白とびを最小限にしつつもっとも明るい領域にある白い雲がギリギリ白とび未満になるようにしたかったし、明るい領域からぐっと落ち込む周辺部への変化も極端なものにしたくなかった。
JPEGの段付き(縞)現象を避けるため、現像の最終段階でどこまでコントラストを上げられるか慎重に調整したが、空の表現で許せるのが前掲の画像の状態ままでだった。結果としてJPEG化で段付き(縞)が発生した。
JPEG化で階調表現に段付き(縞)を生じさせないようにするには、表現意図をどこまで妥協できるか自問自答して、現実と折り合いつけるほかないのが現状と言える。
(JPEG規格は1992年に最初のリリースが行われた、いまとなっては古びた画像形式だ。WEBの普及とともにWEB用フルカラー画像形式として定着したため、より新しく効率よくノイズが少ない見た目が優秀な画像形式が誕生しても一般化できないまま時代が経過した。そろそろJPEGは引退して欲しいと言い続けて10年以上経過したが、写真と相性がよかったのは2000年代初頭までで現在はどう考えても写真向きでないのをわかっていただけだと思う)
© Fumihiro Kato.
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited. All Rights Reserved.