Expérience de transformée de Fourier d'image

1. But de l'expérience

1. Maîtriser les principes et méthodes de base de la transformée de Fourier et de la transformée inverse.
2. Comprendre les principes de base et les méthodes de filtrage dans le domaine fréquentiel.
3. Maîtriser la méthode de filtrage du domaine fréquentiel image.

2. Principe expérimental

1. Filtre de lissage

(1) Filtre de lissage linéaire

Tous les coefficients du filtre de lissage passe-bas linéaire sont des nombres positifs. Pour le 3×3modèle, le filtre moyen le plus simple prend tous les coefficients comme 1. Afin de maintenir l'image de sortie toujours dans la plage de valeurs de gris de l'image d'origine, le modèle est adjacent au pixel près Tous les produits du domaine sont divisés par 9. MATLABFournit fspecialle modèle utilisé par la fonction pour générer le filtre et fournit filter2la fonction pour opérer sur l'image avec le modèle de filtre spécifié. Une fonction est MATLABfournie imnoisepour ajouter du bruit à l'image, veuillez vous référer à la commande et à l'utilisation MATLABpar vous-même. Il existe des fonctions similaires, veuillez vérifier et maîtriser par vous-même.helpfspecialfilter2imnoiseOpenCV

(2) Filtre de lissage non linéaire

Le filtre médian est un filtre de lissage non linéaire couramment utilisé. Son principe de filtrage est similaire à la méthode du filtre moyen, mais au lieu de calculer la somme pondérée, il trie les pixels de l'image dans le voisinage en fonction du niveau de gris, puis La médiane La valeur de ce groupe est choisie comme valeur de pixel de sortie. MATLABDes fonctions sont fournies medfilt2pour implémenter le filtrage médian. OpenCVIl existe également des fonctions similaires, veuillez demander aux étudiants de se renseigner par eux-mêmes.

2. Filtre d'affûtage

Le lissage de l'image brouille souvent les limites et les contours de l'image.Afin de réduire l'impact de ces effets indésirables, il est nécessaire d'utiliser la technologie de netteté de l'image pour rendre les bords de l'image clairs.

(1) Filtre de netteté linéaire

Un filtre passe-haut linéaire est le filtre de netteté linéaire le plus couramment utilisé. Les coefficients centraux de ce filtre sont tous positifs, tandis que les coefficients environnants sont tous négatifs, et la somme de tous les coefficients est 0.

(2) Filtre de netteté non linéaire

La moyenne de voisinage peut brouiller les images et la différenciation peut rendre les images plus nettes car la moyenne correspond à des intégrales. La méthode de différenciation la plus couramment utilisée dans le traitement d'image utilise des gradients. Les opérateurs différentiels de filtre d'accentuation non linéaire de domaine spatial couramment utilisés comprennent sobell'opérateur, prewittl'opérateur, logl'opérateur, etc.

3. Amélioration du domaine fréquentiel

L'amélioration du domaine fréquentiel consiste à utiliser la méthode de transformation d'image pour transformer l'image dans l'espace d'image d'origine en d'autres espaces sous une forme quelconque, puis à utiliser les propriétés uniques de cet espace pour traiter l'image de manière pratique, et enfin la reconvertir dans l'espace d'image d'origine. , de sorte que Obtenir l'image traitée.
Les principales étapes de l'amélioration du domaine fréquentiel sont les suivantes :
(1) Sélectionnez la méthode de transformation pour transformer l'image d'entrée dans l'espace du domaine fréquentiel.
(2) Dans l'espace du domaine fréquentiel, concevez une fonction de transfert en fonction de l'objectif du traitement et traitez-la.
(3) Transformer inversement le résultat obtenu pour obtenir une image améliorée.
(4) Les méthodes d'amélioration du domaine fréquentiel couramment utilisées comprennent le filtrage passe-bas et le filtrage passe-haut.

4. Filtrage passe-bas

La majeure partie de l'énergie de l'image est concentrée dans les parties basses et moyennes fréquences du spectre d'amplitude, tandis que les bords et le bruit de l'image correspondent à la partie haute fréquence. Par conséquent, un filtre qui réduit l'amplitude des composants haute fréquence peut réduire l'influence du bruit. Selon le théorème de convolution, l'expression mathématique du filtrage passe-bas est réalisée dans le domaine fréquentiel :

