JPEG画像圧縮の仕組みをステップごとに解説

最終更新: 05/12/2025
  • JPEG は、YCbCr カラー スペース、クロミナンス サブサンプリング、および離散コサイン変換で処理された 8×8 ブロックを組み合わせて画像を圧縮します。
  • 量子化では、主に高周波とほとんど認識できないカラーデータが除去され、情報の不可逆的な損失を犠牲にして、サイズの大幅な削減が実現されます。
  • エントロピー符号化 (ジグザグ、RLE、ハフマン) は、量子化された係数を数ビットにパックし、Web やデジタル写真に適した軽量のファイルを生成します。
  • この形式は自然な写真には最適ですが、透明部分、鮮明なグラフィック、または連続したロスレス編集が必要なワークフローには適していません。

JPEG 画像圧縮

インターネット、デジタルカメラ、あるいは携帯電話を長年使っている人なら、JPEG形式にほとんど気づかないうちに馴染んできたことでしょう。この規格は90年代初頭に誕生し、今日でもウェブ、ソーシャルメディア、そして多くのプロフェッショナルアプリケーションにおける写真の王者として君臨しています。その秘密は、 通常は十分すぎるほどの視覚品質を維持しながら、画像のサイズを大幅に縮小します。 人間の目には。

しかし、その根底には決して単純なものはありません。このアルゴリズムは、特定の色空間、数学的変換、量子化、そして統計的コーディングを組み合わせています。これらはすべて、人間の視覚に基づいています。 私たちは色の変化よりも明るさの変化に敏感で、非常に細かい詳細を検知するのが苦手です。JPEG は人間の視覚の限界を利用して、ほとんど気づかない情報を破棄することで、有名な非可逆圧縮を実現します。

品質を落とさずに写真を Facebook にアップロードするアプリ
関連記事:
品質を落とさずに写真を Facebook にアップロードするアプリ

JPEG とは何ですか? また、なぜこれほど多く使用されているのですか?

JPEGは ジェイペグ世界で最も広く使用されている静止画像圧縮規格を定めた専門家委員会。技術的にはJPEGはアルゴリズムの名前ですが、日常会話では画像ファイル自体を「JPEG」と呼び、拡張子は.jpegなどになります。 .jpg、.jpeg、.jpe、.jfif、または .jif.

このフォーマットは、 調整可能な損失を備えた圧縮圧縮する量を決めると、ソフトウェアと 画像を圧縮するプログラム 量子化の強度を調整します。高品質レベルではファイルサイズは大きくなりますが、元のファイルに非常に忠実な音質になります。一方、低品質レベルではファイルサイズは小さくなりますが、目に見える欠陥、つまり典型的なアーティファクトが発生します。

JPEGは、ISOとITUにおける長年の作業を経て、1992年に標準規格として公開されました。多くの画像圧縮研究者がその開発に参加し、後に以下のような派生規格が登場しました。 JPEG 2000、JPEG-LS、またはロスレスJPEG、データ損失なしで動作できますが、従来の DCT ベースの JPEG ほど広く採用されていません。

今日では、 デジタル写真、印刷、グラフィックデザイン、ウェブサイト、ソーシャルメディアカメラでは、何千枚もの写真をカードに保存できるため、これが使用されます。サーバーとブラウザでは、帯域幅を節約し、読み込み時間を短縮できるため、これが使用されます。また、携帯電話では、画像をほぼ瞬時に表示して共有できるため、これが使用されます。

ただし、すべてにおいて完璧というわけではありません。 アルファ チャンネル (透明度) を処理できず、鮮明な線のグラフィックやロゴには適していません。技術図面、アイコン、インターフェース、またはコントラストが高くエッジがはっきりした画像の場合、通常は PNG や TIFF などのロスレス形式の方が適しています。

非可逆圧縮:JPEGが犠牲にするもの、そしてその理由

JPEG圧縮

JPEGの成功の鍵は、その圧縮が「非可逆」であるという事実にあるが、 人間の目が最も悪く認識するものを正確に失います。これは、人間の視覚の 2 つの現象によって裏付けられています。つまり、人間は彩度 (色) よりも輝度 (明るさ) に敏感であり、非常に詳細な領域よりも滑らかな領域の方が明るさの小さな変化をよりよく検出できるということです。

このアルゴリズムは、画像を明るさと色の成分に分離し、色度データと色差データにさらに積極的なクリッピングを適用することで、これを利用し、 高空間周波数これらは、細部の描写に関係する非常に急激な強度変化です。こうした高周波係数の多くを破棄すると、通常の状況ではほとんど違いが感じられないほどファイルサイズが縮小されます。

このトリックの代償は、変換が元に戻せないことです。 JPEG 写真を圧縮すると、破棄された情報は回復できなくなります。さらに、JPEG 画像を保存するたびに再度圧縮され、少しずつ品質が失われ、保存を重ねるごとにアーティファクトが蓄積されます。

