2 D画像のフーリエ変換

5320 ワード

ブログはすでに引っ越しています。次の文章の画像が正常に表示されない可能性があります。新しいブログに移動して見てください。https://imlogm.github.io/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/image-fft/


要旨:2次元画像のフーリエ変換は,1次元フーリエに比べて理解的に抽象的である.私はネット上でいくつかの比較的良い文章を探して、matlabで自分でいくつかの実験画像を作って、みんなに2次元画像のフーリエ変換を理解するのに役立つことを望んでいます.
キーワード:2 Dフーリエ変換、画像処理

1.一次元フーリエ変換


理工系なら、一次元フーリエ変換は大学で習ったはずだ.忘れたことがあれば、「フーリエ変換式をどう理解するか?-馬さんの答え」という分かりやすく数学的な文章を読むことができます.
1 Dフーリエ変換の式は、次のとおりです.
F(ω)=∫+∞−∞f(t)e−iωtdt F ( ω ) = ∫ − ∞ + ∞ f ( t ) e − i ω t d t

2.2 Dフーリエ変換


2 Dフーリエ変換の式は次のとおりです.
F(u,v)=∫+∞−∞∫+∞−∞f(x,y)e−i(ux+vy)dxdy F ( u , v ) = ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x , y ) e − i ( u x + v y ) d x d y
一次元フーリエの式から,二次元フーリエ変換式を比較的容易に類比することができる.しかし,2次元Fourierはx方向とy方向の正弦波余弦の単純な重畳ではなく,積の重畳であることに留意されたい.
例えば、一次元フーリエ変換の三角関数系はsin(nx)s i n(nx)、cos(nx)c o s(nx)及び定数1であり、二次元フーリエ変換の三角関数系はsin(ux+vy)s i n(ux+vy)、cos(ux+vy)c o s(ux+vy)及び定数1である.一方、sin(ux+vy)s i n(ux+vy)およびcos(ux+vy)cos(ux+vy)はsin(ux)sin(vy),sin(ux)cos(vy),cos(ux)sin(vy),cos(ux)sin(vy),cos(ux)cos(vy),cos(ux)cos(vy)si n(ux)s i n(vy),s i n(ux)co s(ux)s(vy),c o s(ux)s s(ux)c o s(ux)s s s s s(vy),c o s(ux)c o s(ux)s(ux)c s s s s s(v y)この4つの積の形式.
上記の内容に興味があれば、この文章を参照してください.「二次元フーリエ変換はどのように行われていますか.-CharlyGordonの答え」です.読めなくても構わないが,二次元フーリエはx方向とy方向の正弦波余弦の単純な重ね合わせではないことを知るだけである.
注意1:2次元フーリエ変換後に生成される画像は、原図上の画素点と一対一の対応関係は存在しない.原図の画素値はx,y座標軸下(すなわち空間領域)であり、フーリエ変換後の画素値はu,v座標軸下(すなわち周波数領域)である.
注意2:画像の画素点は離散的で限られているので、実際に画像フーリエ変換を行う場合は、離散フーリエ変換(DFT)を用いるが、上記の式における積分番号∧+∞−∞▽∧−∞+∞を求和号Σに変換する必要がある

3.二次元フーリエ変換の直感的理解