(1) Filtre passe-bas idéal ( ILPF)

insérez la description de l'image ici

(2) Filtre passe-bas Butterworth ( BLPF)

insérez la description de l'image ici

(3) Filtre passe-bas exponentiel ( ELPF)

insérez la description de l'image ici

5. Filtrage passe-haut

Étant donné que les détails de l'image correspondent à ses composants haute fréquence, le filtrage passe-haut peut rendre l'image plus nette. Le filtre passe-haut est l'opposé du filtre passe-bas, qui permet aux composants haute fréquence de passer en douceur, de sorte que les composants basse fréquence sont affaiblis. Le filtre passe-haut est similaire au filtre passe-bas et leurs fonctions de transfert sont :

(1) Filtre passe-haut idéal ( IHPF)

insérez la description de l'image ici

(2) Filtre passe-haut Butterworth ( BLPF)

insérez la description de l'image ici

(3) Filtre passe-haut exponentiel ( ELPF)

insérez la description de l'image ici
Une fois l'image traitée par filtrage passe-haut, de nombreuses informations basse fréquence seront perdues, de sorte que la zone lisse de l'image disparaîtra. Par conséquent, un filtrage amélioré haute fréquence peut être utilisé pour compenser cela. Le filtrage renforcé haute fréquence consiste à ajouter une constante supérieure à 0 et inférieure à 1 lors de la conception de la fonction de transfert du filtre, à savoir :
insérez la description de l'image ici

3. Étapes du contenu de l'expérience (enregistrez les principales étapes de l'expérience et, une fois le débogage réussi, prenez une capture d'écran ou prenez une photo pour enregistrer le résultat)

MATLABL'utilisation de ou est nécessaire OpenCVpour effectuer les expériences suivantes.

1. Filtrage spatial fluide

(1) Lisez une image en niveaux de gris, ajoutez du bruit poivre et sel et du bruit gaussien à cette image et affichez-la dans la même fenêtre d'image que l'image précédente.
lena = imread('lena.jpg'); %读入原始图像
lena_gray = rgb2gray(lena); %原始图像灰度化

figure, subplot(1, 3, 1);
imshow(lena_gray);
title('原始图像');
lena_pepper = imnoise(lena_gray, 'salt & pepper', 0.02); %加入椒盐噪声

subplot(1, 3, 2);
imshow(lena_pepper);
title('椒盐噪声图像');

lena_gauss = imnoise(lena_gray, "gaussian", 0.02); %加入高斯噪声
subplot(1, 3, 3);
imshow(lena_gauss);
title('高斯噪声图像');

insérez la description de l'image ici

(2) Sélectionnez différents modèles de lissage (passe-bas) pour l'image à bruit ajouté, comparez les effets de différents modèles et affichez-les dans la même fenêtre.
lena = imread('lena.jpg'); %读入原始图像

lena_gray = rgb2gray(lena); %原始图像灰度化
figure, subplot(1, 3, 1);
imshow(lena_gray);
title('原始图像');

lena_pepper = imnoise(lena_gray, 'salt & pepper', 0.02); %加入椒盐噪声
subplot(1, 3, 2);
imshow(lena_pepper);
title('椒盐噪声图像');

lena_gauss = imnoise(lena_gray, "gaussian", 0.02); %加入高斯噪声
subplot(1, 3, 3);
imshow(lena_gauss);
title('高斯噪声图像');

%对椒盐噪声图像进行滤波处理
h = fspecial('average', 3);
I1 = filter2(h, lena_pepper) / 255; %二维数字滤波器
I2 = medfilt2(lena_pepper, [3 3]); %二维中位数滤波
figure, subplot(2, 2, 1);
imshow(lena);
title('原始图像');

subplot(2, 2, 2);
imshow(lena_pepper);
title('椒盐噪声图像');

subplot(2, 2, 3);
imshow(I1);
title('3*3 均值滤波图像');

subplot(2, 2, 4);
imshow(I2);
title('3*3 中值滤波图像');

%对高斯噪声图像进行滤波处理
G1 = filter2(h, lena_gauss) / 255; %二维数字滤波器
G2 = medfilt2(lena_gauss, [3 3]); %二维中位数滤波

figure, subplot(2, 2, 1);
imshow(lena);
title('原始图像');

