傅里葉變換


title: 傅里葉變換
date: 2019-06-10 23:46
categories: 數(shù)學
tags: [數(shù)學, 圖像處理]
keywords: FFT, 傅里葉變換, 圖像處理
mathjax: true
description:
圖像處理中, 為了方便處理速址,便于抽取特征,數(shù)據(jù)壓縮等目的碗暗,常常要將圖形進行變換,這篇文章介紹一下傅里葉變換


圖像處理中, 為了方便處理临扮,便于抽取特征积蜻,數(shù)據(jù)壓縮等目的试伙,常常要將圖像進行變換劈狐。
一般有如下變換方法

  1. 傅立葉變換Fourier Transform
  2. 離散余弦變換Discrete Cosine Transform
  3. 沃爾希-哈德瑪變換Walsh-Hadamard Transform
  4. 斜變換Slant Transform
  5. 哈爾變換Haar Transform
  6. 離散K-L變換Discrete Karhunen-Leave Transform
  7. 奇異值分解SVD變換Singular-Value Decomposition
  8. 離散小波變換Discrete Wavelet Transform

這篇文章介紹一下傅里葉變換

定義

連續(xù)

積分形式
如果一個函數(shù)的絕對值的積分存在,即
\int_{-\infty} ^\infty |h(t)|dt<\infty
并且函數(shù)是連續(xù)的或者只有有限個不連續(xù)點县匠,則對于 x 的任何值, 函數(shù)的傅里葉變換存在

  • 一維傅里葉變換
    H(f)=\int_{-\infty} ^\infty h(t)e^{-j2\pi ft}dt
  • 一維傅里葉逆變換
    H(f)=\int_{-\infty} ^\infty h(t)e^{j2\pi ft}dt
    同理多重積分

離散

實際應用中撒轮,多用離散傅里葉變換 DFT.

  • 一維傅里葉變換
    F(u)=\sum_{x=0} ^{N-1} f(x)e^{\frac{-2\pi j}{N} ux}
  • 一維傅里葉逆變換
    f(x)=\frac{1}{N}\sum_{u=0} ^{N-1} F(u)e^{\frac{2\pi j}{N} ux}
    需要注意的是乞旦, 逆變換乘以 \frac{1}{N} 是為了歸一化,這個系數(shù)可以隨意改變题山, 即可以正變換乘以 \frac{1}{N}, 逆變換就不乘兰粉,或者兩者都乘以\frac{1}{\sqrt{N}}等系數(shù)。
  • 二維傅里葉變換
    F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}\sum_{y=0} ^{N-1} f(x,y)e^{\frac{-2\pi j}{N} (ux+vy)}
  • 二維傅里葉逆變換

f(x,y)=\frac{1}{N}\sum_{u=0}^{N-1}\sum_{v=0} ^{N-1} F(u,v)e^{\frac{2\pi j}{N} (ux+vy)}

幅度
|F(u,v)| = \sqrt{real(F)^2+imag(F)^2}
相位
arctan{\frac{imag(F)}{real(F)}}
對于圖像的幅度譜顯示顶瞳,由于 |F(u,v)| 變換范圍太大玖姑,一般顯示 D= log(|F(u,v)+1)

<=> 表示傅里葉變換對
f(x)<=>F(u)\\ f(x,y)<=>F(u,v)

f,g,h 對應的傅里葉變換 F,G,H

F^* 表示 F 的共軛

性質

分離性

\begin{aligned} &F(x,v)=\sum_{y=0} ^{N-1} f(x,y)e^{\frac{-2\pi j}{N} vy}\\ &F(u,v)=\frac{1}{N}\sum_{x=0}^{N-1}F(x,v)e^{\frac{-2\pi j}{N}ux} \end{aligned}
進行多維變換時,可以依次對每一維進行變換慨菱。 下面在代碼中就是這樣實現(xiàn)的焰络。

位移定理

f(x,y)e^{\frac{2\pi j}{N}(u_0x+v_0y)} <=>F(u-u_0,v-v_0)
f(x-x_0,y-y_0)<=>F(u,v)e^{\frac{-2\pi j}{N}(ux_0+vy_0)}

周期性

F(u,v) = F(u+N,v+N)

共軛對稱性

F(u,v) = F^*(-u,-v)
a)偶分量函數(shù)在變換中產生偶分量函數(shù);
b)奇分量函數(shù)在變換中產生奇分量函數(shù);
c)奇分量函數(shù)在變換中引入系數(shù)-j;
d)偶分量函數(shù)在變換中不引入系數(shù).

旋轉性

if f(r,\theta)<=>F(\omega,\phi)
then f(r,\theta+t)<=>F(\omega,\phi+t)

加法定理

Fourier[f+g]=Fourier[f]+Fourier[g]

af(x,y)<=>aF[u,v]

平均值

\frac{1}{N^2}\sum_{x=0}^{N-1}\sum_{y=0} ^{N-1} f(x,y) = \frac{1}{N}F(0,0)

相似性定理

尺度變換
f(ax,by)<=>\frac{F(\frac{u}{a},\frac{v})}{ab}

