100
フーリエ変換と画像圧縮 第2回 プログラマのための数学勉強会 武田祐一 (@ginrou799)

フーリエ変換と画像圧縮の仕組み

Embed Size (px)

Citation preview

フーリエ変換と画像圧縮第2回 プログラマのための数学勉強会

武田祐一 (@ginrou799)

自己紹介• Yuichi Takeda / @ginrou799

• 今

• ミクシィでiPhoneアプリの開発

• iOSの社内研修なども

• 本になりました http://goo.gl/OaLUDc

• オープンな勉強会として研修をやってます(無料、Androidと隔週)

• 昔

• 大学、大学院の専攻は画像処理

今日は昔取った杵柄についてお話します

画像と縞模様で分解

画像はいろいろなパターンの縞模様を足しあわせで 構成することができるらしいけど本当?

画像のファイルフォーマットとファイルサイズ

lenna.bmp 236 KB

lenna.png 158 KB

lenna.jpg 36 KB

画像のファイルフォーマットとファイルサイズ

lenna.bmp 236 KB

lenna.png 158 KB

なぜ、見た目はほぼ変わらないのにjpegの画像は ここまでファイルサイズが小さいのか?

なぜJPEGがこんなに高圧縮率を実現しているかを解説

lenna.jpg 36 KB

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

• 分かりやすさを優先するために、 • 厳密性に欠ける箇所 • 代替表現を用いている箇所

• があります

• 何か誤りがあったら指摘して下さい

おことわり

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

• 分かりやすさを優先するために、 • 厳密性に欠ける箇所 • 代替表現を用いている箇所

• があります

• 何か誤りがあったら指摘して下さい

おことわり

三角関数の復習 sin

2πごとに同じ形が表れる”周期関数”

周期

三角関数の復習 cos

2πごとに同じ形が表れる”周期関数” y = sin(x) を左にπ/2 だけ平行移動したもの

周期

三角関数と周波数

• xに係数を乗ずることで周期が短くなる • xの前の係数を周波数(frequency) と呼ぶ • 周波数が大きくなると、より反復の多いグラフになる

三角関数の重ね合せ三角関数をいろいろ重ねあわせることで様々なグラフを作ることが出来る例 )

三角関数の重ね合せ三角関数をいろいろ重ねあわせることで様々なグラフを作ることが出来る例 )

三角関数の重ね合せ三角関数をいろいろ重ねあわせることで様々なグラフを作ることが出来る例 )

三角関数の重ね合せ三角関数をいろいろ重ねあわせることで様々なグラフを作ることが出来る例 )

← 少し複雑な山のような形

三角関数の重ねあわせ

例 その2)

この怪しげな級数を足していくとどうなるのか? 足し合わせる数が無限大(∞)までなので その足しあわせの数を上げつつ様子 を見てみましょう

三角関数の重ねあわせ

例 その2)

k = 1 まで

三角関数の重ねあわせ

例 その2)

k = 2 まで

三角関数の重ねあわせ

例 その2)

k = 3 まで

三角関数の重ねあわせ

例 その2)

k = 10 まで

三角関数の重ねあわせ

例 その2)

k = 40 までもう少しkをスキップ もしかして直線?

三角関数の重ねあわせ

例 その2)

k = 100 まで これは直線や!!

なんと、うまいこと重ね合わせる ことで直線まで表現できる

一体どういう理屈..?

フーリエ級数展開

ジョゼフ・フーリエ

任意の関数は、三角関数の 級数で表すことができる

※wikipediaより

フーリエ級数展開

ジョゼフ・フーリエ

任意の関数は、三角関数の 級数で表すことができる

どんな関数でも、三角関数の足し算だけで置き換えれるぜ!

※wikipediaより

フーリエ級数展開

をフーリエ係数と呼ぶ

周期2πの周期関数について、以下のように近似できる様々な周波数のsin, cosの

重ねあわせ

※先ほどの例も y = x をフーリエ級数展開したもの

定数項もある

フーリエ級数展開の例

← 二次関数これのフーリエ級数は先ほどの式に代入すると

より

早速プロットして みましょう

フーリエ級数展開の例

← 二次関数

k = 0 から項の数を増やしてくにつれて、 グラフがどのように変化するかを 見てみましょう

k = 0

フーリエ級数展開の例

← 二次関数

k = 1

フーリエ級数展開の例

← 二次関数

k = 2