subplot(2, 2, 2);
imshow(lena_gauss);
title('高斯噪声图像');

subplot(2, 2, 3);
imshow(G1);
title('3*3 均值滤波图像');

subplot(2, 2, 4);
imshow(G2);
title('3*3 中值滤波图像');

insérez la description de l'image ici
insérez la description de l'image ici
insérez la description de l'image ici

(3) Si utilisé MATLAB, lors de l'utilisation de la fonction imfilter, utilisez différentes méthodes de rembourrage (ou options de limite, telles que le rembourrage zéro, ' replicate', ' symmetric', ' circular') pour effectuer un filtrage passe-bas et afficher l'image traitée.
close all
lena=imread('lena.jpg');    %将原始图像读入
lena_gray=rgb2gray(lena);   %将图像灰度化
h=fspecial('motion',50,45);  %创建预定义的二维滤波器
filteredimg=imfilter(lena_gray,h);    % 对图像进行滤波,默认通过使用相关来完成
boundaryReplicate=imfilter(lena_gray,h,"replicate") ;    %图像大小通过复制外边界的值来扩展
boundary0=imfilter(lena_gray,h,0);   % 输入图像的边界通过用值X(无引号)来填充扩展,其默认值为0
boundarysymmetric=imfilter(lena_gray,h,"symmetric");  %图像大小通过镜像反射其边界来扩展
boundarycircular=imfilter(lena_gray,h,'circular');   %图像大小通过将图像看成是一个二维周期函数的一个周期来扩展

figure,subplot(3,2,1);%为各个分块创建分区
imshow(lena);   
title('原始图像');
subplot(3,2,2);
imshow(filteredimg);
title('Motion Blurred');
subplot(3,2,3);
imshow(boundaryReplicate);
title('Replicate');
subplot(3,2,4);
imshow(boundary0);
title('0-Padding');
subplot(3,2,5);
imshow(boundarysymmetric);
title('symmetric');
subplot(3,2,6);
imshow(boundarycircular);
title('cicular');

insérez la description de l'image ici

(4) Utiliser forune boucle pour effectuer un filtrage moyen 10 et 20 sur l'image avec bruit poivre et sel, vérifier ses caractéristiques, et afficher l'image après traitement moyen (rappel : utiliser le type '' de la fonction pour générer le filtre fspecialmoyen average) .
close all
lena=imread('lena.jpg');    %将原始图像读入
lena_gray=rgb2gray(lena);   %将图像灰度化
lena_pepper=imnoise(lena_gray,'salt & pepper',0.02);    %加入椒盐噪声
h=fspecial('average');      %生成均值滤波器
for i=1:10  %对椒盐噪声图像进行10次均值滤波
    J1=imfilter(lena_pepper,h); end
for j=1:20  %对椒盐噪声图像进行20次均值滤波
    J2=imfilter(lena_pepper,h); end;
figure,subplot(1,3,1);
imshow(lena_pepper);
title('椒盐噪声图像');
subplot(1,3,2);
imshow(J1);
title('10次均值滤波');
subplot(1,3,3);
imshow(J2);
title('20次均值滤波');

insérez la description de l'image ici

(5) Pour l'image avec bruit sel et poivre, la méthode du filtre moyen et la méthode du filtre médian sont utilisées pour traiter l'image bruyante respectivement, et les résultats doivent être affichés dans la même fenêtre.
close all
lena=imread('lena.jpg');    %读入原始图像
lena_gray=rgb2gray(lena);   %将图像灰度化
lena_pepper=imnoise(lena_gray,'salt & pepper',0.02);    %加入椒盐噪声
h=fspecial('average');  %生成均值滤波器
J1=imfilter(lena_pepper,h);
J2=medfilt2(lena_pepper);
figure,subplot(1,3,1);
imshow(lena_pepper);
title('椒盐噪声图像');
subplot(1,3,2);
imshow(J1);
title('均值滤波法');
subplot(1,3,3);
imshow(J2);
title('中值滤波法');

insérez la description de l'image ici

