スマホやカメラで写真を撮ると、数秒もしないうちに JPEGという形式で保存され、サイズは小さく、読み込みも速いのに、見た目はくっきりしていますよね。その裏側では、実はとても賢い処理が行われていて、 巨大な画像ファイルを、高い画質を保ったまま元のサイズのごく一部まで縮小しています。では、 実際にはどのように動いているのでしょうか。ここでは、 JPEG 圧縮について詳しく見ていき、 この画像圧縮の仕組みを、各ステップごとに分かりやすく説明します。
JPEG とは?
JPEG (Joint Photographic Experts Group の略)は、最も一般的な画像形式のひとつです。デジタル写真の保存に よく選ばれる形式であり、JPEGの特徴は画像ファイルを圧縮して、 画質をほとんど落とさずに大幅にサイズを小さくできる点です。
例えば、高画質な非圧縮画像は 46MB もの大きさになることがありますが、JPEG に圧縮すると、 同じ画像がたった 4.1MB まで小さくなります。それなのに、どうしてシャープさを保てるのでしょうか?
その答えは、 compression process、 人間の目の特性を利用し、不要なデータを取り除く圧縮処理にあります。
JPEGは何をしているの?
簡単に言うと、JPEG は画像を解析し、人間の目にはほとんど見えない要素を取り除くことで動作します。JPEG で 画像を圧縮する際は、どの程度圧縮するかを設定できます。「品質」設定を調整することで、 どれくらいファイルサイズを削減するかを決められます。品質を 100% から 0% に下げていくと、ファイルサイズも それに応じて小さくなります。
圧縮率を上げても、画像の解像度は変わりませんが、「ブロックノイズ」などの欠陥(アーティファクト)が 見え始めることがあります。これらの欠陥は小さな四角形のように見えますが、拡大しないと気付きにくいことが多いです。JPEG の目的は、 人間の目で見て違和感が出ない範囲で、できるだけファイルサイズを小さくすることです。
JPEG圧縮のステップ
JPEG 圧縮 は、ひとつの魔法のような処理ではなく、 画像サイズを小さくするために設計された、複数の賢いステップの組み合わせです。ここでは、JPEG を効率的にしている 5 つの重要なステップを順番に見ていきます。
ステップ1: 色空間の変換
画像はピクセルの集合で構成されており、各ピクセルは色を表す赤・緑・青(RGB)の成分を持っています。 JPEG はまず、これらの RGB値 を別の色空間、つまり
- 輝度(明るさ): ピクセルの明るさを表し、画像全体のコントラストを決める重要な要素です。
- 色差(色): 色相と彩度を含む色の情報を表します。
この変換は、人間の目が色 (色差)よりも明るさ(輝度)に対して敏感である、という特性を利用しています。明るさと色を分離することで、JPEG は後のステップで、 重要な視覚情報を保ちながら、不要なデータだけを効率よく削減できるようにします。
このステップ自体ではデータは失われませんが、効率的な圧縮の土台を作る役割を果たします。
ステップ2: 色差の間引き/クロマサブサンプリング
クロマサブサンプリングは、 は 色空間の変換のあとに行われる手法です。先ほど、人間の目は明るさ(輝度)に比べて、 色(色差)をあまり細かく識別できないと説明しましたよね。
JPEG はこの特性を利用して、色情報の量を減らします。青と赤の色差成分を、4ピクセル単位のブロックごとに平均化して小さくし、 色情報のデータ量を大幅に減らしますが、 輝度(明るさ)はそのまま保たれます。この時点で、画像はすでに半分ほど圧縮されています。
ステップ3: 離散コサイン変換(DCT)
離散コサイン変換(DCT)は、 画像データを変換するために使われる数学的な手法で、 画像をピクセルの格子として表す空間領域から、周波数領域へと変換します。この処理により、 画像のどの部分に重要な視覚情報が多く含まれているか、逆にどの部分を省いても問題ないかを見分けやすくなります。 破棄されました。
DCT は画像を 8x8 のブロックに分割し、それぞれのブロックを周波数値の集合に変換します。 画素値の急激な変化(エッジやノイズなど)を表す高周波成分は、 人間の目にはあまり目立たないため、簡略化したり削除したりできます。
ステップ 4: 量子化
DCT が適用されると、その結果として得られた周波数データに 量子化が行われます。このステップでは、 量子化テーブルと呼ばれる定数の集合で割ることで、周波数値の範囲を小さくします。 この処理により、周波数値は丸められ、より単純化されます。
高周波成分はより強く量子化されるため、重要度が低い分だけ精度が大きく失われます。 この 4 番目のステップにより、画像を表現するために必要なデータ量が減り、 ファイルサイズが小さくなります。ただし、量子化をかけすぎると、特に高い圧縮率では、ブロックノイズやぼやけなどの目に見えるアーティファクトが発生することがあります。 高い圧縮レベルでは特に顕著になります。
ステップ 5: ランレングスおよびハフマン符号化
量子化の後でも、データはまだ効率的に保存できるほど十分にコンパクトではありません。ここで登場するのが、 ランレングス符号化 (RLE) と ハフマン符号化 です。
まず RLE を使い、長く続く同じデータ(ゼロなど)の並びを、それぞれの値をすべて保持するのではなく、繰り返し回数としてまとめて表現します。 次にハフマン符号化を適用します。これは、頻繁に現れる値をより短いビット列に置き換える手法で、 ファイルをさらに小さくします。
These two これらの符号化方式は 連携して動作し、画質をほとんど損なうことなく ファイルサイズを大幅に削減します。
補足事項
JPEG は非常に効率的な形式ですが、いくつか注意すべき点があります。
- 圧縮レベル: JPEG では圧縮レベルを選択できますが、圧縮率を上げるとファイルサイズは小さくなる一方で、ぼやけたエッジやピクセル化といった目に見えるアーティファクトが発生する場合があります。これは、量子化テーブルの値が高すぎることでゼロが多くなり、ファイルは小さくなるものの、その代わりに画質が低下するためです。
- 高周波成分の損失: 量子化によって高周波データ(シャープなエッジなどの細部)の精度が下がるため、JPEG はなめらかな質感の画像には適していますが、シャープな線やベクターグラフィックでは苦手な場合があります。
- ベクターグラフィックには不向き: JPEG はベクターグラフィックの圧縮には最適ではなく、図形や線の境界に目立つアーティファクトを生じることがあります。
これらの制限があるにもかかわらず、JPEG が今でも最も一般的な画像形式であるのは、その歴史の長さや理解のしやすさ、ロイヤリティフリーであることが理由の一部です。しかし、 WebP または HEIF などの新しい形式は、画質を維持しながらさらに高い圧縮率を実現できるため、状況によっては有力な選択肢となります。
まとめ
JPEG 圧縮アルゴリズムは、画像データを効率的に扱ううえで優れた仕組みです。画像を小さなブロックに分割し、さまざまな数学的変換を適用し、ランレングス符号化やハフマン符号化といった効率的な符号化手法を組み合わせることで、高画質な画像をはるかに小さなファイルサイズで保存できるようにします。
JPEG には、高い圧縮レベルやベクターグラフィックに対する制約といった弱点もありますが、写真画像に対して良好な結果を提供し、広く利用されていることから、今なお標準的な形式として使われ続けています。