フーリエ級数展開の例

← 二次関数

k = 3

フーリエ級数展開の例

← 二次関数

k = 10

フーリエ級数展開の例

← 二次関数

k = 100

2次関数に 近似できている!

フーリエ級数展開の制約確かに三角関数で近似できそうだ。

ところでフーリエ変換は任意の関数について成立するの?

実は、以下の制約を満たす関数のみに限定される

1. 周期関数のみ(今回のケースだと周期は2π) 2. 区分的に滑らか (有限個の点を除いて連続かつ微分可能)

フーリエ級数展開の制約先ほどの y = x も y = x もフーリエ級数展開の制約を満たさない。そのような場合は、

1. 周期関数のみ(今回のケースだと周期は2π)→ 周期関数としてみなして近似される

2. 区分的に滑らか (有限個の点を除いて連続かつ微分可能)→ 滑らかでない点でギプスの現象が発生する

フーリエ級数展開の制約先ほどの y = x も y = x もフーリエ級数展開の制約を満たさない。そのような場合は、

1. 周期関数のみ(今回のケースだと周期は2π)→ 周期関数としてみなして近似される

2. 区分的に滑らか (有限個の点を除いて連続かつ微分可能)→ 滑らかでない点でギプスの現象が発生する

ギプスの現象 (ツノのように尖ってしまう)

周期関数のように近似されている

y = x のフーリエ級数展開の表示域をもっと広げると…

先ほどのグラフの範囲

フーリエ級数展開の制約先ほどの y = x も y = x2 もフーリエ級数展開の制約を満たさない。そのような場合は、

1. 周期関数のみ(今回のケースだと周期は2π)→ 周期関数としてみなして近似される

2. 区分的に滑らか (有限個の点を除いて連続かつ微分可能)→ 滑らかでない点でギプスの現象が発生する

フーリエ級数展開は近似を行うことができるが、 どんな関数も近似出来るわけではない

フーリエ係数と周波数フーリエ係数は、様々な周波数の三角関数の級数で表した時に各周波数がどれだけ含まれているかを表す

先ほどの y = x2 の場合

周波数 係数

定数項 π2/3

cos(x) -4

cos(2x) 1

cos(3x) -4/9

… …

フーリエ係数と周波数

このようにフーリエ係数を求めることで、関数がどのような周波数で構成されているかを調べることができる

周波数 係数

定数項 π2/3

cos(x) -4

cos(2x) 1

cos(3x) -4/9

… …

定数項や, cos(x), cos(2x)などの低い周波数の影響(振幅)が大きく、高い周波数ほどその影響(振幅)が小さくなっている

フーリエ変換このフーリエ係数を求める過程を拡張し、ある関数の周波数ごとの特性を表す関数に変換する変換をフーリエ変換という

フーリエ変換

数直線上のある点xにおいてどのような値を取るか

を返す関数

ある周波数ωに対してどのような値(特性)を取るか

を返す関数

係数みたいな数値じゃなくて関数として扱えるようにしようぜ!!

フーリエ変換の導出フーリエ級数展開を用いてフーリエ変換を導出します。

• フーリエ級数展開の複素数表現 • 任意の周期への拡張 • 無限周期への拡張 • フーリエ変換と逆フーリエ変換

時間がないので少し巻き気味に進めます。

フーリエ変換の導出• フーリエ級数展開の複素数表現フーリエ級数展開にはsinとcosの両方が入っていて 式が煩雑なので複素数を使って一つにまとめます

オイラーの公式( )を使うと, sin, cosを 以下のように置き換えることが出来ます

式が少しスッキリした!

フーリエ変換の導出• 任意の周期への拡張 今までのフーリエ級数展開は周期が2πを仮定していた。周期を2πからTへと変換する

2πがTになっただけ!

フーリエ変換の導出• 無限周期への拡張 フーリエ級数展開の式の中にフーリエ係数の式をねじ込みます

T → ∞ とすることで無限周期へと拡張します。この時、総和(Σ)は2π/T → ω を積分変数とする積分になります

ck

フーリエ変換の導出• フーリエ変換と逆フーリエ変換

この部分がフーリエ係数の式にあたる この部分だけ取り出したのがフーリエ変換

フーリエ変換 :

数直線上の表現(空間領域)から周波数による表現(周波数領域)への変換

逆フーリエ変換 :

周波数領域にある関数を元の空間領域に戻す変換