(6) Concevez vous-même un filtre spatial de lissage, traitez-le sur l'image de bruit et affichez l'image traitée.
lena=imread('lena.jpg');    %读入原始图像
lena_gray=rgb2gray(lena);   %将图像灰度化
lena_pepper=imnoise(lena_gray,'salt & pepper',0.02);    %加入椒盐噪声
[m,n]=size(lena_pepper);
figure,subplot(1,2,1);
imshow(lena_pepper);
title('椒盐噪声图');
s=zeros(1,9);
for i=2:1:m-1
    for j=2:1:n-1
        h=1;
        for p=i-1:1:i+1
            for q=j-1:1:j+1
                s(h)=lena_pepper(p,q);
                h=h+1;
            end
        end
        s=sort(s);
       I(i,j)=s(3,3);
    end
end

subplot(1,2,2);
imshow(I);
title('噪声处理后的图像');

insérez la description de l'image ici

2. Affiner le filtrage spatial

(1) Lisez une image en niveaux de gris et utilisez l'opérateur laplacien pour la filtrer.
close all
lena=imread('lena.jpg');    %读入原始图像
lena_gray=rgb2gray(lena);   %将图像灰度化
lena_double=im2double(lena_gray) %将图像转换为双精度值
w=[1,1,1;
    1,-8,1;
    1,1,1]
k=conv2(lena_double,w,"same");
figure,subplot(1,2,1);      
imshow(lena);
title('原始图像');
subplot(1,2,2);      
imshow(k);
title('滤波处理后的图像');

insérez la description de l'image ici

(2) Ecrire une fonction w = genlaplacian(n)pour générer automatiquement un Laplacien de n'importe quelle taille impaire, comme le Laplacien de

insérez la description de l'image ici

num=input('请输入数字n:');
n=num;
W=ones(n,n);
for i =1:n
    for j=1:n
        if(i==fix(n/2)+1&&j==fix(n/2)+1)
            W(i,j)=n*n-1;
        end
    end
end
display(W)

insérez la description de l'image ici

(3) Utilisez les opérateurs laplaciens 5 × 5, 9 × 9, 15 × 15 et 25 × 25 pour affiner et filtrer l'image, et utilisez Eq. Différent, nécessite un affichage dans la même fenêtre.
function [w]=lapulasi(num)
n=num;
w=ones(n);
x=fix(n/2)+1;
w(x,x)=-(n*n-1);
end
function [w]=lapulasi(num)
n=num;
w=ones(n);
x=fix(n/2)+1;
w(x,x)=-(n*n-1);
end
lena=imread("lena.jpg");    %读入原始图像
lena_double=im2double(lena);    %将图像转换为双精度值
figure,subplot(2,3,1);
imshow(lena_double);
title('原始图像');
w0=lapulasi(3);
w1=lapulasi(5);
w2=lapulasi(9);
w3=lapulasi(15);
w4=lapulasi(25);
lena_0=lena_double-imfilter(lena_double,w0,"replicate");
subplot(2,3,2);
imshow(lena_0);
title('3*3 拉普拉斯');
lena_1=lena_double-imfilter(lena_double,w1,"replicate");
subplot(2,3,3);
imshow(lena_1);
title('5*5 拉普拉斯');
lena_2=lena_double-imfilter(lena_double,w2,"replicate");
subplot(2,3,2);
imshow(lena_2);
title('9*9 拉普拉斯');
lena_3=lena_double-imfilter(lena_double,w3,"replicate");
subplot(2,3,5);
imshow(lena_3);
title('15*15 拉普拉斯');
lena_4=lena_double-imfilter(lena_double,w4,"replicate");
subplot(2,3,6);
imshow(lena_4);
title('25*25 拉普拉斯');
(4) Utilisez différents opérateurs de dégradé pour affiner et filtrer l'image, et comparez leurs effets.
[I,map]=imread('lena_gray.jpg'); 
I=double(I); 
subplot(2,3,1) 
imshow(I,map); 
title('原始图像'); 
[Gx,Gy]=gradient(I); % 梯度计算 
G=sqrt(Gx.*Gx+Gy.*Gy); % 矩阵 
J1=G; % 梯度1 
subplot(2,3,2)
imshow(J1,map); 
title(' 操作1图像'); 
J2=I; % 梯度2 
K=find(G>=7); 
J2(K)=G(K); 
subplot(2,3,3) 
imshow(J2,map); 
title('操作2图像'); 
J3=I; % 梯度3 
K=find(G>=7); 
J3(K)=255; 
subplot(2,3,4) 
imshow(J3,map); 
title('操作3图像'); 
J4=I; % 梯度4 
K=find(G<=7); 
J4(K)=255; 
subplot(2,3,5) 
imshow(J4,map); 
title('操作4图像'); 
J5=I; %梯度5 
K=find(G<=7); 
J5(K)=0; 
Q=find(G>=7); 
J5(Q)=255; 
subplot(2,3,6) 
imshow(J5,map); 
title('操作5图像');

