§1. はじめに
こんにちは、@inuverse44です。
TRIAL&RetailAI Advent Calendar 2025 の 20 日目の記事になります。
昨日は @ikeda_takato さんの
でした。私はセキュリティや攻撃に関して疎いので、しっかり勉強したいと思います。
さて、これはとあるLT会が終わったあとの飲み会で、たまたま話に挙がった「画像とフーリエ変換」の話題から着想を得て書いた記事になります。画像の圧縮形式の1つ「JPEG」は非可逆の圧縮を採用しています。圧縮フローの中に、離散コサイン変換(DCT: Discrete Cosine Transformation)と呼ばれる数学が使われています。調べているうちに、JPEGの変換アルゴリズムは、人間の色の認知に対するいくつかの性質から要請される形式だということが分かりました。
この記事の構成は次のとおりです。まずはじめに、色彩工学の観点から、人間の色の認知に対する実験的事実から2つの原理を採用します。次の節で、色の認知由来のJPEG圧縮アルゴリズムについて解説します。より詳しい記事については、拙著の下記pdfを参考にしてください。
※1 この記事は下記pdfのまとめ版になります。
色の認知由来の圧縮の後段処理にあたる、エントロピー符号化(ランレングス符号化、ハフマン符号化)の話や、JPEGの規格、ファイルフォーマットの話は、この記事のスコープ外となります。JPEGに関して一気貫通でさらっと知りたい場合はこちらの書籍がおすすめです。
※2 画像、色彩工学に関してAdventCalendarを機に勉強をしましたが、そうは言っても専門外の領域です。間違っている箇所があればご指摘のほどよろしくお願いします。
§2. 人間の色の認知
人間の輝度と色差(クロマ)の空間分解能には明確な差があります。K. Mullen (1985) によると、輝度と色差の空間分解能は約3倍程度ことなります。視野角$1^\circ$あたりの色の変化が1回であることを、$1~{\rm cycles/deg}$と書くことにすると、人間は色差に対して$11-12~{\rm cycles/deg}$程度の変化を知覚することができます。一方で、輝度に対しては$32-36~{\rm cycles/deg}$のように測定されました。
輝度の空間分解能は色差の空間分解能よりも常に大きいわけではありません。図(上)1によれば、$0.3-0.5~{\rm cylcles/deg}$以下の低波数領域において、色差の感度の方が高くなります。一方で、$0.3-0.5~{\rm cylcles/deg}$より大きい領域あたりから、輝度と色差の感度は逆転します。つまり、人間は比較的大きな色の変化を識別すること、細かい輝度の変化を識別することが得意です。
輝度だけに着目しても次のような事実があります。F. W. Campbell, J. G. Robson.(1968)によると、人間の輝度に対するコントラスト感度の波数依存性は図(下)2によって表されます。およそ$4^\circ$あたりでコントラスト感度がピークになっていますが、低波数、高波数領域で感度が著しく低下します。つまり輝度の感じ方はバンドパス状で、細かすぎる変化、大雑把すぎる変化でも空間分解能が落ちることを表しています。
以上のことから次のことが言えるでしょう:
- 基本原理1: クロマの空間分解能は高周波数成分で減衰するローパス特性がある
- 基本原理2: 人間の輝度成分に対する空間分解能はクロマより高いが、特に高空間周波数領域では感度が著しく低下する
という2つの柱をもとに下で議論を進めましょう!
§3. JPEG圧縮アルゴリズム
§3.1. 全体像
何事も全体像をぼんやりと知ることから始めると楽です。
国際電気通信連合 (International Telecommunication Union: ITU)3 が発行している資料に基づくと、JPEGへ圧縮するための流れは大雑把に、
- 画像の入力
- RGB表式系からYCbCr表式系への変換
- クロマ・サブサンプリング (chroma subsampling)
- $8\times8$ブロック分割
- 離散コサイン変換(DCT: Discrete Cosine Transformaton)
- エントロピー符号化(ランレングス符号化、ハフマン符号化)
です。図中のFDCT (Forward DCT) は逆DCT (Invart DCT)の対比としてFを入れているだけで、ただのDCTです。
§3.2. クロマ・サブサンプリング
サブサンプリングとは簡単に言ってしまえば粗視化です。細かいことは気にせず、荒っぽく画像を捉えることです。ここで、§2の基本原理1に立ち戻ると、人間にとってクロマ(色差)の細かい変化(高周波成分)は知覚しずらい対象としています。そこで、クロマの細かいことは気にしないよう削ってしまえば、データ量を削減できるという概念に行き着くことができます。
クロマ・サブサンプリングはいくつか種類があり、基本的には3つの整数をコロン(:)で分けた$ J:a :b$記法によって分類されます(まれに4つの数字で表される)4。
それぞれ$J, a, b$の意味を述べておくと、
- $J$: サブサンプリングする水平方向のピクセル数
- $a$: 水平方向のクロマの数
- $b$: 水平方向のクロマに対して、垂直方向へ変化可能なクロマの数
です。
上の図には、$J :a :b$の気持ちを書いています。厳密な色差を書いているわけではないことにご容赦ください。まず、$J = 4$からスタートし、ピクセル4つが水平方向に並んでいる状況、もしくは、画像の一部から抜粋することを考えます。$a, b$がクロマ・サブサンプリングによってどれくらい削減するかを表します。$J :a :b = 4:4:4$はなんのダウンサンプリングのない状態で基準だと考えてください。
例えば中列上段の$a = 4$の場合、クロマは$4$のままで、4つのピクセルの色が異なることを許容します。一方、中列中断の$a = 2$の場合、水平方向のクロマの変化が許容可能な数が2であるので、青っぽい色と赤っぽい色の$2$種類しかありません。この時点で緑やマゼンタは削除されます5。次に$a = 4$で$b = 4$の場合、$a$で考えたクロマの下側のクロマもまた4種類です。もし$a = 4$で$b = 0$だと、上のピクセル・下のピクセルでクロマの許容される変化量が0、すなわちクロマは変化してはいけないので、図のようになります。
JPEGで使われる典型的の形式は$J :a :b = 4:2:0$です。
あと、Wikipediaで表示されている図も非常にわかりやすかったので参考にしてみてください!
§3.3. DCT
§2で言及したように、人間の目は高周波数の輝度の変化を感じずらいです。そこで、画像の情報を周波数空間で書きなおすことを思いつき、フーリエ変換を使いたくなります。離散的な信号の場合、離散フーリエ変換(DFT)を構築することができます。
\begin{align}
H_n
&=
\sum_{k = 0}^{N - 1}
h_k e^{2\pi {\rm i} n k / N}\,, \\
h_k
&=
\frac{1}{N} \sum_{n = 0}^{N - 1} H_n e^{-2\pi {\rm i} n k / N}
\end{align}
詳しくは
などを参考にしてみてください。エイリアシングや標本化定理についてもちゃんと言及してあります。
§2の基本原理2でも触れたように、人間の目が高周波数の輝度の変化を感じずらいことを考慮する必要があります。そこでフォーマリズムの段階から高周波数が入りずらい展開をしてみようという発想につながります。
そもそも「高周波数成分が入りやすい」とは何なのでしょう。この答えは急激な変化の起こる点が存在することです。画像の端点で輝度のジャンプを生むことが想定されます。図は周期的境界条件で得られる、単純な$8\times 8$ピクセル画像が4枚並配置されていることを表しています。
輝度の信号をうまく拡張することで輝度のジャンプがない場合の展開を考えてみます。このうまい簡単に例示すると、$x_n = [1, 2, 3, 4]$という信号があるとすれば$y_n = [1, 2, 3, 4, 4, 3, 2, 1]$のように拡張するようなものです6。
$N$個の信号$h_k$を拡張して、$2N$個の信号$y_k$を考えます。具体的には
\begin{align}
\label{eq:dct_expand_even_symmetry}
y_k
=
\left\{
\begin{aligned}
h_k &\qquad (0 \leq k \leq N-1) \\
h_{2N -1 - k} &\qquad (N \leq k \leq 2N-1)
\end{aligned}
\right.
\end{align}
で、$h_m = h_{2N -1 -m}, ~(0 \leq m \leq N-1)$を満たします。
ここまでのように偶対称化させて(いろいろ面倒な添付PDFの付録にあるような)計算を進めると、最終的に
\begin{align}
H_n
= \alpha_n
\sum_{k = 0}^{N - 1}
h_k \cos
\left[
\frac{n}{N}
\left(
k + \frac{1}{2}
\right)
\right]
\,, \nonumber \\
\mbox{where}
\qquad
\alpha_n
=
\left\{
\begin{aligned}
\frac{1}{\sqrt{N}} & \qquad (n = 0) \\
\sqrt{\frac{2}{N}} & \qquad (n \neq 0)
\end{aligned}
\right.
\end{align}
が導けます。これで、画像の空間周波数をうまく扱う基盤が整いました。
JPEGの圧縮では、これの2次元バージョンが使用されます。そして、基本原理2に基づいて、重みをつけて低周波数と高周波数成分を削減することで、データ量を圧縮することができるのです。この削減過程が量子化になります。
まとめと展望
今回は色彩工学的な観点から2つの基本原理を設けて、JPEGの圧縮が自然かどうかを再検討しました。基本原理1の「クロマの空間分解能は高周波数成分で減衰するローパス特性がある」ことからクロマ・サブサンプリング、基本原理2の「人間の輝度成分に対する空間分解能はクロマより高いが、特に高空間周波数領域では感度が著しく低下する」からDFT→DCTへの移行の動機と量子化が自然に到達できる概念だと分かりました。
実はフルスクラッチでDCTの実装(Fast Fourier Transformationの変種として)、DCT基底を実際に描画、DFT・DCTで高周波成分の比較、なぜ$8\times8$ブロックなのか、も論じたりしたかったのですが、時間が足りなかったのでまた別の機会に書きたいと思います。
あと、今回は人間の視覚特性から原理を定めていろいろ論じましたが、音にも適用できそうですね。というか一般化すれば、人間という精度の低い「観測機」に対して、音、匂い、味覚、感覚といった五感の情報もまた、同じセンスで圧縮できそうだなあと思いました。これについても同様に調べてみたいものです。
ここまでお読みいただきありがとうございました。
明日は、 @akaitigo さんの
です。お楽しみに!
おわりに
RetailAIとTRIALではエンジニアを募集しています。
興味がある方はご連絡ください!
-
Kathy Mullen. The contrast sensitivity of human color vision to red-green and blue-yellow chromatic gratings. The Journal of physiology, 359:381–400,03 1985.
https://physoc.onlinelibrary.wiley.com/doi/10.1113/jphysiol.1985.sp015591?utm_source=researchgate.net&medium=article ↩ -
F. W. Campbell and J. G. Robson. Application of fourier analysis to the visibility of gratings. The Journal of Physiology, 197(3):551–566, 1968. https://physoc.onlinelibrary.wiley.com/doi/10.1113/jphysiol.1968.sp008574. ↩
-
Information technology — digital compression and coding of continuous-tone still images— requirements and guidelines. ITU-T Recommendation T.81, International Telecommu-
nication Union, 1992. https://www.w3.org/Graphics/JPEG/itu-t81.pdf ↩ -
サブサンプリングするときに、特定の色のみを代表させていますが、実際はローパスフィルタを通して平均をとるや、単純に平均、最大値をとることも考えられます。 ↩
-
拡張の仕方は$y_n = [1, 2, 3, 4, 4, 3, 2, 1]$以外にも、$y_n = [1, 2, 3, 4, 3, 2, 1]$のように、$4$が重複しないように展開する方法も考えることができます。この不定性により、DCTにはいくつか種類があります。 ↩





