数字图像处理matlab代码_第1页
数字图像处理matlab代码_第2页
数字图像处理matlab代码_第3页
数字图像处理matlab代码_第4页
数字图像处理matlab代码_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。1、不同滤波器的频域降噪1.1 理想低通滤波器(ILPF)和二阶巴特沃斯低通滤波器(BLPF)clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1);subplot(2,2,1),imshow(I1),title(原始图像);I2=imnoise(I1,salt & pepper);subplot(2,2,2),imshow(I2),title(噪声图像);F=double(I2);g = fft2(F);g = fftshift(g);M, N=size(

2、g);result1=zeros(M,N);result2=zeros(M,N);nn = 2;d0 =50;m = fix(M/2);n = fix(N/2);for i = 1:M for j = 2:N d = sqrt(i-m)2+(j-n)2); h = 1/(1+0.414*(d/d0)(2*nn); result1(i,j) = h*g(i,j); if(g(i,j) 50) result2(i,j) = 0; else result2(i,j) =g(i,j); end endendresult1 = ifftshift(result1);result2 = ifftshift

3、(result2);J2 = ifft2(result1);J3 = uint8(real(J2);subplot(2, 2, 3),imshow(J3,),title(巴特沃斯低通滤波结果);J4 = ifft2(result2);J5 = uint8(real(J4);subplot(2, 2, 4),imshow(J5,),title(理想低通滤波结果);实验结果: 1.2 指数型低通滤波器(ELPF) clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,gaus

4、sian,0.01);I4=imnoise(I3,salt & pepper,0.01);subplot(1,3,1),imshow(I2), title(原始图像); %显示原始图像subplot(1,3,2),imshow(I4),title(加入混合躁声后图像 ); s=fftshift(fft2(I4);%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40; for i=1:M for j=1:N d=

5、sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 h=exp(log(1/sqrt(2)*(d/d0)2); s(i,j)=h*s(i,j); %ILPF滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s); subplot(1,3,3),imshow(s),title(ELPF滤波后的图像(d=40)); 运行结果: 1.3 梯形低通滤波器(TLPF)clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1); %读取图

6、像I2=im2double(I1);I3=imnoise(I2,gaussian,0.01);I4=imnoise(I3,salt & pepper,0.01);subplot(1,3,1),imshow(I2),title(原始图像); %显示原始图像 subplot(1,3,2),imshow(I4),title(加噪后的图像); s=fftshift(fft2(I4);%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进

7、行取整d0=10;d1=160; for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 if (d=d0) h=1; else if (d0=d1) h=(d-d1)/(d0-d1); else h=0; end end s(i,j)=h*s(i,j); %ILPF滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(

8、s),title(TLPF滤波后的图像);运行结果:1.4 高斯低通滤波器(GLPF)clear all;clc;close all;I1=imread(me.jpg);I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,gaussian,0.01);I4=imnoise(I3,salt & pepper,0.01);subplot(1,3,1),imshow(I2),title(原始图像);subplot(1,3,2),imshow(I4),title(加噪后的图像);s=fftshift(fft2(I4);%将灰度图像的二维不连续Fourier 变

9、换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40; for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 h=1*exp(-1/2*(d2/d02); %GLPF滤波函数 s(i,j)=h*s(i,j); %ILPF滤波后的频域表示 end ends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fo

10、urier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(s),title(GLPF滤波后的图像(d=40));运行结果: 1.5 维纳滤波器clc;clear all;close all;I=imread(me.jpg); %读取图像 I=rgb2gray(I); I1=im2double(I);I2=imnoise(I1,gaussian,0.01);I3=imnoise(I2,salt & pepper,0.01);I4=wiener2(I3);subplot(1,3,1),imshow(I1),title(原始图像); %显示原始图像 subplot

11、(1,3,2),imshow(I3),title(加入混合躁声后图像); I4=wiener2(I3);subplot(1,3,3),imshow(I4),title(wiener滤波后的图像); 运行结果:结 论:理想低通滤波器,虽然有陡峭的截止频率,却不能产生良好的效果,图像由于高频分量的滤除而变得模糊,同时还产生振铃效应。 巴特沃斯滤波器通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。由于转移特性曲线的尾部保留较多的高频,所以对噪声的平滑效果不如ILPE。 指数型低

12、通滤波器具有较平滑的过滤带,经此平滑后的图像没有“振铃”现象,而与巴沃特斯滤波相比,它具有更快的衰减特性,处理图像稍微模糊一些。梯形低通滤波器的性能介于巴沃特斯与完全平滑滤波器之间,对图像具有一定的模糊和振铃效应。高斯低通滤波器其原理就是RC电路具有使低频信号较易通过而抑制较高频率信号的作用,可以有效地去除服从正态分布的噪声。维纳滤波在处理光学传递函数在零点附近的噪声方法问题比较有效,通过选择适当参数,可以有效地消除或抑制噪声和“振铃效应”。2、边缘增强2.1 Robert 算子边缘检测clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I)

13、;subplot(1,3,1),imshow(I),title(原始图像); %显示原始图像 BW1 = edge(I,robert); subplot(1,3,2),imshow(BW1),title(robert算子检测结果(T默认)); BW2 = edge(I,robert,0.04); %T取0.04subplot(1,3,3),imshow(BW2),title(robert算子检测结果(T=0.04)); 运行结果:2.2 Sobel 算子边缘检测clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I); %读取图像subplo

14、t(1,3,1),imshow(I),title(原始图像); %显示原始图像 BW1 = edge(I,sobel); %阈值默认subplot(1,3,2),imshow(BW1),title(sobel算子(T默认));BW2=edge(I,sobel,0.04); %阈值取0.04subplot(1,3,3),imshow(BW2),title(sobel算子(T=0.04));运行结果:2.3 Prewitt算子边缘检测clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I);subplot(1,3,1),imshow(I),tit

15、le(原始图像); %显示原始图像 BW1 = edge(I,Prewitt); %阈值默认subplot(1,3,2),imshow(BW1),title(Prewitt算子(T默认));BW2 = edge(I,Prewitt,0.04); %T取0.04subplot(1,3,3),imshow(BW2),title(Prewitt算子(T=0.04)); %阈值越小,检测出的边缘越丰富运行结果:2.4 LoG(laplacian of gaussian)算子边缘检测clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I);subplo

