1. フーリエ変換の物理的意味
純粋に数学的な観点から見ると、フーリエ変換は画像関数を一連の周期関数に変換します。物理的効果の観点から見ると、フーリエ変換は画像を空間領域から周波数領域に変換し、その逆 A 変換は次のようになります。画像を周波数領域から空間領域に変換します。すなわち、フーリエ変換の物理的意味は、画像のグレー分布関数を画像の周波数分布関数に変換することであり、逆フーリエ変換は、画像の周波数分布関数をグレー分布関数に変換することである。実は、画像を2次元フーリエ変換して得られるスペクトログラムは画像の勾配の分布図であり、フーリエスペクトログラムに見られる明るい輝点と暗い輝点は、実際には画像上のある点間の差の強さを表しています。および隣接する点、つまり勾配のサイズ、つまり点の周波数です。スペクトログラムに暗い点が多い場合、実際の画像はより柔らかくなります。逆に、スペクトログラムに明るい点が多い場合、実際の画像はより鮮明になり、境界が明確になり、境界の両側のピクセルの差が大きくなります。。
2. フーリエ変換の定義と性質
1. フーリエ変換の定義
フーリエ変換は、時間を独立変数とする「信号」と周波数を独立変数とする「スペクトル」関数の間の領域の研究であり、周波数領域ではより複雑な問題が単純になり、解析プロセスが簡素化されます。一方、信号とシステムの物理的性質は、周波数領域でよりよく明らかにできます。独立変数「時間」や「周波数」が連続形式と離散形式の異なる組み合わせである場合、さまざまなフーリエ変換ペア、つまり「信号」と「スペクトル」の対応関係が形成されます。フーリエ変換には、連続フーリエ変換、離散フーリエ変換、高速フーリエ変換、短時間フーリエ変換などがあり、デジタル画像処理では2次元離散フーリエ変換が用いられる。
2. 2次元離散フーリエ変換の性質
3. Matlab でのフーリエ変換の実装
MATLAB ソフトウェアでは、1 次元離散フーリエ変換は関数 fft() を通じて実行され、1 次元離散フーリエ変換は関数 ifft() を通じて実行されます。
MATLAB では、2 次元離散フーリエ変換は関数 fft2() を通じて実行され、2 次元離散フーリエ変換は関数 ifft2() を通じて実行されます。関数 fft() と fft2() の関係は、fft2(X)=fft(fft(X).').' です。
MATLAB ソフトウェアでは、2 次元高速フーリエ逆変換は関数 ifft2() を通じて実行され、この関数と関数 fft2() は相互の逆関数です。
fft2 で得られたスペクトル座標の原点は左上隅にあります。関数 fftshift() は、変換された座標の原点をスペクトル ウィンドウの中心に移動します。座標の原点は低周波で、外側は高周波。関数 fftshift() はフーリエ変換を実行でき、関数 ifftshift() はフーリエ逆変換を実行できます。簡単に理解すると、ifftshift は fftshift を元に戻した結果です。
1. 行列と画像の 2 次元離散フーリエ変換
% 矩阵的二维离散傅里叶变换(变换后得到的矩阵和原矩阵大小相等)
I1=ones(4)
I2=[2 2 2 2;1 1 1 1;3 3 0 0;0 0 0 0]
J1=fft2(I1)
J2=fft2(I2)
% 图像的二维离散傅里叶变换
I=imread('cameraman.tif');
J=fft2(I);
K=abs(J/256);% 计算频率(频谱图即频率分布图)
subplot(121),imshow(I);
title('原始图像');
subplot(122),imshow(uint8(K));% 显示频谱图(通过fft2得到的频谱图中,坐标原点在窗口的左上角,窗口的四角分布低频部分)
title('灰度图像的频谱图');
コマンドラインの結果:
I1 =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
I2 =
2 2 2 2
1 1 1 1
3 3 0 0
0 0 0 0
J1 =
16 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
J2 =
18.0000 + 0.0000i 3.0000 - 3.0000i 0.0000 + 0.0000i 3.0000 + 3.0000i
2.0000 - 4.0000i -3.0000 + 3.0000i 0.0000 + 0.0000i -3.0000 - 3.0000i
10.0000 + 0.0000i 3.0000 - 3.0000i 0.0000 + 0.0000i 3.0000 + 3.0000i
2.0000 + 4.0000i -3.0000 + 3.0000i 0.0000 + 0.0000i -3.0000 - 3.0000i
達成効果:
2. fftshift() を使用して行列と画像を変換します。
% 通过函数fftshift()进行平移
close all;
clear all;
clc;
N=0:4
X=fftshift(N) % 平移
Y=fftshift(fftshift(N)) % 平移后再进行平移
Z=ifftshift(fftshift(N)) % 平移后再进行反平移(恢复原来结果)
% 图像进行傅里叶变换和平移
% 在以后进行的傅里叶变化都进行平移!!!
I=imread('peppers.png');
J=rgb2gray(I);
K=fft2(J); % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);
subplot(121),imshow(J);
title('原始图像');
subplot(122),imshow(uint8(L));% 显示频谱图(图像的能量主要集中在低频部分即频谱图的中央,四个角的高频部分幅值非常小)
title('灰度图像的频谱图');
コマンドラインの結果:
N =
0 1 2 3 4
X =
3 4 0 1 2
Y =
1 2 3 4 0
Z =
0 1 2 3 4
達成効果:
3. 画像を明るくした後にフーリエ変換を実行する
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
% 将灰度图像的数据矩阵乘以e使灰度图像变亮
% 注意本例中乘以e后像素值最大为255,若某些例子中乘以e后可能会产生大于255的像素值越界,需要找到并重新赋值即J(find(J>255))=255;
J=J*exp(1);
K=fft2(J); % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);
subplot(121),imshow(J);
title('变亮后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图
title('变亮后图像对应的频谱图');
% 对比fourier2和fourier3的频谱图,图像变亮后中央低频部分变大
% 频谱图中央低频部分代表了灰度图像的平均亮度
達成効果:
4.画像を回転させた後にフーリエ変換を行う
% 图像旋转后进行傅里叶变换
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
% 图像旋转B=imrotate(A,angle,method)中method包括nearest最临近插值-默认值、bilinear双线性的和bicubic双三次的
J=imrotate(J,45,'bilinear');
K=fft2(J); % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);
subplot(121),imshow(J);
title('旋转后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图(注意图像发生旋转,频谱图相应也会发生旋转)
title('旋转后图像对应的频谱图');
成果効果:
5.画像にガウスノイズを付加した後、フーリエ変換を行う
% 图像中添加高斯噪声后进行傅里叶变换
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
J=imnoise(J,'gaussian',0,0.01);% 添加高斯噪声
K=fft2(J); % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);
subplot(121),imshow(J);
title('添加高斯噪声后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图
title('添加高斯噪声后图像对应的频谱图');
成果効果:
6.グレースケール画像のフーリエ変換と逆変換
% 灰度图像的傅里叶变换和反变换
close all;
clear all;
clc;
I=imread('onion.png');
J=rgb2gray(I);
K=fft2(J); % 傅里叶变换
L=fftshift(K);% 平移
M=ifft2(K); % 傅里叶反变换
subplot(131),imshow(J);
title('原始图像');
subplot(132),imshow(uint8(abs(L/256)));% 经过傅里叶变换后得到的频谱图
title('傅里叶频谱');
subplot(133),imshow(uint8(M)); % 对傅里叶变换系数进行傅里叶反变换后得到的灰度图像
title('傅里叶反变换后的图像');
成果効果:
7. グレースケール画像の振幅スペクトルと位相スペクトル
% 灰度图像的幅值谱和相位谱
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
K=fft2(J); % 傅里叶变换
L=fftshift(K);% 平移
fftr=real(L); % real函数求复数的实部
ffti=imag(L); % imag函数求复数的虚部
% 令R(u,v)和I(u,v)表示傅里叶变换F(u,v)的实部和虚部,则原图像函数f(x,y)傅里叶变换的幅值谱定义为|F(u,v)|=[(R(u,v))^2+(I(u,v))^2]^(1/2)
A=sqrt(fftr.^2+ffti.^2);% 幅值谱
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*255;% 归一化到0-255(y=(x-min)/(max-min)为归一到0-1之间))
B=angle(K);% 求复数相角
subplot(121),imshow(A); % 灰度图像傅里叶变换后的幅值谱
title('傅里叶变换后的幅值谱');
subplot(122),imshow(real(B));% 灰度图像经过傅里叶变换后得到的相位谱
title('傅里叶变换后的相位谱');
成果効果:
8. 2次元離散フーリエ変換を実現するプログラム
% 编程实现二维离散傅里叶变换
close all;
clear all;
clc;
I=imread('onion.png');
J=rgb2gray(I);
J=double(J);
s=size(J);
M=s(1);N=s(2);% 获取图像的行数和列数
for u=0:M-1
for v=0:N-1
k=0;
for x=0:M-1
for y=0:N-1
k=J(x+1,y+1)*exp(-j*2*pi*(u*x/M+v*y/N))+k;% 根据二维离散傅里叶变换公式所得(注意公式中j表示复数的虚部比如a+bj)
end
end
F(u+1,v+1)=k;% 傅里叶变换结果
end
end
K=fft2(J);
% K和F图的结果基本相同,但是编程实现的二维离散傅里叶变换计算速度比较慢,fft2函数计算速度比较快
subplot(121),imshow(K);
title('函数fft2得到的傅里叶频谱');
subplot(122),imshow(F);
title('编程实现的傅里叶频谱');
達成効果:
9.画像処理用の理想的なローパス フィルター、バターワース ローパス フィルター、ガウス ローパス フィルターの Matlab ノイズ除去
10.画像処理用の理想的なハイパス フィルター、バターワース ハイパス フィルター、ガウス ハイパス フィルターの Matlab によるシンプルな実装
11.ノイズ除去を実現するための画像処理用の理想的なバンドストップ フィルター、バターワース バンドストップ フィルター、およびガウス バンドストップ フィルターの Matlab 実装
画像処理の勉強を始めたばかりなので知識がよくわかりません。間違いがあれば修正してください。まだまだ先は長いので、ゆっくり取り組んでください。