元の画像を2次元フーリエ変換して得られるのはu,v座標系における2次元行列であり,(u 1,v 1)(u 1,v 1),(u 1,v 2),(u 1,v 2),(u 2,v 1)(u 2,v 1)(u 2,v 1)などの一連の点からなる.各位置(un,vn)(u n,v n)には、対応する値F(un,vn)F(u n,v n)がある.この2次元マトリクスをフーリエ後の画像に正規化して表示すると、フーリエ後の画像上の画素点位置と画素点灯度は、2次元マトリクスに対応する点とその点の値を特徴付ける.
図1に示すように,左中右の3枚の小さな図があり,右小図にかかわらず,左小図は元の画像であり,中小図はフーリエ変換後である.フーリエ変換後のピクチャの2つの斜め対角に2つの白点が現れ,この2点での輝度値が最も大きく,残りの点では輝度値が0であることが分かった.これは、元の画像がこの2点に対応する三角波から構成され、三角波の振幅値が対応する点の輝度であることを示す.
図1
では、これらの三角波長はどうですか.図2は私がネット上で見つけた図で、元の出所は不明です.もともとこの図は周波数シフト後の三角波で、周波数シフトは以下に述べる知識点なので、理解に一定の影響を与えると思います.だから、周波数シフト前のものに処理して、みんなに理解しやすいです.図1と図2を比較すると、その関係をすぐに理解できると信じています.
図2
図2の右小図では、図1の元の画像と最も似た外形を持つ赤枠で三角波の1つを示した.結果も我々が予想したように,フーリエ変換後,この三角波の振幅値が最大であったので,図1の中の小図左上角の白点を見た.
注意:図2の三角波は図1の小図の左上角の領域に対応するので、左上角の白点を得た.図1の中小図の右上、左下、右下領域の三角波長はどのようになっているのか、次の段落を見てください.
左上の白い点は分かりましたが、右下の白い点はどうやって来ましたか.自分で実験をすると、この2つの白点は対称であることがわかります(言い換えれば、右下角領域の三角波と左上角領域の三角波は対称です).これは実は2つの原因の共同作用によってもたらされた:その1つは、フーリエの2つのスペクトルが原点対称について;二つ目は、上述したように、2次元画像フーリエ変換は離散フーリエ変換であり、離散フーリエ変換の本質は周期信号がフーリエ級数を求めるので、実際には周期拡張がある.
この2つの性質はもっと深い知識に関連しているので、私は詳しく展開しません.興味のある学生は信号処理の本を探して見ることができて、学んだことがある学生はすぐに理解できるはずです.
図1の左小図、中小図の問題を解決したが、図1の右小図は何なのか.右小図は実は中小図が周波数シフトした後のものです.なぜ周波数シフトするのかというと,フーリエ変換で得られた2次元マトリクスを画像で表示すると,デフォルトの座標原点(0,0)が画像の左上隅に位置するからである.周波数シフトは座標原点を画像の中心に移動することです.
図1の右小図の中間右下寄りの点は、図1の左小図の左上隅の点が移動して得られるが、図1の右小図の中間左上寄りの点は、前述した「フーリエ二重スペクトル原点対称」という性質から得られると考えられる.

4.Matlab小実験


上記の内容を見て、二次元フーリエに対して一定の直観的な印象を持っていると信じています.私はまたmatlabで小さなプログラムを書いて、いくつかの画像を生成して、みんなの理解を助けました.
図3
図4
図5
図6
図7
図8

5.Matlabコード


最後に私のmatlabコードを添付して、みんなが自分で実験をするのに便利です.
フーリエ変換のコードに何か疑問があれば,この文章「matlabを用いて画像をフーリエ変換−三山音」を見ることができる.
%  sin(x+y) 

img_size = 100;     %  
x_step = 1;     
y_step = 1;
image = zeros(img_size, img_size);
for x = x_step:x_step:x_step*img_size
    for y=y_step:y_step:y_step*img_size
        image(x/x_step, y/y_step)=sin(4*pi*x/img_size + 4*pi*y/img_size);
    end
end


subplot(1,3,1)
imshow(image)       %  
title(' ')

subplot(1,3,2)
image = im2double(image);
F_unshift = fft2(image); 
F_unshift_abs = abs(F_unshift);
T = log(F_unshift_abs+1);
imshow(T);   %  , 
title(' , ')

subplot(1,3,3)
F = fftshift(F_unshift);
F_abs = abs(F);
T = log(F_abs+1);
imshow(T)           %  , 
title(' , ')