数字图像处理(四)频域增强-彩色图像的频域滤波器+matlab

要求:

  • 彩色图像的频域滤波器:问题1:采用高斯低通滤波器对彩色图像进行滤波操作, 取半径为5, 20, 50, 80和250, 分别输出空域和频域的结果图像。 问题2:自行选择一种频域的高通滤波器对彩色图像进行滤波操作, 取3组不同的参数进行实验,根据实验效果进行参数的比较分析。

 

1、问题及说明

  • 采用高斯低通滤波器对彩色图像进行滤波操作, 取半径为5, 20, 50, 80和250, 分别输出空域和频域的结果图像。
  • 自行选择一种频域的高通滤波器对彩色图像进行滤波操作, 取3组不同的参数进行实验,根据实验效果进行参数的比较分析。

在问题二中选取高斯高通滤波器对彩色图像进行滤波操作,3组的参数分别选取半径为:5,50,250。因为篇幅的问题,选做样例的图片选取了3张。

2.效果展示

(1)高斯低通滤波器

空域:使用4张样例图,展示的效果如下:

数字图像处理(四)频域增强-彩色图像的频域滤波器+matlab_第1张图片

频域:使用与空域中相同的4张样例图,展示的效果如下:

数字图像处理(四)频域增强-彩色图像的频域滤波器+matlab_第2张图片

(2)高斯高通滤波器

数字图像处理(四)频域增强-彩色图像的频域滤波器+matlab_第3张图片

3、实验结果分析

低通滤波器可以通过低频分量,滤出高频分量,在图像处理领域,低频分量指图像的变化不大的部分;

高通滤波器可以通过高频分量,滤出低频分量,在图像处理领域,高频分量指图像变化较大的的部分,对应图像的边缘、细节、纹理信息。

4.完整代码

(1)空域

clc;
 
I1=imread('airplane.tiff'); OutImg1=I1; R1=I1(:,:,1); G1=I1(:,:,2); B1=I1(:,:,3);
 
%first color picture
R15=fspecial('gaussian',[5,5],5);
R115=imfilter(R1,R15,'replicate','same','conv');
G15=fspecial('gaussian',[5,5],5);
G115=imfilter(G1,G15,'replicate','same','conv');
B15=fspecial('gaussian',[5,5],5);
B115=imfilter(B1,B15,'replicate','same','conv');
Q15=cat(3,R115,G115,B115);
subplot(3,2,1);imshow(I1,[]);title('original');
subplot(3,2,2);imshow(Q15,[]);title('空域 半径5'); 
imwrite(Q15,'空域半径5.jpg');
 
R120=fspecial('gaussian',[20,20],5);
R1120=imfilter(R1,R120,'replicate','same','conv');
G120=fspecial('gaussian',[20,20],5);
G1120=imfilter(G1,G120,'replicate','same','conv');
B120=fspecial('gaussian',[20,20],5);
B1120=imfilter(B1,B120,'replicate','same','conv');
Q120=cat(3,R1120,G1120,B1120);
subplot(3,2,3);imshow(Q120,[]);title('空域 半径20'); 
imwrite(Q120,'空域半径20.jpg');
 
R150=fspecial('gaussian',[50,50],5);
R1150=imfilter(R1,R150,'replicate','same','conv');
G150=fspecial('gaussian',[50,50],5);
G1150=imfilter(G1,G150,'replicate','same','conv');
B150=fspecial('gaussian',[50,50],5);
B1150=imfilter(B1,B150,'replicate','same','conv');
Q150=cat(3,R1150,G1150,B1150);
subplot(3,2,4);imshow(Q150,[]);title('空域 半径50'); 
imwrite(Q150,'空域半径50.jpg');
 
R180=fspecial('gaussian',[80,80],5);
R1180=imfilter(R1,R180,'replicate','same','conv');
G180=fspecial('gaussian',[80,80],5);
G1180=imfilter(G1,G180,'replicate','same','conv');
B180=fspecial('gaussian',[80,80],5);
B1180=imfilter(B1,B180,'replicate','same','conv');
Q180=cat(3,R1180,G1180,B1180);
subplot(3,2,5);imshow(Q180,[]);title('空域 半径80'); 
imwrite(Q180,'空域半径80.jpg');
 
R1250=fspecial('gaussian',[250,250],5);
R11250=imfilter(R1,R1250,'replicate','same','conv');
G1250=fspecial('gaussian',[250,250],5);
G11250=imfilter(G1,G1250,'replicate','same','conv');
B1250=fspecial('gaussian',[250,250],5);
B11250=imfilter(B1,B1250,'replicate','same','conv');
Q1250=cat(3,R11250,G11250,B11250);
subplot(3,2,6);imshow(Q1250,[]);title('空域 半径250'); 
imwrite(Q1250,'空域半径250.jpg');