insérez la description de l'image ici

(5) Concevez vous-même le filtre spatial d'accentuation, traitez-le sur l'image de bruit et affichez l'image traitée.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);   %转换为灰度图像
h=fspecial("sobel");
h1=h'*0.5;
h2=h';
h3=h'*1.5;
z1=imfilter(lena_gray,h1);
z2=imfilter(lena_gray,h2);
z3=imfilter(lena_gray,h3);
figure,subplot(2,2,1);
imshow(lena_gray);
title('原始图像');
subplot(2,2,2);
imshow(z1);
title('梯度算子1');
subplot(2,2,3);
imshow(z2);
title('梯度算子2');
subplot(2,2,4);
imshow(z3);
title('梯度算子3');

insérez la description de l'image ici

3. Transformée de Fourier

(1) Lisez une image en niveaux de gris, effectuez une transformation de Fourier rapide sur celle-ci et affichez respectivement son image d'amplitude et son image de phase.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f1=fft2(lena_gray); %快速傅里叶变换
f2=log(1+abs(f1));  %振幅谱
f3=fftshift(f1);
f4=angle(f1);   %相位谱
figure,subplot(1,3,1);
imshow(lena_gray);
title('原始图像');
subplot(1,3,2);
imshow(log(1+abs(f3)),[]);
title('幅度图像');
subplot(1,3,3);
imshow(f4);
title('相位图像');

insérez la description de l'image ici

(2) Visualisez l'image résultante après transformée de Fourier inverse de la partie phase uniquement.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f1=fft2(lena_gray); %快速傅里叶变换
f=ifft(abs(f1));
figure,subplot(1,3,1);
imshow(lena_gray);
title('原始图像');
subplot(1,3,2);
imshow(log(1+abs(f3)),[]);
title('振幅图像');
subplot(1,3,3);
imshow(log(1+abs(f)),[]);
title('相位图像');

insérez la description de l'image ici

(3) Vérifiez l'image résultante après transformée de Fourier inverse de la seule partie d'amplitude.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f1=fft2(lena_gray); %快速傅里叶变换
f2=log(1+abs(f1));
f3=fftshift(f1);
f4=angle(f1);
f5=-f4;
f6=double(f3*exp(f4));   %傅里叶变换的复共轭
f7=ifft2(f6);   %反傅里叶变换
figure,subplot(1,2,1);
imshow(lena_gray);
title('原始图像');
subplot(1,2,2);
imshow(real(f7),[]);
title('逆傅里叶变换');

Voici le devis

(4) Réglez la transformée de Fourier de l'image sur sa conjuguée et effectuez une transformation inverse pour comparer la différence entre l'image nouvellement générée et l'image d'origine.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f1=fft2(lena_gray); %快速傅里叶变换
f2=log(1+abs(f1));
f3=fftshift(f1);
f4=angle(f1);
f5=f4;
f6=double(f3*exp(f4));  %傅里叶变换的复共轭
figure,subplot(1,2,1);
imshow(lena_gray);
title('原始图像');
subplot(1,2,2);
imshow(real(f7),[]);
title('逆傅里叶变换');

insérez la description de l'image ici

4. Filtrage lisse du domaine fréquentiel

(1) Concevez un filtre passe-bas idéal, un filtre passe-bas Butterworth et un filtre passe-bas gaussien, avec des fréquences de coupure optionnelles.
%理想低通滤波器的透视图
a=100;
b=100;
U=0:a;
V=0:b;
M=length(U);
N=length(V);
D0=10;  %D0是频带的中心半径
x1=50;
y1=50;
x0=-50;
y0=-50;
m=fix(M/2);
n=fix(N/2);
H=zeros(M,N);
n=2;
for u=1:M
    for v=1:N
        a=sqrt((U(u)-50).*(U(u)-50)+(V(v)-50).*(V(v)-50));  %(u,v)的值
        if(a<=D0)   %理想滤波器
            H(u,v)=1;
        else
            H(u,v)=0;
        end
    end
