JPEG。 圧縮アルゴリズム

またあったね! 2019年XNUMX月に書かれたこの記事を見つけました。 これは、WAVE と JPEG に関する一連の記事の続きです。こちら 最初の。 この出版物には、画像エンコード アルゴリズムとフォーマット自体全体に関する情報が含まれます。

歴史のピンチ

ウィキペディアの記事大さじXNUMX杯:

JPEG (Joint Photographic Experts Group) は、写真や類似の画像を保存するために使用される一般的なラスター グラフィック形式の XNUMX つです。

この標準は、効率的な画像圧縮を目的として 1991 年に Joint Photographic Experts Group によって開発されました。

画像はどのようにして RAW から JPEG に変換されますか?

JPEG画像はハフマン方式で圧縮された生データだと思っている人もいますが、そうではありません。 制御圧縮が行われる前は、データは長距離を移動します。

まず、カラーモデルがRGBからYCbCrに変更されます。 これには特別なアルゴリズムもあります - ここで。 Y は明るさを担当し、その変化が目立つため、タッチしません。

画像を使って最初に行うことは、 「薄くなる」 (サブサンプリング)。 理解するのは簡単です。ピクセルの 2x2 配列が取得され、次に Cb と Cr が取得されます。これは、これら 4 つのピクセルの各 YCbCr コンポーネントの平均値です。 それで、 6バイト勝ちました、4 Y、4 Cb、4 Cr の代わりに、4 つの Y と、それぞれに同じ Cb と Cr が得られます (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6)。 2x2 スケールでも、圧縮率 2:1 の非可逆圧縮は堅調に聞こえます。 これは画像全体に適用されます。 それで、彼らは半分のサイズを落としました。 そして、私たちは色の知覚のおかげでこのテクニックを使うことができます。 ピクセルの小さなブロック全体で平均化すると、色ではなく明るさの違いに簡単に気づきます。 縦横4ピクセルずつの細線化も可能です。 最初のオプションがより頻繁に使用されます。 画質が重要な場合、間引きはまったく実行されません。
薄化の視覚的な図 (Habr は gif の挿入を許可しませんでした) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

準備の主な部分

プレエップ

ここからが最も難しく、最も必要な部分です。 画像全体が 8x8 ブロックに分割されます (解像度がブロック サイドの倍数でない場合は塗りつぶしが使用されます)。

各ブロックに適用します DCT (離散コサイン変換)。 この部分では、不要なものはすべて削除されます。 DCT を使用する場合、特定のブロック (8×8) が画像の単調な部分 (空、壁など) を表しているかどうかを理解する必要があります。 または複雑な構造(髪、シンボルなど)が含まれています。 同様の色の 64 ピクセルを 1 だけで表すことができるのは論理的です。 ブロックサイズはすでにわかっています。 圧縮についてはこれくらいです: 64 対 1。

DCT はブロックをスペクトルに変換し、読み取り値が急激に変化する場合、係数は正になり、遷移が鋭くなるほど出力が高くなります。 係数が高い場合、画像は色と明るさの明確な変化を示し、係数が低い場合、ブロック内のYCbCrコンポーネントの値の弱い(滑らかな)変化が表示されます。

量子化

ここでは圧縮設定がすでに適用されています。 各 8x8 行列の各係数は、特定の数で除算されます。 すべての変更を行っても画質を低下させない場合、除数は 1 にする必要があります。 この写真が占めるメモリの方が重要な場合、除数は XNUMX より大きくなり、商は四捨五入されます。 四捨五入すると、多くの場合、ゼロが多くなることがわかります。

量子化は、さらに大きな圧縮の可能性を生み出すために行われます。 グラフ y = sin(x) を量子化する例を使用すると、次のようになります。

JPEG。 圧縮アルゴリズム

圧縮

まず、ジグザグ パターンで行列を調べます。

JPEG。 圧縮アルゴリズム

数値を含む 1 次元配列が得られます。 多くのゼロが含まれていることがわかりますが、それらは削除できます。 これを行うには、多数のゼロのシーケンスの代わりに、ゼロを 1 つ入力し、その後にシーケンス内のそれらの番号を示す数字を入力します。 このようにして、配列全体のサイズを 3/XNUMX にリセットできます。 次に、ハフマン法を使用してこの配列を圧縮し、ファイル自体に書き込みます。

使用場所

どこにでも。 PNG と同様に、JPEG はカメラ、OS (会社ロゴ、アプリケーション アイコン、サムネイルなど)、および画像を効率的に保存する必要があるあらゆる領域で使用されます。

出力

現時点では、JPEG に関する知識は教育目的でのみ価値があります。JPEG はすでにどこにでも組み込まれており、大規模なグループによって最適化されているためです。しかし、科学の花崗岩は依然としておいしいものです。

ソース

ウィキペディアの YCbCr に関する記事
JPEGに関するウィキペディアの記事
ピカブの投稿から PrEP について少し
PreEP に関するウィキペディアの記事

出所: habr.com

コメントを追加します