SlideShare a Scribd company logo
1 of 100
Download to read offline
フーリエ変換と画像圧縮
第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 126 197
90 80 76 55 65 113 173 207
60 57 64 77 107 160 198 208
65 75 88 127 158 188 202 203
102 116 137 163 186 197 198 202
• 画像全体を 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 126 197
90 80 76 55 65 113 173 207
60 57 64 77 107 160 198 208
65 75 88 127 158 188 202 203
102 116 137 163 186 197 198 202
• 各ブロックを離散コサイ
ン変換を行う
• 離散コサイン変換は離散

フーリエ変換の基底関数
を変えたもの(離散フーリ
エ変換の親戚のようなも
の)
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 126 197
90 80 76 55 65 113 173 207
60 57 64 77 107 160 198 208
65 75 88 127 158 188 202 203
102 116 137 163 186 197 198 202
8x8=64byte
圧縮
• この例では75%ほどの圧縮率だが、ブロック内で明るさ
に変化が少ないとより圧縮率は向上する
• さらにランレングス符号化やハフマン符号化も行う
まとめ
• フーリエ級数展開を用いると様々な関数を三角関数の級
数で表現できる
• フーリエ変換、離散フーリエ変換を用いることで様々な
関数やデータがどのような周波数を含んでいるかを調べる
ことができる
• 画像は様々な周期の縞模様から再構成できる
• JPEGは画像に含まれる周波数の偏りを利用して圧縮を
行っている
ご静聴ありがとうございました

More Related Content

What's hot

What's hot (20)

【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
 
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE
 
Lucas kanade法について
Lucas kanade法についてLucas kanade法について
Lucas kanade法について
 
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
 

Viewers also liked

拡大縮小から始める画像処理
拡大縮小から始める画像処理拡大縮小から始める画像処理
拡大縮小から始める画像処理
yuichi takeda
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Masayuki Ozawa
 

Viewers also liked (20)

「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
 
エニグマ暗号とは何だったのか
エニグマ暗号とは何だったのかエニグマ暗号とは何だったのか
エニグマ暗号とは何だったのか
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
 
拡大縮小から始める画像処理
拡大縮小から始める画像処理拡大縮小から始める画像処理
拡大縮小から始める画像処理
 
20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet
 
為替と株の予測の話
為替と株の予測の話為替と株の予測の話
為替と株の予測の話
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
 
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
 
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
[Japan Tech summit 2017] SEC 003
[Japan Tech summit 2017] SEC 003[Japan Tech summit 2017] SEC 003
[Japan Tech summit 2017] SEC 003
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
MySQLテーブル設計入門
MySQLテーブル設計入門MySQLテーブル設計入門
MySQLテーブル設計入門
 

More from yuichi takeda (6)

Cvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめCvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめ
 
iOS Traning #0
iOS Traning #0iOS Traning #0
iOS Traning #0
 
Jenkins on-mac
Jenkins on-macJenkins on-mac
Jenkins on-mac
 
Depth From Sequence
Depth From SequenceDepth From Sequence
Depth From Sequence
 
App dojo-2014-03-27
App dojo-2014-03-27App dojo-2014-03-27
App dojo-2014-03-27
 
130624 auto layout
130624 auto layout130624 auto layout
130624 auto layout
 

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