そのため、プロフェッショナルなワークフローでは、編集は通常ロスレス形式 (RAW、TIFF、PNG) で行われ、JPEG は最終的な配布形式としてのみ残されます。 同じ JPEG ファイルを保存して再保存すると、テキストがブロック状になったり、ぼやけたり、不明瞭になったりする原因になります。.

JPEG では、通常 0 から 100 の範囲で品質を調整できることも知っておく価値があります。 非常に低い値ではサイズが大幅に縮小されますが、非常に目立つアーティファクトが生成されます中〜高の範囲(例:70〜90)は通常、Web にとって妥当な妥協点となり、最大値に近い値ではロスレス PNG のコスト効率がより高くなる可能性があります。

  Mac で iMessage からシグナルアウトする方法

RGBからYCbCrへ:色空間の変更

アルゴリズムの最初の内部ステップは、画像を古典的な空間から変換することです。 RGBからYCbCr(またはYUV)システムへこのモデルでは、輝度 (グレースケールの明るさ) としての Y と、彩度 (青と赤に関連する色情報) としての Cb/Cr の 3 つのコンポーネントが明確に分離されています。

数学的には、各 RGB ピクセルは、異なる重みを持つチャネルが結合された線形方程式を使用して Y、Cb、および Cr に変換されます。 値は1バイトに収まる範囲に収まるように正規化されます通常、Y は 16 から 235、Cb/Cr は 16 から 240 の間になりますが、小さな丸めによって実質的に目に見えないエラーが発生します。

この基準の変更は恣意的なものではない。明るさと色を分離することで、JPEGは 色彩情報をより積極的に圧縮する あまり気づかないうちに。私たちの視覚は輝度の細部に非常に注意を払うため、アルゴリズムはYに対して「より適切に動作」し、CbとCrに対しては少し厳しい要求を課します。

標準や実装によって若干異なる式がありますが、すべて同じ目的を追求しています。つまり、 視覚システムの弱点を突くのが容易になるこのフェーズでは、丸め以外の品質の低下はほとんど発生しません。

逆のプロセスでは、JPEG をデコードするときに次の処理が適用されます。 逆変換: Y、Cb、Cr からおおよその元の R、G、B 値が再構築され、モニターに表示できるようになります。

クロミナンスサブサンプリング:色は少なく、明るさは同じ

YCbCrではJPEGが通常適用される 色成分のサブサンプリング人間は輝度の変化に比べて彩度の変化にあまり敏感ではないため、Cb と Cr の空間解像度を下げても、特に奇妙な結果にはなりません。

サブサンプリングを行わない場合、 4:4:4各ピクセルはY、Cb、Crの完全な情報を持っています。しかし、写真や動画では4:2:2(カラーの水平解像度の半分)や4:2:0(両方向の解像度の半分)といった方式が一般的です。 複数のピクセルが同じ色度値を共有する.

このトリックにより、CbとCrの要素が占めるスペースが大幅に削減されるため、バイト数を大幅に節約できます。標準的な画面と通常の視聴距離では、 色の詳細の損失を認識することは非常に困難です。特に現実世界の写真では、変化は通常微妙です。

一部のプログラムでは、これらの構成を1×1,1×1,1×1(4:4:4に相当)、2×1,1×2,1×1(4:2:2に類似)、2×2,1×1,1×1(4:2:0)などの表記で表示します。デコード処理では、色差値は以下の手法を用いて元のサイズに「再構成」されます。 双線形補間、最近傍補間、三次補間、またはスプライン.

元の画像がすでにグレースケールだった場合、色差は無視され、Yのみが使用されます。これは、ある意味では極端な4:0:0サブサンプリングと見なすことができます。 実際には存在しない色情報を失うことなく、高効率圧縮を実現.

8×8ブロックと離散コサイン変換(DCT)

プロセスの次のマイルストーンは、各コンポーネントを分割することです。 8x8ピクセルブロックこれらの各ブロックはほぼ独立して圧縮されるため、計算が大幅に簡素化され、画像の小さな部分を個別に処理できるようになります。

変換を適用する前に、8×8 行列の各値から 128 が減算され、数値がゼロを中心として -128 から 127 の範囲に揃うようになります。 これによりDCTの仕事が楽になるこれは、原点の周りのバランスの取れた値で最もよく機能します。

各ブロックには次の内容が適用されます。 離散コサイン変換(DCT)このプロセスは、空間領域(ピクセル値)から周波数領域へと情報を変換します。その結果、8×8の係数行列が生成されます。左上隅にあるのはDC係数(ブロックの平均輝度)で、残りは異なる周波数の変化をエンコードするAC係数です。