フーリエ変換の導出• フーリエ変換と逆フーリエ変換

この部分がフーリエ係数の式にあたる この部分だけ取り出したのがフーリエ変換

フーリエ変換 :

数直線上の表現(空間領域)から周波数による表現(周波数領域)への変換

逆フーリエ変換 :

周波数領域にある関数を元の空間領域に戻す変換

フーリエ変換、逆フーリエ変換を使うことである関数について周波数で表現したり、元の表現に戻したりすることができる

フーリエ変換の例• 例 )

いきなりフーリエ変換や周波数領域と言われてもなんのこっちゃっていう感じだと思うので

サンプルを紹介します

フーリエ変換すると

どんな周波数が含まれて いるかが分かりづらい

どんな周波数が含まれて いるかがひと目で分かる

空間領域 周波数領域

フーリエ係数展開とフーリエ変換

A :

• フーリエ変換はフーリエ係数をベースに広げたものなので、初見ではあまり違いはないように見えるかも

• 周期関数を仮定しなくても使えるようになった

• 関数を周波数による表現(特徴づけ)を行えるようになった

Q : フーリエ変換は、まぁ分かりました。 ただ、フーリエ級数展開とフーリエ変換は何が違うの?

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

離散データの取り扱い今までのフーリエ変換は連続値の関数を取り扱ってきたが、コンピュータで処理を行うためには離散的なデータ点で処理を行わなければならない

今まで取り扱ってきた”関数” 任意の値xを入力すると一意の出力が得られる

f(x) = sin(x)

コンピュータで取り扱うことのできる有限個のデータ点。既に出力結果は与えられており、”n番目の値”のような形でアクセス(いわゆる配列)

xn = [0.308, 0.586, 0.807…]

離散フーリエ変換N点からなる離散的なデータ点xn(n=0,1,...N-1)に対する離散フーリエ変換は以下のように定義される

• 離散データでは微分/積分 が厳密に計算できないので総和を用いる

• 有限個のデータ点なので、無限の総和を計算出来ない→ 周期Nの周期性を仮定

• xnに含まれる周波数は0~N-1 までを仮定する

jは虚数成分

ポイント

離散フーリエ変換の例

例 ) y = 3sin(x) + sin(7x) (0 ~ 2πの範囲で60点サンプリング)

xn = [0, 0.982, 1.618, 1.736, …]入力 : データ点

Xn = [0, 9, 0, 0, 0, 0, 0, 3, …]出力 : 離散フーリエ変換の結果

元の関数のピーク付近の周波数を含んでいる

関数の時と同じように、入力されるデータにどのような 周波数を含んでいるかを調べることができる

ここまでのまとめ

• 関数は三角関数の級数で表現できる(フーリエ級数展開)

• フーリエ変換を用いると、ある関数に含まれている周波数の分布を求めることができる

• 離散フーリエ変換を用いると、関数だけでなく任意のデータの周波数の分布を求めることができる

ここからは、これを2次元に拡張し、画像へと応用する

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

二次元離散フーリエ変換二次元離散フーリエ変換は以下のように定義される

• 入力は2次元のデータ点(2次元配列のようなもの)

• 2次元の様々な周波数の三角関数が入力にどれくらい含まれているを表す

二次元離散フーリエ変換二次元離散フーリエ変換は以下のように定義される

• 入力は2次元のデータ点(2次元配列のようなもの)

• 2次元の様々な周波数の三角関数が入力にどれくらい含まれているを表す

2次元の周波数の 三角関数??

二次元の周波数の三角関数端的には z = sin(ax) * sin(by) のような三角関数のこと

二次元の周波数の三角関数

Xu,v は 縦方向にu/2本のピークがあり、横方向にv/2本のピークのある 三角関数がどれくらい元のデータに含まれているか表してる

X0,1 X0,8 X0,16X0,0

X8,0 X8,1 X8,8 X8,16

X16,0 X16,1 X16,8 X16,16

画像のフーリエ変換

二次元のデータ点である画像をフーリエ変換すると

128

128

画像のフーリエ変換

二次元のデータ点である画像をフーリエ変換すると

128

128

画像にどのような周波数の 波が含まれているか表す

画像のフーリエ変換

二次元のデータ点である画像をフーリエ変換すると

128

128

このような波形がどのような割合で含まれているかを表す

画像のフーリエ変換

二次元のデータ点である画像をフーリエ変換すると

128

128

