JPEG
じぇいぺぐ
JPEG(ISO/IEC JTC 1/SC 29/WG 1、Joint Photographic Experts Group)とは、1986年に創設されたJTC 1とITU-T(国際電気通信連合電気通信標準化部門)の協同による標準化組織の略称。また、この団体が国際標準として策定した静止画像をデジタルデータとして符号化する方式のひとつである。
拡張子は .jpg が多く使われているが、 .jpeg 等が使われる場合もある。なお、JPEGの母体の一つであるJTC 1自体も国際標準化機構(ISO)と国際電気標準会議(IEC)の協同で設立されたジョイント組織であるが、ISOやIECとは自立した組織として運営されている。
1992年にリリースされ、インターネット上で使われる画像フォーマットとしてはGIF(1987年公開)に次いで古い。枯れきった技術であることから非常に取り回しが楽で、どんな画像でもそこそこ見られる程度に圧縮できる。このことから、現在でもネットやデジタルカメラなどあらゆる場面で使われている。
しかしながら、非可逆圧縮であるため、JPEGに変換したデータを完全に元データと同一のものに復元することはできない。そのため、何度も編集して上書きを繰り返したりするとノイズが出るなどして画像の劣化が激しくなる。
輪郭線のはっきりしたアニメ絵など、色の境界がくっきりしている画像を圧縮すると、境界付近にノイズが目立ちやすい特徴がある。さらに、白黒やグレースケールなど色数が少ない画像を圧縮してもサイズがそれほど小さくならず、圧縮率を極端に上げると、有り得ない色(「偽色」と呼ばれる)が出ることがある。そのため、こうした画像に対してはGIFやPNGなどを使用したほうがよい。
その反面、写真や水彩画調のイラストなどのフルカラー画像では、PNGなどよりもJPEGで保存(圧縮)した方が軽量となる。
またJPEGはアルファチャンネルを持たないので背景を透明にすることができず、背景を透けさせたいロゴやイラストなどにはPNGやGIF、もしくはWebPやAVIF、あるいはHEIF(HEIC)を使う必要がある(JPEG 2000でもよいが対応しているブラウザが少ない)。
1990年代のインターネット普及初期から、GIFとともにWebで盛んに使われた。1999年にGIFの特許問題がクローズアップされると、(GIF代替のPNGではなく)JPEGのみを使うWebサイトも相次いだ。
その後、WebではPNGも普及したものの、同時期に普及したデジタルカメラではJPEGが標準的なフォーマットとして広がり、WebPやHEIFなどの次世代を謳う競合規格が登場した現在も、デジタル写真の標準フォーマットとしての地位は揺らいでいない。
先に「非可逆圧縮」と書いたが、一応規格上は可逆圧縮のJPEG(Lossless JPEG)も定められている。しかし、可逆圧縮のJPEGとは全く圧縮原理が異なる別物であり、これが使われることはまずない。
デジタルカメラで撮影されたJPEG画像は、Exif(Exchangeable image file format)というメタデータが埋め込まれている。GPSを内蔵したカメラやスマートフォンではこのExifデータに撮影場所(ジオタグ)を埋め込むことができる。このせいで思わぬところから個人情報がダダ漏れになる可能性があるので注意(iPhoneではネット上への投稿の際ジオタグを削除する仕様になっているが)。
JPEGは今となっては古いスタンダードであり、後継規格としてJPEG 2000(2000年策定)およびJPEG XR(2009年策定)を標準化したが、いずれも当初の期待ほど普及していない。JPEG 2000は映画の編集や画像のアーカイブ、防犯カメラなど業務用途ではよく使われるが、一般の人が見かけることはあまりないであろう。2018年にJPEGが定めた新しい画像フォーマットであるJPEG XSは従来のJPEGの後継ではなく、ストリーミング配信に特化した規格として企図されている。
JPEGは次世代画像フォーマットの決定版としてJPEG XLの策定を進め、2022年までに正式に標準化された。三度目の正直として普及するか否か注目される。
JPEGの圧縮は次のように行われる。
前処理
色空間をYCrCb(Y=明るさ、Cr・Cb=色成分)に変換する(あるいはCMYKもある)。この際2つのCについては縦横1/2や横のみ1/2に間引くことが一般的。これをカラーサブサンプリングなどと呼ぶ。これによりベタ塗りの絵では色にじみが発生するため、画質を保ちたい場合はカラーサブサンプリングをしないようにするとよい。
画像を8×8のブロックに分割する。8×8に足りない部分は適当に埋める。
周波数領域に変換
離散コサイン変換(DCT)を行い、画像を周波数領域に変換する。
これにより8×8個の明度/色強度データは8×8種類の波の振幅データに変換される。
勘違いされやすいところだが、この段階で数値は0~255ではなくもっと大きくなっているため、次段階で(一般的には)最大255で除するが必ずしも0にはならない。
量子化
量子化とは、割り算である。
例えば0~255の数値を表すには8bitが必要だが、これを16で割(って切り捨て)ると0~15になり4bitで表せる。
同様に、DCT後のブロック内の64個のデータに対してそれぞれ決められた値で除算を行う。この除数は量子化テーブルと呼ばれ、JPEGのヘッダにはY成分とC成分に対する2つのテーブルにそれぞれ64個の数値(一般的なフォーマットでは1~255)が用意されている。
ジグザグスキャンおよびハフマン符号化
ハフマン符号とは頻度の高いデータに短い符号語を割り当てることにより圧縮するエントロピー符号の一つである。
JPEGではデータそのものに対してハフマン符号化を行うのではなく、データの桁数とそれまでに連続した0の数に対して行う。
例えば16,0,0,0,40であれば「5桁、0個」「6桁、3個」となる(桁数は2進法で)。実際のデータは符号語のあとに最少のbit数で表す。
またこの時8×8のデータを読み出す順番は、左上から右下に向かうジグザグの経路を辿る。画像自体をジグザグスキャンすると勘違いするもの(昔の筆者含む)がいるが、注意されたい。この時点のデータは周波数領域である。
なお、このハフマン符号のテーブルは普通に考えれば画像1枚ごとに最適なものを生成する必要があるが、どんな画像もそこそこ圧縮できるテーブルがあり、それを固定で使うものも多い。横着をせず画像1枚ごとに最適なハフマンテーブルを生成することを一般にJPEGの最適化と呼ぶ。