DCT変換後、画像エネルギーのほとんどは通常、 低周波が少ない一方、非常に細かいエッジや複雑なテクスチャを表す高周波成分は、値が小さくなる傾向があります。JPEGではまさにこの部分に余裕を持たせることができます。なぜなら、こうした細かいディテールは、特にコントラストやノイズが多い場合に、人間が最も効果的に認識できないからです。

数学的には、DCT は、各 uyv (周波数) について、すべてのピクセル f(x, y) の寄与に、異なる空間周波数のコサインを乗じ、正規化係数でスケーリングしたものを加算する式で表すことができます。 これは、ブロックを異なる周波数の「波」に分解するコサイン関数の直交基底である。.

  これは、Windows 10 PC から曲を切り取って貼り付ける簡単な方法です。

定量化:実際のスペースが得られる場所

画質

各ブロックのDCT係数が得られたら、実際に情報損失が発生する段階に到達します。 定量化これは、行列の各係数を 8×8 量子化テーブルの対応する値で割り、結果を最も近い整数に丸めることから始まります。

これらのテーブルには通常 低周波数範囲では小さな値、高周波数範囲では大きな値大きな数値で割ると、多くの高周波係数は四捨五入後にゼロになります。これにより、視覚への影響が最も少ない微細なデータの多くが失われ、圧縮率が大幅に高まります。

典型的な例としては、標準規格で提案されている量子化行列(しばしば「デフォルト」行列と呼ばれる)が挙げられます。この行列は、DC係数付近の要素が比較的緩やかで、反対側の角に向かって増加する要素を持ちます。量子化されると、ブロックのDC係数は元の値よりもかなり小さい整数に縮小され、 最も離れた係数は通常ゼロになるか、小さな値を取る。.

全体的な圧縮レベルはこれらのテーブルに大きく依存します。すべての値に大きな係数を掛けると、除算と丸め後の係数は小さくなり、ゼロが多くなります。 圧縮率は上がるが品質は低下する調整を緩やかにすると、ファイルは大きくなりますが、アーティファクトは少なくなります。

人間の目は、すべてのエラーに対して同じように敏感というわけではありません。滑らかな部分や均質な表面では小さな変化をよりよく認識できますが、強いエッジや複雑なテクスチャでは「許容度」が高くなります。 JPEG はこの許容範囲を利用して、エラーが最も目立たない場所に正確にエラーを導入します。数量化表の設計をガイドします。

エントロピー符号化:ハフマン、RLEなど

数量化した後、多くの係数がゼロになり、また他の係数も繰り返されます。これは、 統計に基づくロスレス圧縮最も頻繁に使用される値が少ないビットでエンコードされるようになります。

まず、パターン内の各量子化ブロックは、 zig-zagこれは左上隅(低周波数)から始まり、高周波数に向かって曲がりくねって進みます。この経路は、通常より重要な低周波数係数をグループ化し、最終的には長いゼロの列を生成する傾向があります。

そのシーケンスには、ランレングス符号化(RLE)の組み合わせがしばしば適用され、 ゼロのセクションを簡潔に表現するハフマン符号化は、頻度の高い値には短いバイナリコードを割り当て、頻度の低い値には長いコードを割り当てます。この規格には算術符号化も含まれており、こちらはやや効率的(データサイズを約5%削減可能)ですが、特許問題や複雑さといった過去の問題から、あまり一般的には利用されていません。

実際には、EOB(End Of Block)と呼ばれる特別な記号は、ブロック内の残りの係数がゼロであることを示すために使用され、すべてのゼロを明示的に記述する必要がなくなります。このようにして、 高度に定量化されたブロックは、いくつかの重要な値と最終的なEOBに縮小されます.

これらすべてのステップの結果、非常にコンパクトなビットストリームが生成され、必要なヘッダーとテーブルとともに最終的なJPEGファイルが形成されます。さらに、JFIFまたはExifコンテナ内では、 寸法、色空間、カメラデータ、日付、さらには地理位置情報などのメタデータが保存されます。.

逆プロセス:JPEG画像を再構築する方法

JPEGファイルを開くと、デコーダーは逆順に動作して画像を再構成します。 正確な元のデータを取得することはできない なぜなら、その一部は定量化の際に失われたからです。

まずヘッダーを読み取り、次元、色空間、量子化テーブル、ハフマンコードに関する情報を抽出します。次に、圧縮されたデータを取り出して… ハフマンとRLEデコード そして、64 個の係数のシーケンスが、再びジグザグパターンに従って各ブロックごとに再構築されます。

各ブロックの量子化マトリックスが取得されると、各係数はエンコード時に使用された量子化テーブルの対応する値で乗算されます。 この逆量子化では失われた小数点以下の桁は回復されない。ただし、特にそれほど積極的に丸められていない低周波要素では、元の DCT 値に近似します。