このような波形がどのような割合で含まれているかを表す

画像がどのような周波数からできているかを知ることが出来る! → この性質を利用すれば画像を再構成できる

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

画像のフーリエ変換と再構成やり方 フーリエ変換の値 を 対応する波形 に掛けてを足しあわせていく

7.49×106 -5.53×105 … 8.98×103

3.81×105 2.84×105 … -4.95×103

… … … …

1.00×103 -1.69×103 … 3.29×103

Xu,v =…

再構成結果

… …

再構成できた!

コードあげてます

https://gist.github.com/ginrou/5e443b42aabe73664b41

コードあげてます

https://gist.github.com/ginrou/5e443b42aabe73664b41

目次

• 三角関数の復習

• フーリエ級数展開

• フーリエ変換

• 離散フーリエ変換

• 2次元離散フーリエ変換

• 画像のフーリエ変換

• 画像圧縮

画像圧縮画像圧縮には、フーリエ変換をすることで分かる、周波数の偏りを利用して行う

画像圧縮画像圧縮には、フーリエ変換をすることで分かる、周波数の偏りを利用して行う

画像における周波数の偏り私達がよく目にする画像は、周波数の低い成分が多く、高い成分が少ないという傾向がある

多い

少ない画像 フーリエ変換

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

35 38 55 90 65 50 72 163

40 42 68 112 77 56 66 157

66 66 90 108 74 53 87 177

84 91 83 72 57 66 126197

90 80 76 55 65 113173207

60 57 64 77 107160198208

65 75 88 127158188202203

102116137163186197198202

• 画像全体を 8×8 のブロックに分割する

• 例えば320×320の画像の場合は40×40 = 1600 個のブロックができる

• 以降の処理は各ブロックごとに行う

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

35 38 55 90 65 50 72 163

40 42 68 112 77 56 66 157

66 66 90 108 74 53 87 177

84 91 83 72 57 66 126197

90 80 76 55 65 113173207

60 57 64 77 107160198208

65 75 88 127158188202203

102116137163186197198202

• 各ブロックを離散コサイン変換を行う

• 離散コサイン変換は離散フーリエ変換の基底関数を変えたもの(離散フーリエ変換の親戚のようなもの)

1136.0 -292.3 83.3 -237.2 195.2 -32.0 23.7 -52.9

1236.0 -242.4 2.5 -247.6 217.8 -20.0 35.7 -67.7

1442.0 -198.3 120.4 -286.7 182.4 -11.2 28.2 -25.1

1552.0 -255.1 332.9 -224.3 62.2 -25.3 -9.3 -6.4

1718.0 -429.2 376.0 -74.6 -35.4 21.4 17.2 15.8

1862.0 -643.2 178.9 30.5 -38.2 24.8 7.0 -1.9

2212.0 -605.1 -30.6 50.7 0.0 5.2 -14.9 -18.2

2602.0 -408.2 -98.5 9.0 7.1 -11.9 2.5 -2.6

低周波数

高周波数画像 離散コサイン変換

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

• 離散コサイン変換の結果の浮動小数点を量子化して整数にする

1136.0 -292.3 83.3 -237.2 195.2 -32.0 23.7 -52.9

1236.0 -242.4 2.5 -247.6 217.8 -20.0 35.7 -67.7

1442.0 -198.3 120.4 -286.7 182.4 -11.2 28.2 -25.1

1552.0 -255.1 332.9 -224.3 62.2 -25.3 -9.3 -6.4

1718.0 -429.2 376.0 -74.6 -35.4 21.4 17.2 15.8

1862.0 -643.2 178.9 30.5 -38.2 24.8 7.0 -1.9

2212.0 -605.1 -30.6 50.7 0.0 5.2 -14.9 -18.2

2602.0 -408.2 -98.5 9.0 7.1 -11.9 2.5 -2.6

(量子化の結果) = [Xu,v / (pu,v / 2)]

Xu,v : 離散コサイン変換の値 pu,v : 量子化幅

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

• 周波数ごとに量子化幅が違う

• 左上(低周波数)の方が量子化幅が小さい= より密に情報を残す

• 右下(高周波数)に行くに連れて量子化幅が大きくなる = 情報をあまり残さない

量子化幅16 11 10 16 24 40 51 61

12 12 14 19 26 58 60 55

14 13 16 24 40 57 68 56

14 17 22 29 51 87 80 62

18 22 37 56 68 109113 92