卷積定理

卷積定義
1d
f*g = \frac{1}{M}\sum_{m=0}^{M-1}f(m)g(x-m)
2d
f(x,y)*g(x,y) = \frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)g(x-m,y-n)

卷積定理
f(x,y)*g(x,y) <=> F(u,v)G(u,v)
f(x,y)g(x,y)<=>F(u,v)*G(u,v)

離散卷積

\sum_{i=0}^{N-1}x(iT)h[(k-i)T] <=> X(\frac{n}{NT})H(\frac{n}{NT})
即兩個周期為 N 的抽樣函數(shù)符喝, 他們的卷積的離散傅里葉變換等于他們的離散傅里葉變換的卷積

卷積的應用:
去除噪聲闪彼, 特征增強
兩個不同周期的信號卷積需要周期擴展的原因:如果直接進行傅里葉變換和乘積,會產生折疊誤差(卷繞)协饲。

相關定理

下面用\infty 表示相關畏腕。
相關函數(shù)描述了兩個信號之間的相似性,其相關性大小有相關系數(shù)衡量

  • 相關函數(shù)的定義
    離散
    f(x,y)\quad \infty \quad g(x,y) = \frac{1}{MN}\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f^*(m,n)g(x+m,y+n)
    連續(xù)
    z(t) = \int_{-\infty}^{\infty}x^*(\tau) h(t+\tau)d\tau
  • 定理
    f(x,y)\quad \infty \quad g(x,y)<=>F^*(u,v)G(u,v)

Rayleigh 定理

能量變換
對于有限區(qū)間非零函數(shù) f(t), 其能量為
E = \int_{-\infty}^{\infty}|f(t)|^2dt

其變換函數(shù)與原函數(shù)有相同的能量
\int_{-\infty}^{\infty}|f(t)|^2dt = \int_{-\infty}^{\infty}|F(u)|^2dt

快速傅里葉變換

由上面離散傅里葉變換的性質易知茉稠,直接計算 1維 dft 的時間復雜度維 O(N^2)郊尝。

利用到單位根的對稱性,快速傅里葉變換可以達到 O(nlogn)的時間復雜度战惊。

復數(shù)中的單位根

我們知道流昏, 在復平面,復數(shù) cos\theta +i\ sin\thetak可以表示成 e^{i\theta}吞获, 可以對應一個向量况凉。\theta即為幅角。
單位圓中 各拷,單位圓被分成 \frac{2\pi}{\theta} 份刁绒, 由單位圓的對稱性
e^{i\theta} = e^{i(\theta+2\pi)}
現(xiàn)在記 n =\frac{ 2\pi }{\theta} , 即被分成 n 份烤黍,幅度角為正且最小的向量稱為 n 次單位向量知市, 記為\omega _n傻盟,
其余的 n-1 個向量分別為 \omega_{n}^{2},\omega_{n}^{3},\ldots,\omega_{n}^{n} ,它們可以由復數(shù)之間的乘法得來 w_{n}^{k}=w_{n}^{k-1}\cdot w_{n}^{1}\ (2 \leq k \leq n)嫂丙。
單位根的性質

  1. 這個可以用 e 表示出來證明
    \omega_{2n}^{2k}=\omega_{n}^{k}
  2. 可以寫成三角函數(shù)證明
    \omega_{n}^{k+\frac{n}{2}}=-\omega_{n}^{k}

容易看出 w_{n}^{n}=w_{n}^{0}=1娘赴。

對于w_{n}^{k} , 它事實上就是 e^{\frac{2\pi i}{n}k}

快速傅里葉變換的計算

下面的推導假設 n=2^k跟啤,以及代碼實現(xiàn) FFT 部分也是 如此诽表。

利用上面的對稱性,
將傅里葉計算進行奇偶分組
\begin{aligned} F(u)&=\sum_{i=0}^{n-1}\omega_n ^{iu} a^i\\ &= \sum_{i=0}^{\frac{n}{2}-1}\omega_n ^{2iu} a^{2i}+\sum_{i=0}^{\frac{n}{2}-1}\omega_n ^{(2i+1)u} a^{2i+1}\\ &=\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}} ^{iu} a^{2i}+\omega_n^u\sum_{i=0}^{\frac{n}{2}-1}\omega_{\frac{n}{2}} ^{iu} a^{2i+1}\\ & = F_{even}(u)+\omega_n^u F_{odd}(u) \end{aligned}
F_{even}表示將 輸入的次序中偶數(shù)點進行 Fourier 變換隅肥, F_{odd} 同理竿奏,這樣就形成遞推公式。
現(xiàn)在還沒有減少計算量腥放,下面通過將分別計算的 奇項泛啸,偶項利用起來,只計算 前 \frac{n}{2}-1項秃症,后面的一半可以利用此結果馬上算出來候址。每一次可以減少一半的計算量。