以下が適用されます 逆DCT(IDCT) 空間領域に戻るために、ブロックのピクセルマトリックスを取得します。次に、各値に128を加算して、以前のセンタリングを元に戻します。その結果、YCbCr形式のピクセルが画像全体の対応する位置に配置されます。

  データ損失なしでFAT32をNTFSに変換する方法:完全かつ安全なガイド

クロミナンス サブサンプリングを使用した画像では、Cb および Cr コンポーネントは補間によって Y コンポーネントのフル解像度に縮小されます。 最後に、逆YCbCr→RGB変換が適用されます。 画面に表示できるR、G、Bの値を生成します。

再構築された画像をブロックごとに圧縮前の元の画像と比較すると、違いがわかります。 多くのピクセルの値がいくつかの強度レベルシフトしている特にエッジやディテール付近の領域では顕著です。典型的な例では、平均絶対誤差は数グレーレベル程度であり、通常は視覚的に許容できる範囲です。

JPEG形式の典型的なアーティファクトと制限

非可逆圧縮にはコストがかかります。圧縮レベルを強制しすぎると、ひび割れが発生し始めます。 非常に特徴的な圧縮アーティファクト最もよく知られているのは、均一な領域または高コントラストのエッジの近くにある微妙な(またはそれほど微妙ではない)グリッドのような、目に見える 8×8 ブロックです。

「シミ」や 輪郭の周りの奇妙な色の帯これらの欠陥は、高周波成分が過剰に除去されることで発生し、急激な色の変化を引き起こします。同じ画像をJPEGで繰り返し保存すると、圧縮のたびに新たなエラーが加わり、これらの欠陥が悪化します。

もう一つの重要な制限は、オリジナルのJPEG規格では アルファチャンネルをサポートしていませんつまり、PNGやJPEG 2000の一部のバリエーションのように、ピクセルごとに透明度を定義することはできません。そのため、アイコン、ロゴ、グラフィックを透明な背景に重ねる必要がある場合、JPEGは適切な選択肢ではありません。

また、ベクター グラフィック、鮮明なテキスト、または非常に細い線と単色のテクニカル イラストにも適していません。 このような場合、定量化は境界をぼかし、ハロー効果をもたらす傾向がある。 これは、変化が通常緩やかな風景写真やポートレート写真よりも、はるかに目立ちます。

それでも、「現実世界」の写真や画面上での一般的な使用では、JPEGはWebPのような新しい形式と比べても、画質とサイズのバランスにおいて勝るものはない。WebPは圧縮率が高い傾向があるが、 あらゆる種類のデバイス、ソフトウェア、従来のワークフローに普遍的に統合されているわけではない.

JPEGの一般的な用途と避けるべき場合

カメラ、携帯電話、ソーシャルメディアなど、JPEGはほぼあらゆる場所で使用されています。カメラでは通常、RAWとJPEGのどちらかを選択でき、多くのユーザーは利便性からJPEGを選択します。 ファイルは小さいので、電子メールまたは宅配便ですぐに送信できます。 どのデバイスでも問題なく開くことができます。

ウェブ上では、記事、ブログ、製品カタログ、表紙の写真のほとんどは、ファイルサイズが小さいため JPEG で公開されています。 読み込み時間が改善され、帯域幅の消費が削減されます。これは、モバイル接続や画像の多いサイトでは特に顕著になります。

印刷やグラフィックデザインでも、送信する必要がある場合に使用されます。 レビューやデジタル配信用の軽量版Photoshopのようなアプリケーション、 GIMP または同様のプログラムを使用すると、品質を調整して JPEG で保存できるため、デザイナーはファイルの保存先に応じてサイズと忠実度のバランスをとることができます。

しかし、それを避けるのが最善のシナリオもあります。画像を大幅に編集する場合、ロスレスの中間バージョンを保存する必要がある場合、またはコンテンツがテキスト、ロゴ、または非常に正確な図を含むグラフィックである場合などです。 PNGやTIFFなどのロスレス形式を使用するのが最適です。また、プロの写真撮影に携わる場合は、RAW で現像し、最後に JPEG にエクスポートするのが一般的です。

また、JPEG 2000のような、より圧縮率が高くアルファチャンネルをサポートした変種もありますが、 ブラウザ、カメラ、消費者向けソフトウェアへの実際の実装は非常に限られているだからこそ、「クラシック」JPEG は、その長所と欠点をすべて備えながらも、いまだに最高の地位を占めているのです。

JPEG圧縮の内部的な仕組み(色空間変換からDCT、量子化、ハフマン符号化まで)を理解することで、保存時に最適な画質を選択し、不要な再圧縮を避け、この形式が最適な場合と代替形式を検討する必要がある場合を判断できるようになります。 結局のところ、画像の視覚的な品質、ファイル サイズ、互換性、および使用目的の間の最適なバランスを見つけることが重要です。.