end
figure,subplot(1,3,1);
surf(U,V,H);
title('理想低通滤波透视图');
%巴特沃斯低通滤波器透视图
a=100;    
b=100;    
U=0:a;    
V=0:b;    
M=length(U);N=length(V);    
D0=10;%W=200;%D0 是频带的中心半径;W 是频带的宽度
x1=50;y1=50;    
x0=-50;y0=-50;    
m=fix(M/2); 
n=fix(N/2);    
H=zeros(M,N);    
n=2;    
for u=1:M    
    for v=1:N    
        a=sqrt((U(u) - 50) .* (U(u)-50) + (V(v) - 50) .* (V(v) - 50));%D(u,v)的值
        b=1+(a/D0)^2*n;    
        H(u,v)=1/b;  
    end    
end    
subplot(1,3,2);
surf(U,V,H);  
title('巴特沃斯低通滤波器透视图');
%高斯低通滤波
a=100;    
b=100;    
U=0:a;    
V=0:b;    
M=length(U);
N=length(V);    
D0=10; %D0 是频带的中心半径
x1=50;
y1=50;    
x0=-50;
y0=-50;    
m=fix(M/2);
n=fix(N/2);    
H=zeros(M,N);          
for u=1:M    
    for v=1:N    
        D1=((u-m-x0)^2+(v-n-y0).^2)^0.5;    
        D2=((u-m+x0)^2+(v-n+y0).^2)^0.5;    
        D11=((u-m-x1)^2+(v-n-y1).^2)^0.5;    
        D21=((u-m+x1)^2+(v-n+y1).^2)^0.5;    
        H(u,v) = (U(u) - 50) .* (U(u)-50) + (V(v) - 50) .* (V(v)  - 50);   
    end    
end   
S=50;    
H = -H/(2*S);    
H = exp(H) / (sqrt(2*pi) * sqrt(S));    
subplot(1,3,3),surf(U,V,H),title('高斯低通滤波');

Voici le devis

(2) Lisez une image en niveaux de gris, filtrez-la avec un filtre passe-bas idéal, un filtre passe-bas Butterworth et un filtre passe-bas gaussien respectivement (la fréquence de coupure est facultative), puis effectuez une transformation inverse pour observer différents La différence entre l'image obtenue en utilisant différents filtres passe-bas à la fréquence de coupure et l'image d'origine, faites particulièrement attention à l'effet de sonnerie.
%d0=15 理想低通滤波
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f=double(lena_gray);
g=fft2(f);  %傅里叶变换
g=fftshift(g);
[M,N]=size(g);
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d<d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result); 
J2=uint8(real(J1));  
figure,subplot(2,2,1);
imshow(lena);
title('原始图像'); 
subplot(2,2,2);
imshow(J2);
title('d0=15 理想低通滤波器');
%d0=30 的理想低通滤波
d0=30;  
m=fix(M/2); 
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        if(d<=d0)  
            h=1;  
        else   
            h=0;  
        end  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result); 
J2=uint8(real(J1));  
subplot(2,2,3);
imshow(J2);
title('d0=30 理想低通滤波器');
%d0=100 的理想低通滤波
d0=100;  
m=fix(M/2); 
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        if(d<=d0)  
            h=1;  
        else   
            h=0;  
        end  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result); 
J2=uint8(real(J1));  
 subplot(2,2,4);
 imshow(J2);
 title('d0=100 理想低通滤波器');

Voici le devis
Lorsque la fréquence de coupure d0=15est plus élevée , l'image filtrée est floue et le phénomène de sonnerie est également évident ; à d0=30ce moment, le degré de flou de l'image est affaibli, mais le phénomène de sonnerie existe toujours. À ce d0=100moment-là, l'image filtrée était relativement claire, mais après la perte des composantes haute fréquence, il y avait encore un peu de bourdonnement au bord de l'image.

5. Affiner le filtrage du domaine fréquentiel

(1) Concevoir un filtre passe-haut idéal, un filtre passe-haut Butterworth et un filtre passe-haut gaussien, avec fréquence de coupure en option.
lena=imread("lena.jpg");
lena_gray=rgb2gray(lena);
f=double(lena_gray);
g=fft2(f);  %傅里叶变换
g=fftshift(g);
[M,N]=size(g);

