1、数字图像处理实验报告基于Matlab华东师范大学电子工程系2017.6实验1:图像灰度级修正【实验目的】掌握常用的图像灰度级修正方法(灰度变换法和直方图均衡化),加深对直方图的理解。观察图像的增强效果,对灰度级修正前后的图像加以比较。【实验内容】1)编程实现图像的灰度变换,改变图像的输入、输出映射参数范围(线性拉伸和反比);2)修改参数gamma值(大于、小于、等于1),观察处理结果;3)对图像直方图作均衡化处理,显示均衡前后的图像及其直方图。【实验代码】original=imread(lena.bmp);linstr=imadjust(original,0.3 0.7,0 1); %线性拉伸
2、opposite=imadjust(original,0 1,1 0); %反比above=imadjust(original,0 1,0 1,2); %gamma1equal=imadjust(original,0 1,0 1,1); %gamma=1below=imadjust(original,0 1,0 1,0.5); %gamma1);subplot(3,3,5);imshow(equal);title(gamma=1);subplot(3,3,6);imshow(below);title(gamma1时图像整体变暗,灰度级整体变小;gammawinbuf(k+1) temp=win
3、buf(k); winbuf(k)=winbuf(k+1); winbuf(k+1)=temp; end endendmid=winbuf(m*m+1)/2); 【输出图像】【实验思考】1.比较均值滤波和中值滤波的优缺点 均值滤波可以减小图像灰度级的“sharp”变化,可以降低噪声,但是降噪的同时也使边缘部分变得模糊,还可以平滑伪轮廓,去除图像中的不相关的小于掩模尺寸的细节。中值滤波器的主要功能是使具有不同灰度的点看起来更接近它的相邻点,去除那些相对于其邻域像素更亮或更暗、且区域小于n2/2的孤立像素集。中值滤波对降低某些类型的随机噪声性能优异,模糊程度低。在处理椒盐噪声时,均值滤波使图像变得
4、模糊,并且噪声去除性能很差,而中值滤波的效果却很好。显然,中值滤波比均值滤波更适合去除椒盐噪声。2. 分析窗口尺寸对滤波结果的影响窗口尺寸越大,图像越模糊,图像边缘和与掩膜大小接近的细节受到的影响也越大实验3:图像的锐化处理【实验目的】锐化的目的是加强图像的边界和细节,熟悉Robert、Sobel和Laplace算子进行检测,使图像特征(如边缘、轮廓等)进一步增强并突出。【实验内容】1)编写Robert算子滤波函数;2)编写Sobel算子滤波函数;3)编写Laplace算子滤波函数;4)编写限幅和标定函数,给出增强后的图像。【实验代码】function EX3I=imread(rice.bmp
5、);subplot(2,4,1);imshow(I);title(原始图像); rob=RobertFilter(I);subplot(2,4,2);imshow(rob);title( Robert算子滤波结果); R1=I+rob;la1=LimitAmplitude(R1);subplot(2,4,6);imshow(la1);title( Robert算子增强结果); a2=-1 -2 -1;0 0 0;1 2 1;b2=-1 0 1;-2 0 2;-1 0 1; sob=SobelFilter(I,a2,b2);subplot(2,4,3);imshow(sob);title( So
6、bel算子滤波结果); R2=I+sob;la2=LimitAmplitude(R2);subplot(2,4,7);imshow(la2);title(Sobel算子增强结果); % s=0 1 0;1 -4 1;0 1 0;s=1 1 1;1 -8 1;1 1 1;lap=LapFilter(I,s);cal=Calibration(lap);subplot(2,4,4);imshow(cal);title( Laplace算子滤波结果); lap=uint8(lap);lapr=I-lap;lapr3=LimitAmplitude(lapr);subplot(2,4,8);imshow(
7、lapr3);title( Laplace算子增强结果); %Robert算子滤波function rob=RobertFilter(F)a1=-1 0;0 1;b1=0 -1;1 0; %Robert算子模板M,N=size(F);f=zeros(M+1,N+1);f(1:M,1:N)=F(1:M,1:N);f(1:M,N+1:N+1)=F( : ,N:N);f(M+1:M+1,1:N)=F(M:M, : ); %边界填充g=zeros(M+1,N+1);for x=1:M for y=1:N mod=f(x,y) f(x,y+1);f(x+1,y) f(x+1,y+1); gsx=a1.*
8、mod; gsy=b1.*mod; g(x,y)=abs(sum(gsx(:)+abs(sum(gsy(:); endendIm=zeros(M,N);Im(1:M,1:N)=g(1:M,1:N);rob=uint8(Im); %Sobel算子滤波function sob=SobelFilter(F,sx,sy)%sx,sy为Sobel算子模板M,N=size(F);m,n=size(sx);f=zeros(M+m-1,N+n-1);f(m-1)/2+1:M+(m-1)/2,(n-1)/2+1:N+(n-1)/2)=F(1:M,1:N);f(m-1)/2+1:M+(m-1)/2,1:(n-1)
9、/2)=F( : ,1:(n-1)/2);f(m-1)/2+1:M+(m-1)/2,N+(n-1)/2:N+m-1)=F( : ,N-(n-1)/2:N);f(1:(m-1)/2,(n-1)/2+1:N+(n-1)/2)=F(1:(m-1)/2, : );f(M+(m-1)/2:M+m-1,(n-1)/2+1:N+(n-1)/2)=F(M-(m-1)/2:M, : ); %边界填充g=zeros(M+m-1,N+n-1);for x=(m-1)/2+1:M+(m-1)/2 for y=(n-1)/2+1:N+(n-1)/2 mod=f(x-1,y-1) f(x-1,y) f(x-1,y+1);
10、 f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1); gsx=sx.*mod; gsy=sy.*mod; g(x,y)=abs(sum(gsx(:)+abs(sum(gsy(:); endendIm=zeros(M,N);Im(1:M,1:N)=g(m-1)/2+1:M+(m-1)/2,(n-1)/2+1:N+(n-1)/2);sob=uint8(Im); %Laplace算子滤波function lap=LapFilter(F,S)M,N=size(F);m,n=size(S);f=zeros(M+m-1,N+n-1);f(m-1
11、)/2+1:M+(m-1)/2,(n-1)/2+1:N+(n-1)/2)=F(1:M,1:N);f(m-1)/2+1:M+(m-1)/2,1:(n-1)/2)=F( : ,1:(n-1)/2);f(m-1)/2+1:M+(m-1)/2,N+(n-1)/2:N+m-1)=F( : ,N-(n-1)/2:N);f(1:(m-1)/2,(n-1)/2+1:N+(n-1)/2)=F(1:(m-1)/2, : );f(M+(m-1)/2:M+m-1,(n-1)/2+1:N+(n-1)/2)=F(M-(m-1)/2:M, : );g=zeros(M+m-1,N+n-1);for x=(m-1)/2+1:M
12、+(m-1)/2 for y=(n-1)/2+1:N+(n-1)/2 mod=f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1); gs=S.*mod; g(x,y)=sum(gs(:); endendIm=zeros(M,N);Im(1:M,1:N)=g(m-1)/2+1:M+(m-1)/2,(n-1)/2+1:N+(n-1)/2);lap=Im; %限幅函数function la=LimitAmplitude(F)f=uint8(F);M,N=size(f);for
13、x=1:M for y=1:N if f(x,y)=255; f(x,y)=255; else if f(x,y)=0 f(x,y)=0; else f(x,y)=f(x,y); %将灰度值限定在0到255之间 end end endendla=f; %标定函数function cal=Calibration(F)F=double(F);M,N=size(F);m1=min(min(F);for x=1:M for y=1:N fm(x,y)=F(x,y)-m1; endendm2=max(max(fm);Fm=double(fm);for x=1:M for y=1:N fs(x,y)=25
14、5*(Fm(x,y)/m2); endendcal=uint8(fs);【输出图像】实验4:图像的统计特性【实验目的】观察序列图像帧内、帧间差值信号的分布曲线,理解图像在空间域和频率域上的统计特性及其在压缩中的重要性。【实验内容】1)编写帧内统计函数,计算差值图像(同一行差值、同一列差值),观察统计分布曲线;2)编写帧间统计函数,计算差值图像(相邻帧的差值),观察统计分布曲线(cla0/1或girl0/1)。附:可供参考的Matlab函数有sum、cat、plot【实验代码】function EX4oldbuf=imread(rice.bmp);I1=imread(CLA1.bmp);I2=i
15、mread(CLA2.bmp); newbuf1=Intrah(oldbuf,1); %帧内水平差值统计特性newbuf2=Intrah(oldbuf,0); %帧内垂直差值统计特性newbuf3=Inter(I1,I2); 帧间统计特性 subplot(2,3,1);imshow(oldbuf);title(原始图像);subplot(2,3,2);draw(newbuf1);title(水平差值统计特性);subplot(2,3,3);draw(newbuf2);title(垂直差值统计特性);subplot(2,3,4);imshow(I1);title(CLA1);subplot(2,
16、3,5);imshow(I2);title(CLA2);subplot(2,3,6);draw(newbuf3);title(帧间统计特性); function newbuf=Intrah(oldbuf,pop2) %帧内统计函数oldbuf=double(oldbuf);M,N=size(oldbuf); %防止溢出将数据类型从uint8型转换为double型newbuf=zeros(1,511);if pop2=1 for i=1:M for j=1:N-1 dH=oldbuf(i,j)-oldbuf(i,j+1);% 帧内水平灰度差值 newbuf(dH+256)=newbuf(dH+2
17、56)+1; end endelse for i=1:M-1 for j=1:N dV=oldbuf(i,j)-oldbuf(i+1,j); newbuf(dV+256)=newbuf(dV+256)+1; end endend function newbuf=Inter(oldbuf,oldbuf1) %帧间统计函数oldbuf=double(oldbuf);oldbuf1=double(oldbuf1);M,N=size(oldbuf); newbuf=zeros(1,511);for i=1:M for j=1:N dt=oldbuf(i,j)-oldbuf1(i,j);% 计算帧间差值 newbuf(dt+256)=newbuf(dt+256)+1; endend function draw(D)D=D/sum(D);x=-255:255;plot(x,D);axi
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2