16、t(1,3,1),imshow(I),title(原始图像); %显示原始图像 BW1 = edge(I,log,0.003); %T=0.003,sigma默认2subplot(1,3,2),imshow(BW1),title( LoG 算子(sigma=2);BW2 = edge(I,log,0.003,2.20); %T=0.003,sigma=2.20subplot(1,3,3),imshow(BW2),title( LoG 算子(sigma=2.20);运行结果:2.5 Canny算子边缘检测clc;clear all;close all;I=imread(me.jpg);I=rgb

17、2gray(I);subplot(1,3,1),imshow(I),title(原始图像); %显示原始图像 BW1 = edge(I,canny); %sigma默认1subplot(1,3,2),imshow(BW1),title(canny算子(sigma=1);BW2 = edge(I,canny,0.04 0.10,1.3); %T取0.04 0.10sigma=1.3subplot(1,3,3),imshow(BW2),title(canny算子(sigma=1.3);运行结果:结 论:Roberts算子定位比较精确,但由于不包括平滑,所以对噪声比较敏感。该算子对具有陡峭边缘且噪声

18、低的图像效果较好。Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。LOG滤波器中的正比于低通滤波器的宽度,越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。而且LOG方法没有解决如何组织不同尺度滤波器输出的边缘图为单一的、正确的边缘图的具体方法。Canny方法则以一阶导数为基础来判断边缘点。它是一阶

19、传统微分中检测阶跃型边缘效果最好的算子之一。它比Roberts算子、Sobel算子和Prewitt算子极小值算法的去噪能力都要强,但它也容易平滑掉一些边缘信息。二、编写程序完成不同锐化方法的图像锐化的算法并进行比较,得出结论。1、微分1.1 基于一阶微分的图像锐化-梯度法clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I);subplot(1,2,1),imshow(I),title(原始图像); %显示原始图像 I=double(I);IX,IY=gradient(I); %返回梯度值OUT1=sqrt(IX.*IX+IY.*IY);s

20、ubplot(1,2,2),imshow(OUT1),title(梯度值图像 ); 运行结果:2、高通滤波法2.1 理想高通滤波(IHPF)clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1);I2=im2double(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 s=fftshift(fft2(I2); M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进

21、行取整d0=10; %初始化d0 for i=1:Mfor j=1:Nd=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 if d=d0 h=0; else h=1; end s(i,j)=h*s(i,j); %IHPF滤波后的频域表示 endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,2,2),imshow(s),title(IHPF滤波后的图像(d=10) ); 运行结果:2.2 巴特沃斯高通滤

22、波(BHPF)clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1); %读取图像I2=im2double(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 s=fftshift(fft2(I2);%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=10; %初始化d0 for i=

23、1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 if (d=0) h=0; else h=1/(1+0.5*(d0/d)(2*n); %BHPF滤波函数 end s(i,j)=h*s(i,j); %BHPF滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s); subplot(1,2,2),imshow(s),title(BHPF滤波后的图像(d=10));运行结果:2.3 指数型高通滤波(EHPF)clc;clear all;close al

24、l;I1=imread(me.jpg);I1=rgb2gray(I1);I2=im2double(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 s=fftshift(fft2(I2);%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=10; %初始化d0 for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2

25、); %点(i,j)到傅立叶变换中心的距离 if (d=0) h=0; else h=exp(log(1/sqrt(2)*(d0/d)2);%EHPF滤波函数 end s(i,j)=h*s(i,j); %EHPF滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,2,2),imshow(s),title(EHPF滤波后的图像(d=10)); 运行结果:2.4 梯形高通滤波(THPF)clc;clear all;

26、close all;I1=imread(me.jpg);I1=rgb2gray(I1); %读取图像I2=im2double(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 s=fftshift(fft2(I2); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=5; d1=10; %初始化d0 for i=1:M for j=1:N

27、d=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 if (d=d0) h=0; else if (d0=d1) h=(d-d1)/(d0-d1); else h=1; end end s(i,j)=h*s(i,j); %THPF滤波后的频域表示 endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,2,2),imshow(s),title(THPF滤波后的图像); 运行结果:2.5 高斯型高通滤波(G

28、HPF)clc;clear all;close all;I1=imread(me.jpg);I1=rgb2gray(I1);I2=im2double(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 s=fftshift(fft2(I2); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=10; %初始化d0 for i=1:M for

29、j=1:N d=sqrt(i-n1)2+(j-n2)2); %点(i,j)到傅立叶变换中心的距离 h=1*exp(1-1/2*(d2/d02); %GHPF滤波函数 s(i,j)=h*s(i,j); %GHPF滤波后的频域表示 endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,2,2),imshow(s),title(GHPF滤波后的图像(d=10) ); 运行结果:3、反锐化掩模法clc;clear all;close all;I

30、1=imread(me.jpg);I1=rgb2gray(I1);subplot(1,2,1),imshow(I1),title(原始图像); %显示原始图像 I=im2double(I1);M=1 1 1;1 1 1;1 1 1/9;J2=filter2(M,I);J3=I-J2;subplot(1,2,2),imshow(J3),title(反锐化掩模法);运行结果:结 论:图像平滑往往使图像中的边界、轮廓变的模糊,为了减少这类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因

31、是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。微分运算是求信号的变化率,有加强高频分量的作用,从而使图像轮廓清晰。因此需要对图像的某种导数运算是各向同性的,梯度运算符合上述条件。此法的缺点是增强后的图像仅显示灰度变换比较剧烈的边缘轮廓,而灰度变化平缓的区域呈现一片黑色,大量信息丢失。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。图像中的边缘与图像频谱中的高频分量相对应,所以采用高通滤波让高频分量顺利通过,而对低频分量限制,从而实现图像的锐化。掩模法是指将原始图像乘以一个放大系数,然后减去低通图像构成一幅高频增

32、强图像,这样的图像恢复了部分高通滤波时丢失的低频成分,使得最终结果与原始图像更为接近。三、 编写程序完成不同分割方法的图像分割的算法并进行比较,得出结论。图像分割是图像处理的重要领域,是计算机进一步处理的基础。笔者完成了 两个比较有代表性的图像分割算法,一个是基于灰度的阈值分割,一个是基于边 缘信息的分割,分水岭算法进行的图像分割。 1. Otsu 法阈值分割图像clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I);subplot(1,2,1),imshow(I),title(原始图像); %显示原始图像 level=graythresh

33、(I); %确定灰度阈值 BW=im2bw(I,level); subplot(1,2,2),imshow(BW),title(Otsu 法阈值分割图像);运行结果: 可以看出,Otsu 法阈值分割图像对于前景目标和背景灰度差别 较大、目标灰度范围较小,的情况下可以实现较为理想的分割。在一定的领域具 有重要应用。但对背景和目标灰度分布不明显的情况下分割效果不理想。 2. 分水岭算法图像分割。 clc;clear all;close all;I=imread(me.jpg);I=rgb2gray(I);f=double(I); hv=fspecial(prewitt); hh=hv.; gv=a

34、bs(imfilter(f,hv,replicate); gh=abs(imfilter(f,hh,replicate); g=sqrt(gv.2+gh.2);%计算梯度 df=bwdist(f);%计算到最近不为0的点的距离 L1=watershed(df); %分水岭算法 em=L1=0; im=imextendedmax(f,20);%计算大于某阈值的极大值g2=imimposemin(g,im|em);%使用形态重构修改强度图像 g,使得它在 im|em 非零的地方只有区域极小值。 L2=watershed(g2); wr2=L2=0; f(wr2)=255; subplot(1,2,

35、1),imshow(I),title(原始图像); subplot(1,2,2),imshow(uint8(f),title(分割结果);运行结果: 可以看出,分水岭算法可以较好的实现图像的分割。分水岭算法 是图像分割的一种重要方法, 但是此方法对噪声比较敏感, 容易造成过分割现象。 需要进行一定的预处理。 本程序在进行自动标记后效果明显, 分割效果比较理想。四、 编写程序完成不同压缩方法的图像压缩的算法并进行比较,得出结论。图像压缩算法有有损压缩和无损压缩两大类。无损编码主要是熵编码,典型 的有哈夫曼编码,还有利用图像空间冗余的游程编码。有损编码主要是变换域编 码,如 DCT 变换编码,小波压缩编码等。1.T 变换压缩 clc;clear all;close all;X=imread(me.jpg); X=rgb2gray(X); subplot(221),imshow(X),title(原始图像); %对图像用小波进行层小波分解 c,s=wavedec2(X,2,bior3.7); %提取小波分解结构中的一层的低频系数和高频系数 cal=appcoef2(c,s,bior3.7,1); ch1=detcoef2(h,c,s,1); %水平方向 cv1=detcoef2(v,c,s,1); %垂直方向 cd1=detcoef2(d,c,s,1); %斜线方向

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论