[Opencv] 画像フーリエ変換

1.DFT変換の基本原理

単純な連続関数のフーリエ変換を求めます。
f ( t ) = { A t ∈ [ − w / 2 , w / 2 ] 1 else f(t)= \begin{cases} A& t\in[-w/ 2 、2 付き]\\ 1& \text{else} \end{cases}f ( t )={ 1t[ w /2 ,w /2 ]それ以外

F ( u ) = ∫ − w / 2 w / 2 A e − j 2 π utdt = − A j 2 π u [ e − j 2 π ut ] − w / 2 w / 2 = − A j 2 π u [ e − j π uw − ej π uw ] \begin{align} F(u) =& \int_{-w/2} ^{w/2} Ae^{-j2\pi ut}dt \\ =& \ frac{-A}{j2\pi u}[e^{-j2\pi ut}]_{-w/2} ^{w/2} \\ =&\frac{-A}{j2\pi u }[e^{-j\pi uw} - e^{j\pi uw}] \end{align}F ( u )===w /2w / 2あえ_j 2 π u t dtj 2 π u−A _[ ej 2 π u t ]w /2w / 2j 2 π u−A _[ eu weジュウウウウウウウウウウウウウウウウウウ
形式: sin ⁡ θ = ( ej θ − e − j θ ) / 2 j \sin \theta = (e^{j \theta} - e^{-j\theta}) /2j=( e_ej θ )/2j
F ( u ) = A w sin ⁡ ( π uw ) π uw F(u) = A w\frac{\sin(\pi uw)}{\pi uw}F ( u )=ああ_πうわ_( π u w )
そのイメージは次のとおりです。
ここに画像の説明を挿入します
通常、フーリエ変換には、変換の大きさを表示するための規則である複素項が含まれています。この振幅はフーリエ スペクトルまたはスペクトルと呼ばれます:
∣ F ( u ) ∣ = AW sin ⁡ ( π uw ) π uw |F(u)| = AW\frac{\sin(\pi uw)}{\pi uw}F ( u ) =AW _πうわ_( π u w )
上の写真から見つけることができます

  • F ( u ) F( u )F ( u )∣ F ( u ) ∣ |F(u)|F ( u ) ∣ はボックス関数の幅 W に反比例します。
  • 原点からの距離が長くなるほど、サイドローブの高さは低くなります。
  • この関数は、u を正および負の方向に無限に拡張することを要求します。

1.1 順変換:

F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( μ x / M + vy / N ) (1.1) F(u,v ) = \sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(\mu x/M + vy/ N)} \tag{1.1}F ( u ,v )=x = 0M 1y = 0N 1f ( x ,そしてej 2 π ( μx / M + v y / N )( 1.1 )

  • NNN は画像の行を表します
  • んんM は画像の列を表します
  • f ( x , y ) f(x,y)f ( x ,y )はピクセル値を表します

1.2 逆変換:

f ( x , y ) = 1 MN ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ( u , v ) ej 2 π ( ux / M + vy / N ) (1.2) f(x,y) =\frac{1}{MN}\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)e^{j2\pi(ux/ M+vy/N)} \tag{1.2}f ( x ,y )=ミネソタ州1u = 0M 1v = 0N 1F ( u ,v ) ej 2 π ( ux / M + v y / N )( 1.2 )

1.3 オイラーの公式:

ej θ = cos ⁡ θ + j sin ⁡ θ (1.3) e^{j\theta} = \cos \theta + j \sin\theta \tag{1.3}e_=コス+j( 1.3 )
オイラーの公式を使用してフーリエ変換を変形すると、フーリエ変換の複素形式を取得できます。

1.4 周波数領域解析

周波数領域分析は、F (u, v) F(u, v) を分析することです。F ( u ,v )には以下が含まれます:

  • ∣ F ( u , v ) ∣ |F(u,v)|F ( u ,v ) : 振幅
  • ej θ ( u , v ) e^{j\theta(u,v)}ejθ(u,v) : 相角
  • R ( u , v ) R(u, v)R ( u ,v ) : 実部
  • i I ( u , v ) iI(u,v)あなたv ) : 虚数部

2 次元関数の f 振幅スペクトル:
∣ F ( u , v ) ∣ = [ R 2 ( u , v ) + I 2 ( u , v ) ] 1 / 2 (1.4) |F(u,v) | = [R^2(u,v) + I^2(u,v)]^{1/2} \tag{1.4}F ( u ,v ) =[ R2 (あなたv )+2 (あなたv ) ]1/2( 1.4 )
フーリエ スペクトル パス:lg ⁡ ( 1 + ∣ F ( u , v ) ∣ ) \lg(1+|F(u,v)|)l g ( 1+F ( u ,v))表示
相位:
φ ( u , v ) = tan ⁡ − 1 [ I ( u , v ) / R ( u , v ) ] (1.5) \varphi(u,v) = \tan^{-1}[I(u,v)/R(u,v)]\tag{1.5} φ ( u ,v )=黄褐色1 [I(u,v ) / R ( u v )](1.5)
能量谱:
E ( u , v ) = R 2 ( u , v ) + I 2 ( u , v ) (1.6) E(u,v) = R^2(u, v) + I^2(u,v)\tag{1.6} E ( u ,v )=R2 (あなたv )+2 (あなたv )( 1.6 )

1.5 活用特性

2. OpenCVでDFTを実装する関数

  • inputArray が 2 チャネルの形式である場合、出力も 2 チャネルである必要があります。チャネル 0 は実数部を表し、チャネル 1 は虚数部を表します。したがって、画像 (グレースケール画像) の場合は、元の画像からチャネル 1 がすべて 0 である 2 つのチャネルを持つ CV_32F2 オブジェクトを構築する必要があります。
  • inputArray が単一チャネルの形式の場合、それは実数配列でなければなりませんが、このとき出力も単一チャネルの ccs 形式の複素配列になり、これを使用できます。

おすすめ

転載: blog.csdn.net/qq_30340349/article/details/129882753