Imagen Transformada de Fourier del procesamiento de imágenes

1. El significado físico de la transformada de Fourier

Desde un punto de vista puramente matemático, la transformada de Fourier transforma una función de imagen en una serie de funciones periódicas; desde la perspectiva de los efectos físicos, la transformada de Fourier transforma la imagen del dominio espacial al dominio de frecuencia, y su transformada A inversa es para convertir una imagen del dominio de frecuencia al dominio espacial . Es decir, el significado físico de la transformada de Fourier es transformar la función de distribución de grises de la imagen en la función de distribución de frecuencias de la imagen, y la transformada inversa de Fourier es transformar la función de distribución de frecuencias de la imagen en la función de distribución de grises. De hecho, el espectrograma obtenido al realizar la transformada bidimensional de Fourier en la imagen es el mapa de distribución del gradiente de la imagen. Los puntos brillantes y oscuros que se ven en el espectrograma de Fourier son en realidad la fuerza de la diferencia entre un punto determinado de la imagen y puntos vecinos. , es decir, el tamaño del gradiente, es decir, la frecuencia del punto. Si hay más puntos oscuros en el espectrograma, la imagen real es más suave; por el contrario, si hay más puntos brillantes en el espectrograma, la imagen real es más nítida, con límites claros y grandes diferencias de píxeles a ambos lados del límite .

2. Definición y propiedades de la transformada de Fourier

1. Definición de transformada de Fourier

La transformada de Fourier es una investigación de dominio entre la "señal" con el tiempo como variable independiente y la función "espectro" con la frecuencia como variable independiente. Los problemas más complicados se simplifican en el dominio de la frecuencia, simplificando así su proceso de análisis; por otro lado Por otro lado, la naturaleza física de las señales y los sistemas se puede revelar mejor en el dominio de la frecuencia. Cuando la variable independiente "tiempo" o "frecuencia" es una combinación diferente de forma continua y forma discreta, se pueden formar varios pares de transformadas de Fourier, es decir, la relación correspondiente entre "señal" y "espectro". La transformada de Fourier incluye la transformada de Fourier continua, la transformada de Fourier discreta, la transformada de Fourier rápida y la transformada de Fourier de tiempo corto, etc. La transformada de Fourier discreta bidimensional se utiliza en el procesamiento de imágenes digitales.

2. Propiedades de la transformada de Fourier discreta bidimensional

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Implementación en Matlab de la transformada de Fourier

En el software MATLAB, la transformada de Fourier discreta unidimensional se realiza a través de la función fft(), y la transformada de Fourier discreta unidimensional se realiza a través de la función ifft() .

En MATLAB, la transformada de Fourier discreta bidimensional se realiza a través de la función fft2(), y la transformada de Fourier discreta bidimensional se realiza a través de la función ifft2() . La relación entre las funciones fft() y fft2() es fft2(X)=fft(fft(X).').'.

En el software MATLAB, la transformada inversa bidimensional rápida de Fourier se realiza a través de la función ifft2() , y esta función y la función fft2() son funciones inversas entre sí.

El origen de las coordenadas del espectro obtenidas por fft2 se encuentra en la esquina superior izquierda. La función fftshift() mueve el origen de las coordenadas transformadas al centro de la ventana del espectro . El origen de las coordenadas es la baja frecuencia y el exterior es la alta frecuencia La función fftshift() puede realizar la traducción de Fourier, y la función ifftshift() puede realizar la traducción inversa de Fourier . Simplemente entendido, ifftshift es el resultado de deshacer fftshift.

1. Transformada de Fourier discreta bidimensional de matriz e imagen

% 矩阵的二维离散傅里叶变换(变换后得到的矩阵和原矩阵大小相等)
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('灰度图像的频谱图');

resultado de la línea de comando:

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

Efecto de logro:
inserte la descripción de la imagen aquí
2. Traduce la matriz y la imagen a través de 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('灰度图像的频谱图');

resultado de la línea de comando:

N =

     0     1     2     3     4
X =

     3     4     0     1     2
Y =

     1     2     3     4     0
Z =

     0     1     2     3     4

Efecto de logro:
inserte la descripción de la imagen aquí
3. Realice la transformada de Fourier después de que la imagen se ilumine

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的频谱图,图像变亮后中央低频部分变大
% 频谱图中央低频部分代表了灰度图像的平均亮度

Efecto de logro:
inserte la descripción de la imagen aquí
4. Realice la transformada de Fourier después de rotar la imagen

% 图像旋转后进行傅里叶变换
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('旋转后图像对应的频谱图');

Efecto de logro:
inserte la descripción de la imagen aquí
5. Después de agregar ruido gaussiano a la imagen, realice la transformada de Fourier

% 图像中添加高斯噪声后进行傅里叶变换
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('添加高斯噪声后图像对应的频谱图');

Efecto de logro:
inserte la descripción de la imagen aquí
6. Transformada de Fourier y transformada inversa de imagen en escala de grises

% 灰度图像的傅里叶变换和反变换
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('傅里叶反变换后的图像');

Efecto de logro:
inserte la descripción de la imagen aquí
7. Espectro de amplitud y espectro de fase de imagen en escala de grises

% 灰度图像的幅值谱和相位谱
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('傅里叶变换后的相位谱');

Efecto de logro:
inserte la descripción de la imagen aquí
8. Programa para realizar transformada de Fourier discreta bidimensional

% 编程实现二维离散傅里叶变换
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);
% KF图的结果基本相同,但是编程实现的二维离散傅里叶变换计算速度比较慢,fft2函数计算速度比较快
subplot(121),imshow(K);
title('函数fft2得到的傅里叶频谱');
subplot(122),imshow(F);
title('编程实现的傅里叶频谱');

Efecto de logro:
inserte la descripción de la imagen aquí
9. Eliminación de ruido de Matlab del filtro de paso bajo ideal, filtro de paso bajo Butterworth y filtro de paso bajo gaussiano para procesamiento de imágenes

10. Implementación simple de Matlab del filtro de paso alto ideal, el filtro de paso alto Butterworth y el filtro de paso alto gaussiano para el procesamiento de imágenes

11. Implementación en Matlab del filtro de supresión de banda ideal, el filtro de supresión de banda Butterworth y el filtro de supresión de banda gaussiana para el procesamiento de imágenes y lograr la eliminación de ruido

Como recién comencé a aprender procesamiento de imágenes, no entiendo mucho conocimiento. Si hay algún error, corríjame, hay un largo camino por recorrer, ¡y trabaje lentamente!

Guess you like

Origin blog.csdn.net/qq_44111805/article/details/126447560