...

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

by yuichi-takeda

on

Report

Category:

Engineering

Download: 0

Comment: 0

85,643

views

Comments

Description

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

Transcript

  • フーリエ変換と画像圧縮 第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は画像に含まれる周波数の偏りを利用して圧縮を 行っている
  • ご静聴ありがとうございました
Fly UP