【動画講座】フーリエ変換と画像圧縮

リンク

https://www.youtube.com/watch?v=xs79UkAEGxc&t=152s
https://www.slideshare.net/ginrou799/ss-46355460

画像


内容

フーリエ級数

基本的に関数$f(x)$があったとする。
つまり$x$が定まると値$y$が定まる関数があったとする。

このとき、この関数$f$は、三角関数を大量に無限に集める(級数)をすることで、ほぼ完璧に近似できる。

これをフーリエ級数という。

式としては

$$f(x) = a_0 / 2 + {\sum}_{k=1}^{\inf} (a_k{\cos}(kx) + b_k{\sin}(kx)) $$

$$a_k = 1/{\pi} {\int}_{- \pi}^{\pi} f(x) cos(kx) dx$$

$$b_kはa_kのcosがsinのやつ$$

として表される。

問題はこれがどういう意味か?ということである。

f(x)は、元々のオリジナル関数$f$が、$a_0/2$と$k=1~inf$の$cos(kx)$の足し合わせで表現される ということを表している。
よって、例えば、$x=3$について考えるとする。
この$f(3)$の値は、$k=1{\to}inf$の$a_kcos(k3) + b_ksin(k3)$の和で表される。

また、$a_k$は、関数$f(x)$の各$k$についてのフーリエ係数を求めている。この中で出てくる$f(x)$は元々のオリジナル関数を積分したもの、という意味である。

よって、$f=x^2$という式なら

$a_3 = 1/{\pi} {\int}_{-{\pi}}^{\pi} x^2 cos(3x) dx$

となる。

このように、元々のオリジナルの関数を各$k$の場合でグラフを作って積分して
その係数の値を元々の各$x$についての各$cos(kx), sin(kx)$にかければ$f(x)$を近似できる。

フーリエ級数の制約

フーリエ級数では、$[-\pi, \pi]$に周期を絞っているため、周期関数しか扱うことができない。(周期関数以外も扱えるが、上記の範囲しか禁じできず、これらが繰り返される形になる。)

そこで、拡張していきたいお気持ちになる。

周波数

フーリエ級数は、三角関数で表すときの周波数を表す。
つまり、各$sinkx, coskx$がどれくらいの大きさで含まれるか?というものである。

フーリエ変換

フーリエ変換は、このフーリエ級数を取り出す計算式である。
つまり、各$f(x)$をある三角関数$cos(kx), sin(kx)$の和で表すとき
各$cos(kx)$の係数$a_k, b_k$が必要である。

そこで、このフーリエ級数$a_k, b_k$を求めることで、
数直線上で考えていたものを
ある意味周波数の特性で離散的に取り出そうというものである。

よって、ある周波数$w=4$(これは実質的に元の$a_k$の式ならk)の成分を、簡単に一個の式$F(\omega)$で表現しよう、というものである。

フーリエ変換の導出

フーリエ変換の形にするために、いくつかのステップがいる。

  1. $e^{i\theta} = cos{\theta} + isin{\theta}$のオイラーの公式を使って、簡単な式にする。
  2. 周期の拡張を行う。先ほど前は$[-{\pi}, {\pi}]$の間までだったが、これを$[-T/2, T/2]$の大きさ$T$として変数に置いてあげる。
  3. $f(x)$の式に$C_k$以降の式を代入して一括にしてあげる。ここで、$x$という変数がかぶってしまうため、$t$という変数にしてかぶらないようにする。
  4. 周期$T$を無限大にする。また、$k$という変数を${\omega}$とおきかえ、この${\omega}$は、${\omega} = 2{\pi}/T$を満たすこととする。

$T$を無限大、$k$を${\omega}$として、${\omega} = 2{\pi}/T$にするところが厄介。(ちゃんとwか合ってない)
ここで、${\sum}$が${\int}$になる。(急に連続値になるな、でも$T$を無限大にしているので関係ないのか)

よって、これによってフーリエ級数部分は最後の導入式の係数部分を計算する式である

$$F({\omega}) = {\int}_{-{\inf}}^{\inf} f(t) e^{-i{\omega}t}dt$$

となる。

$F({\omega}=3)$は、元々の$f(x)$におけるすべての$x$での
$k={\omega}=3$,$coskx = cos{\omega}x = cos3x$
の係数を表す。(sin)も同様

cos, sinが一個の式$F({\omega})$で計算されているようにみえるが
後でオイラーで分解するので大丈夫である。

よって、結局フーリエ変換の式は、ただ各周波数の大きさを求めているだけにすぎない。

これ積分がつらすぎないか?

逆フーリエ変換

フーリエ変換は、数直線上の値を、離散的に各三角関数の周波数空間の大きさで表現する変換である。($x$の値は木にせず、${\omega}, k$は係数はどうなる?だけ考える。これは発散させているからである?)

逆フーリエ変換は、周波数空間の大きさから、元の数直線の表現式を求めるものである。
なるほどなぁ

フーリエ変換の例

画像参照

離散フーリエ

これらは、数学的な話であり、現実的なコンピュータで無限に計算することは当然できない。
そこで、有限な点$x_i$を$N$点とてって、その値を利用することでフーリエ変換をする。

フーリエ変換の式は

$X_k = {\sum}_{n=0}^{N-1} x_ne^{-j2{\pi}kn/N}$

で表される。
ただし、$x_n$は、数直線上で取った点を表す。
ここで、$X_k$は、周波数成分$kx$の$k$を表す。はず

離散フーリエ変換

離散フーリエ変換によって、コンピュータでうまく周波数に変換できる。
これによって、インターネットの電気信号の伝播などもうまくいく。
(周波数のほうが同時に多くの情報を遅れる、つまり、時間$t$に依存しづらい。)

また、この動画講座での画像という面では、いらない周波数をカットすることでデータ容量を減らせる。
高い周波数は画像には少なく(エッジ)、小さい周波数しかないため、その小さい周波数に多くビットを割けば良いからである。

感想

すこし、フーリエのお気持ちが分かった。
ただ、畳込みなへんがわかっていないので、勉強しないと駄目だなぁ