数字图像处理(四)频域增强

您所在的位置:网站首页 图像彩色处理matlab代码 数字图像处理(四)频域增强

数字图像处理(四)频域增强

2024-07-05 16:25| 来源: 网络整理| 查看: 265

要求:

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

 

1、问题及说明

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

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

2.效果展示

(1)高斯低通滤波器

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

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

(2)高斯高通滤波器

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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3