%d0=15的巴特沃斯高通滤波器
nn=2;
d0=15;
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=1/(1+0.414*(d/d0)^(2*nn));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result); 
J2=uint8(real(J1));

figure,subplot(2,2,1);
imshow(lena);
title('原始图像'); 
subplot(2,2,2);
imshow(J2);
title('d0=15 巴特沃斯高通滤波器')
%d0=30的巴特沃斯高通滤波器
d0=30;  
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=1/(1+0.414*(d/d0)^(2*nn));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result);
J2=uint8(real(J1));   
subplot(2,2,3);
imshow(J2);
title('d0=30 巴特沃斯高通滤波器');
%d0=100的巴特沃斯高通滤波器
d0=100;  
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=1/(1+0.414*(d/d0)^(2*nn));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result);
J2=uint8(real(J1));   
subplot(2,2,4);
imshow(J2);
title('d0=100 巴特沃斯高通滤波器');
%d0=15的高斯低通滤波
d0=15;  
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=exp(-(d.^2)./(2*(d0^2)));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result);
J2=uint8(real(J1)); 
figure,subplot(2,2,1);
imshow(lena);
title('原始图像'); 
subplot(2,2,2);
imshow(J2);
title('d0=15 高斯高通滤');  
%d0=30的高斯低通滤波
d0=30;  
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=exp(-(d.^2)./(2*(d0^2)));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1)); 
subplot(2,2,3);
imshow(J2);
title('d0=30 高斯高通滤波');  
%d0=100的高斯低通滤波 
d0=100;  
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);  
        h=exp(-(d.^2)./(2*(d0^2)));  
        result(i,j)=h*g(i,j);  
    end 
end  
result=ifftshift(result); 
J1=ifft2(result);
J2=uint8(real(J1));   
subplot(2,2,4);
imshow(J2);
title('d0=100 高斯高通滤波');

insérez la description de l'image ici

(2) Lisez une image en niveaux de gris, filtrez-la avec un filtre passe-haut idéal, un filtre passe-haut Butterworth et un filtre passe-haut gaussien respectivement (la fréquence de coupure est facultative), puis effectuez une transformation inverse pour observer les différentes fréquences de coupure La différence entre l'image obtenue en utilisant différents filtres passe-haut et l'image d'origine.
close all
lena=imread('lena.jpg');    %将原始图像读入
lena_gray=rgb2gray(lena);   %将图像灰度化
lena_double=double(lena_gray);
g=fft2(f);  %傅里叶变换
g=fftshift(g);
[M,N]=size(g);
%d0=15的理想高通滤波器
d0=15;
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(2,2,1);
imshow(lena);
title('原始图像');
subplot(2,2,2);
imshow(J2);
title('d0=15 理想高通滤波器');
%d0=30的理想高通滤波器
d0=30;
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(2,2,3);
imshow(J2);
title('d0=30 理想高通滤波器');
%d0=80的理想高通滤波器
d0=80;
m=fix(M/2);
n=fix(N/2); 
for i=1:M  
    for j=1:N  
        d=sqrt((i-m)^2+(j-n)^2);
        if(d>=d0)
            h=1;
        else
            h=0;
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(2,2,4);
imshow(J2);
title('d0=80 理想高通滤波器');
%d0=15的巴特沃斯高通滤波器
nn=2;
d0=15;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
            h=1/(1+0.414*(d0/d)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure,subplot(2,2,1);
imshow(lena);
title('原始图像');
subplot(2,2,2);
imshow(J2);
title('d0=15 巴特沃斯高通滤波')
%d0=30的巴特沃斯高通滤波器
d0=30;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
            h=1/(1+0.414*(d0/d)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));

subplot(2,2,3);
imshow(J2);
title('d0=30 巴特沃斯高通滤波')
%d0=80的巴特沃斯高通滤波器
d0=80;
m=fix(M/2);
n=fix(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-m)^2+(j-n)^2);
        if(d==0)
            h=0;
        else
            h=1/(1+0.414*(d0/d)^(2*nn));
        end
        result(i,j)=h*g(i,j);
    end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(2,2,4);
imshow(J2);
title('d0=80 巴特沃斯高通滤波')

Voici le devis

Je suppose que tu aimes

Origine blog.csdn.net/weixin_51571728/article/details/124713971
conseillé
Classement