對于 \frac{n}{2}\leq i+\frac{n}{2}\leq n-1
\begin{aligned} F(\omega_{n}^{i+\frac{n}{2}})&=F_{even}(\omega_{n}^{2i+n})+\omega_{n}^{i+\frac{n}{2}}\cdot F_{odd}(\omega_{n}^{2i+n})\\ &=F_{even}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})+\omega_{\frac{n}{2}}^{i+\frac{n}{2}}\cdot F_{odd}(\omega_{\frac{n}{2}}^{i+\frac{n}{2}})\\ & =F_{even}(\omega_{\frac{n}{2}}^{i})-\omega_{\frac{n}{2}}^{i}\cdot F_{odd}(\omega_{\frac{n}{2}}^{i}) \end{aligned}
現(xiàn)在很清楚了伍纫,在每次計算 a[0..n-1] 的傅里葉變換F[0..n-1]宗雇,分別計算出奇 odd[0..n/2-1],偶even[0..n/2-1](可以遞歸地進行)莹规,
那么傅里葉變換為:
F[i] = \begin{cases} even[i]+ \omega^i \cdot odd[i], \quad i<\frac{n}{2}\\ even[i]- \omega^i \cdot odd[i], \quad else \end{cases}

代碼

下面是 python 實現(xiàn)
一維用 FFT 實現(xiàn)赔蒲, 不過 只實現(xiàn)了 2 的冪。/ 對于非 2 的冪良漱,用 FFT 實現(xiàn)有點困難舞虱,還需要插值,所以我 用O(n^2) 直接實現(xiàn)母市。

二維的 DFT利用 分離性矾兜,直接調用 一維 FFT。
GitHub

import numpy as np


def _fft(a, invert=False):
    N = len(a)
    if N == 1:
        return [a[0]]
    elif N & (N - 1) == 0:  # O(nlogn),  2^k
        even = _fft(a[::2], invert)
        odd = _fft(a[1::2], invert)
        i = 2j if invert else -2j
        factor = np.exp(i * np.pi * np.arange(N // 2) / N)
        prod = factor * odd
        return np.concatenate([even + prod, even - prod])
    else:  # O(n^2)
        w = np.arange(N)
        i = 2j if invert else -2j
        m = w.reshape((N, 1)) * w
        W = np.exp(m * i * np.pi / N)
        return np.concatenate(np.dot(W, a.reshape(
            (N, 1))))  # important, cannot use *


def fft(a):
    '''fourier[a]'''
    n = len(a)
    if n == 0:
        raise Exception("[Error]: Invalid length: 0")
    return _fft(a)


def ifft(a):
    '''invert fourier[a]'''
    n = len(a)
    if n == 0:
        raise Exception("[Error]: Invalid length: 0")
    return _fft(a, True) / n


def fft2(arr):
    return np.apply_along_axis(fft, 0,
                               np.apply_along_axis(fft, 1, np.asarray(arr)))


def ifft2(arr):
    return np.apply_along_axis(ifft, 0,
                               np.apply_along_axis(ifft, 1, np.asarray(arr)))


def test(n=128):
    print('\nsequence length:', n)
    print('fft')
    li = np.random.random(n)
    print(np.allclose(fft(li), np.fft.fft(li)))

    print('ifft')
    li = np.random.random(n)
    print(np.allclose(ifft(li), np.fft.ifft(li)))

    print('fft2')
    li = np.random.random(n * n).reshape((n, n))
    print(np.allclose(fft2(li), np.fft.fft2(li)))

    print('ifft2')
    li = np.random.random(n * n).reshape((n, n))
    print(np.allclose(ifft2(li), np.fft.ifft2(li)))


if __name__ == '__main__':
    for i in range(1, 3):
        test(i * 16)

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末患久,一起剝皮案震驚了整個濱河市椅寺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒋失,老刑警劉巖返帕,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異篙挽,居然都是意外死亡荆萤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來链韭,“玉大人偏竟,你說我怎么就攤上這事〕ㄇ停” “怎么了踊谋?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長儡陨。 經常有香客問我褪子,道長量淌,這世上最難降的妖魔是什么骗村? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呀枢,結果婚禮上胚股,老公的妹妹穿的比我還像新娘。我一直安慰自己裙秋,他們只是感情好琅拌,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摘刑,像睡著了一般进宝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枷恕,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天党晋,我揣著相機與錄音,去河邊找鬼徐块。 笑死未玻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的胡控。 我是一名探鬼主播扳剿,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昼激!你這毒婦竟也來了庇绽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤橙困,失蹤者是張志新(化名)和其女友劉穎瞧掺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纷宇,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡夸盟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了像捶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片上陕。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡桩砰,死狀恐怖,靈堂內的尸體忽然破棺而出释簿,到底是詐尸還是另有隱情亚隅,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布庶溶,位于F島的核電站煮纵,受9級特大地震影響,放射性物質發(fā)生泄漏偏螺。R本人自食惡果不足惜行疏,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望套像。 院中可真熱鬧酿联,春花似錦、人聲如沸夺巩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柳譬。三九已至喳张,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間美澳,已是汗流浹背销部。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留人柿,地道東北人柴墩。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像凫岖,于是被迫代替她去往敵國和親江咳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容