24 35 55 64 81 104113 92

49 64 78 87 103121130101

72 92 95 98 112100103 99

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

量子化幅16 11 10 16 24 40 51 61

12 12 14 19 26 58 60 55

14 13 16 24 40 57 68 56

14 17 22 29 51 87 80 62

18 22 37 56 68 109 113 92

24 35 55 64 81 104 113 92

49 64 78 87 103 121 130 101

72 92 95 98 112 100 103 99

1136.0-292.383.3-237.2195.2-32.023.7-52.9

1236.0-242.42.5-247.6217.8-20.035.7-67.7

1442.0-198.3120.4-286.7182.4-11.228.2-25.1

1552.0-255.1332.9-224.362.2-25.3-9.3 -6.4

1718.0-429.2376.0-74.6-35.421.417.215.8

1862.0-643.2178.930.5-38.224.8 7.0 -1.9

2212.0-605.1-30.650.7 0.0 5.2 -14.9-18.2

2602.0-408.2-98.5 9.0 7.1 -11.9 2.5 -2.6

離散コサイン変換

1136.0 16量子化後の値 = [Xu,v / (pu,v / 2)]

= [1136.0/(16/2)] = [142.0] = 142

例(0,0) の位置

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割1136.0-292.3 83.3 -237.2 195.2 -32.0 23.7 -52.9

1236.0-242.4 2.5 -247.6 217.8 -20.0 35.7 -67.7

1442.0-198.3 120.4 -286.7 182.4 -11.2 28.2 -25.1

1552.0-255.1 332.9 -224.3 62.2 -25.3 -9.3 -6.4

1718.0-429.2 376.0 -74.6 -35.4 21.4 17.2 15.8

1862.0-643.2 178.9 30.5 -38.2 24.8 7.0 -1.9

2212.0-605.1 -30.6 50.7 0.0 5.2 -14.9 -18.2

2602.0-408.2 -98.5 9.0 7.1 -11.9 2.5 -2.6

142 -53 16 -29 16 -1 0 -1

206 -40 0 -26 16 0 1 -2

206 -30 15 -23 9 0 0 0

221 -30 30 -15 2 0 0 0

190 -39 20 -2 -1 0 0 0

155 -36 6 0 0 0 0 0

90 -18 0 1 0 0 0 0

72 -8 -2 0 0 0 0 0

離散コサイン変換の結果 量子化の結果 → 多くの要素が0になった

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

142 -53 16 -29 16 -1 0 -1

206 -40 0 -26 16 0 1 -2

206 -30 15 -23 9 0 0 0

221 -30 30 -15 2 0 0 0

190 -39 20 -2 -1 0 0 0

155 -36 6 0 0 0 0 0

90 -18 0 1 0 0 0 0

72 -8 -2 0 0 0 0 0

量子化の結果

• (0,0)の要素からジグザグに平坦化する

• この時、残りの要素が全てゼロとなる点までで打ち切る

142,-53,206,206,-40,16,-29,0,-30,221,190,-30-15,-2616,-1,0,0,9,-15,20,-36,90,72,-18,6,-2,2,0,1,-2,0,0,-1,0,0,-8,-2,1 <終端>

JPEG圧縮

ジグザグスキャン量子化離散コサイン

変換8x8に分割

142,-53,206,206,-40,16,-29,0,-30,221,190,-30-15,-2616,-1,0,0,9,-15,20,-36,90,72,-18,6,-2,2,0,1,-2,0,0,-1,0,0,-8,-2,1 <終端>

49byte

35 38 55 90 65 50 72 163

40 42 68 112 77 56 66 157

66 66 90 108 74 53 87 177

84 91 83 72 57 66 126197

90 80 76 55 65 113173207

60 57 64 77 107160198208

65 75 88 127158188202203

102116137163186197198202

8x8=64byte

圧縮

• この例では75%ほどの圧縮率だが、ブロック内で明るさに変化が少ないとより圧縮率は向上する

• さらにランレングス符号化やハフマン符号化も行う

まとめ

• フーリエ級数展開を用いると様々な関数を三角関数の級数で表現できる

• フーリエ変換、離散フーリエ変換を用いることで様々な関数やデータがどのような周波数を含んでいるかを調べることができる

• 画像は様々な周期の縞模様から再構成できる

• JPEGは画像に含まれる周波数の偏りを利用して圧縮を行っている

ご静聴ありがとうございました