频域:

I1=imread('baboon.tiff');
I=rgb2gray(I1);
I=double(I);
[M,N]=size(I);
m=(M+1)/2;
n=(N+1)/2; 
d1=5;%截止频率
F=fftshift(fft2(I));%空域转频域,平移中心
H1=zeros(M,N);
G1=zeros(M,N);
for i=1:M
   for j=1:N
       d=(i-m)^2+(j-n)^2;
       H1(i,j)=exp(-d/(2*d1^2));
       G1(i,j)=H1(i,j)*F(i,j);
    end
end
O1=ifft2(ifftshift(G1));%平移中心,频域转空域
O1=real(O1);%取实数部分
subplot(3,2,1);imshow(I,[]);title('orgin');
subplot(3,2,2);imshow(O1,[]);title('频域 5');
 
d2=20;
H2=zeros(M,N);
G2=zeros(M,N);
for i=1:M
   for j=1:N
       d=(i-m)^2+(j-n)^2;
       H2(i,j)=exp(-d/(2*d2^2));
       G2(i,j)=H2(i,j)*F(i,j);
    end
end
O2=ifft2(ifftshift(G2));
O2=real(O2);
subplot(3,2,3);imshow(O2,[]);title('频域 20');
 
d3=50;
H3=zeros(M,N);
G3=zeros(M,N);
for i=1:M
   for j=1:N
       d=(i-m)^2+(j-n)^2;
       H3(i,j)=exp(-d/(2*d3^2));
       G3(i,j)=H3(i,j)*F(i,j);
    end
end
O3=ifft2(ifftshift(G3));
O3=real(O3);
subplot(3,2,4);imshow(O3,[]);title('频域 50');
 
d4=80;
H4=zeros(M,N);
G4=zeros(M,N);
for i=1:M
   for j=1:N
       d=(i-m)^2+(j-n)^2;
       H4(i,j)=exp(-d/(2*d4^2));
       G4(i,j)=H3(i,j)*F(i,j);
    end
end
O4=ifft2(ifftshift(G4));
O4=real(O4);
subplot(3,2,5);imshow(O4,[]);title('频域 80');
 
d5=250;
H5=zeros(M,N);
G5=zeros(M,N);
for i=1:M
   for j=1:N
       d=(i-m)^2+(j-n)^2;
       H5(i,j)=exp(-d/(2*d5^2));
       G5(i,j)=H5(i,j)*F(i,j);
    end
end
O5=ifft2(ifftshift(G5));
O5=real(O5);
subplot(3,2,6);imshow(O5,[]);title('频域 250');

(2)高斯高通滤波

clear;
clc;
x = imread('airplane.tiff');
x = imresize(x,1/2);
xx = x;
r = fft2(xx(:,:,1));
rf = fftshift(r);
g = fft2(xx(:,:,2));
gf = fftshift(g);
b = fft2(xx(:,:,3));
bf = fftshift(b);
d0 = 250;
 
temp = Gauss(rf,d0);
rf = rf.*temp;
gf = gf.*temp;
bf = bf.*temp;
rfff = log(1+abs(rf));
gfff = log(1+abs(gf));
bfff = log(1+abs(bf));
rr = ifftshift(rf);
% rig = ifft2(rr);
rig = uint8(real(ifft2(rr)));
gr = ifftshift(gf);
% gig = ifft2(gr);
gig = uint8(real(ifft2(gr)));
br = ifftshift(bf);
% big = ifft2(br);
big = uint8(real(ifft2(br)));
mr = max(max(rfff));
mg = max(max(gfff));
mb = max(max(bfff));
rrf = uint8(rfff.*(255.0/mr));
ggf = uint8(gfff.*(255.0/mg));
bbf = uint8(bfff.*(255.0/mb));
 
mri = max(max(rig));
mgi = max(max(gig));
mbi = max(max(big));
 
 
xxx = cat(3,rrf,ggf,bbf);
 
xx = cat(3,rig.*(255.0/mri),gig.*(255.0/mgi),big.*(255.0/mbi));
 
subplot(1,2,1);imshow(xx)
subplot(1,2,2);imshow(xxx,[])
function [temp]=Gauss(image,d0)
    [x,y] = size(image);
    temp = zeros(x,y);
    for i =1:x
       for j = 1:y
          d=sqrt((i-x/2)^2+(j-y/2)^2);
            temp(i,j)=1-exp(-d*d/(2*d0*d0));
%           temp(i,j)=h*image(i,j);
       end
    end
end

 

你可能感兴趣的:(图像处理,课程总结,频域增强)