南京邮电大学图像实验.docx
- 文档编号:11007799
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:27
- 大小:1.57MB
南京邮电大学图像实验.docx
《南京邮电大学图像实验.docx》由会员分享,可在线阅读,更多相关《南京邮电大学图像实验.docx(27页珍藏版)》请在冰豆网上搜索。
南京邮电大学图像实验
南京邮电大学图像实验
通信与信息工程学院
2016/2017学年第一学期
实验报告
实验课程名称数字图像处理与图像通信实验
专业电子信息工程
学生学号
学生姓名
指导教师谢世鹏
指导单位广播工程电视系
实验一图像信号的数字化
一、实验目的
通过本实验了解图像的数字化参数取样频率(像素个数)、量化级数与图像质量的关系。
二、实验内容
1、编写并调试图像数字化程序。
要求参数k,N可调。
其中,k为亚抽样比例,N为量化比特数。
2、可选任意图像进行处理,在显示器上观察各种数字化参数组合下的图像效果。
三、实验方法及编程
在数字系统中进行处理、传输和存储图像,必须把代表图像的连续信号转变为离散信号,这种变换过程称为图像信号的数字化。
它包括采样和量化两种处理。
本实验对数字图像进行再采样和再量化,以考察人眼对数字图像的分辨率和灰度级的敏感程度。
程序的主体部分如下:
functionnewbuf=Sample_Quant(oldbuf,k,n)%
%函数名称:
Sample_Quant()图像数字化算法函数
%oldbuf原图像数组
%MN原图像尺寸
%k取样间隔
%n量化比特值
%newbuf存放处理后的图像二维数组
[M,N]=size(oldbuf);
oldbuf=double(oldbuf);
x=1;y=1;
whilex whiley new=(round(oldbuf(x,y)/(2^(8-n))))*(2^(8-n)); fori=0: k-1 forj=0: k-1 if(x+i newbuf(x+i,y+j)=uint8(new); end end end y=y+k; end ify>=N y=1; end x=x+k; end 四、实验结果及分析 实验截图如下: 由实验结果可以看出,亚抽样比例k和量化比特数N对都会使图像变得模糊,但两者的影响是不相同的。 亚抽样比例k的大小决定了数字化图像的方块效应是否明显。 当k较大时,数字化图像会有较为明显的块状出现,对于图像的视觉效果影响很大。 量化比特数N则决定了图像的灰度级,量化比特数为N时,图像有个2N灰度级。 所以当N较小时,图像会出现不规则的区域有着相同的灰度值的情况,但是这些区域在原图像中却有着差别较小的不同的灰度值。 特别是在原图的灰度渐变的区域,这种效应会变得尤为明显。 实验二图像灰度级修正 一、实验目的 掌握常用的图像灰度级修正方法,即图像的灰度变换法和直方图均衡化法,加深对灰度直方图的理解。 二、实验内容 1、编程实现图像的灰度变换。 改变图像输入、输出映射的灰度参数范围(拉伸和反比),观看图像处理结果。 2、修改可选参数gamma值,使其大于1,等于1和小于1,观看图像处理结果。 3、对图像直方图均衡化处理,显示均衡前后的直方图和图像。 三、实验方法及编程 灰度级修正是图像空间域上的增强方法图像增强,它以图像的灰度映射变换为基础,直接对图像中的像素进行处理。 常用到三种基本方式: 线性,对数,幂次。 程序的主体部分如下: Functionnewbuf=GrayGamma(oldbuf,r) newbuf=imadjust(oldbuf,stretchlim(oldbuf),[],r); newbuf=uint8(newbuf); functionnewbuf=GrayEqualize(oldbuf) %函数名称: %GrayEqualize()直方图均衡算法函数 %参数: %oldbuf原图像数组 %newbuf存放处理后的图像二维数组 [M,N]=size(oldbuf); NN=M*N;sk=0; [COUNTS,X]=imhist(oldbuf,256); fori=1: M forj=1: N kk=double(oldbuf(i,j)); fork=1: kk sk=sk+COUNTS(k); end sk=sk/NN*256; newbuf(i,j)=sk; end end newbuf=uint8(newbuf); 四、实验结果及分析 实验截图如下: 由实验结果可以看出,所选的测试图像的灰度值主要分布于低值的部分。 经过无gamma值的灰度值变换后,直观地看出: 分布于低值部分的直方图分散开来,分布于几乎所有的灰度值,但是对映于各个灰度值的像素个数分布仍是不均匀的。 变换后的图像比原图显得明亮、清晰。 经过第二第三幅图像可以进一步看出: gamma值的灰度值变换则明显受gamma值的影响: 当gamma值大于1时,直方图有向灰度为0的一端压缩的趋势,gamma越大,这种趋势越明显。 此时的图像比原图清晰,但是原本偏暗的部分更加偏黑,原本较亮的部分则变得发白,总体而言,图像偏暗的部分较多。 当gamma值小于1时,其趋势与gamma值大于1相反,故整个图像显得发白。 直方图均衡后的图像也显得较为清晰、均匀。 它能尽量将直方图变得均衡,分布也更为均匀,各个灰度值所对应的像素个数尽可能相同。 实验三图像的平滑滤波 一、实验目的 图像平滑主要目的是减少噪声对图像的影响。 噪声有很多种类,不同的噪声有不同的抑制措施。 本实验要求用平滑线性滤波和中值滤波两种最典型、最常用的处理算法进行程序设计,学习如何对已被污染的图像进行“净化”。 通过平滑处理,对结果图像加以比较,得出自己的实验结论。 二、实验内容 1、编写并调试窗口尺寸为m×n的平滑滤波函数。 2、编写并调试窗口尺寸为m×n的中值滤波函数。 三、实验方法及编程 在M*N的图像f上,用m*n大小的滤波器模板进行线性滤波由这个公式给出: 程序如下: functionnewbuf=AverageFilter(oldbuf,M,N,m) %函数名称: %AverageFilter()均值滤波算法函数 %参数: %oldbuf噪声图像数组 %MN噪声图像尺寸 %m矩形平滑窗口尺寸 %newbuf存放处理后的图像二维数组 oldbuf=double(oldbuf); newbuf=zeros(M,N); fori=(m+1)/2: M-(m+1)/2 forj=(m+1)/2: N-(m+1)/2 forx=-(m-1)/2: (m-1)/2; fory=-(m-1)/2: (m-1)/2; newbuf(i,j)=newbuf(i,j)+oldbuf(i+x,j+y)/(m*m); end end end end functionnewbuf=MedianFilter(oldbuf,M,N,m) %函数名称: %MedianFilter()中值滤波算法函数 %参数: %oldbuf原图像数组 %MN原图像尺度 %m滑动窗口尺寸 %newbuf存放处理后的图像数组 fori=(m+1)/2: M-(m+1)/2 forj=(m+1)/2: N-(m+1)/2 k=1; forx=-(m-1)/2: (m-1)/2; fory=-(m-1)/2: (m-1)/2; winbuf(k)=oldbuf(i+x,j+y); k=k+1; end end newbuf(i,j)=SeekMid(winbuf,m); end end winsize=length(winbuf);%取窗口尺寸 fori=1: winsize%编写排序函数 forj=1: winsize-i if(winbuf(i)>winbuf(j+i)) t=winbuf(i); winbuf(i)=winbuf(j+i); winbuf(j+i)=t; end end end mid=winbuf(ceil(m*m/2)); 四、实验结果及分析 实验截图如下: 由实验结果可以看出,对于处理椒盐噪声,中值滤波比均值滤波要好很多。 当窗口大小为3×3时,均值滤波能一定程度上降低噪声的污染,但是,仍能看出在噪声点,并没有完全消除噪声,只是将噪声与周围的图像进行了平均,噪声点只是显得模糊了,并没有完全消除。 相比之下,中值滤波则效果明显,同为3×3的窗口,几乎能把所有的噪声点消除,效果非常显著。 当窗口大小变大时,也能将大部分噪声点消除,但是会带来严重的模糊。 同时我们可以看出,两种方法都使得处理后的图像比原图要模糊,并且随着窗口的变大,图像变得越来越模糊。 通过两种方法之间的比较则可以看出,同等窗口下中值滤波带来的模糊比均值滤波要轻一些。 实验四名称: 图像的锐化处理 一、实验目的 学习用锐化处理技术来加强图像的目标边界和图像细节。 对图像进行梯度算子、Roberts算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,是图像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。 二、实验内容 1、编写梯度算子和Roberts算子滤波函数。 2、编写Sobel算子滤波函数。 3、编写拉普拉斯边缘增强滤波函数。 三、实验方法及编程 在实验中,我们对于这三种算子的算法,都有其各自对应的模板,根据这个模板我们可以方便地编写出程序的主体结构。 指导书中也有对应的流程框图可供参考。 程序的主体部分如下: functionnewbuf=RobFilter(oldbuf,M,N); %RobFilter() fori=1: M-1 forj=1: N-1 newbuf(i,j)=abs(oldbuf(i,j)-oldbuf(i+1,j+1))+abs(oldbuf(i+1,j)-oldbuf(i,j+1)); end end functionnewbuf=SobFilter(oldbuf,M,N); %SobFilter() fori=2: M-1 forj=2: N-1 sx=oldbuf(i+1,j-1)+2*oldbuf(i+1,j)+oldbuf(i+1,j+1)-oldbuf(i-1,j-1)- 2*oldbuf(i-1,j)-oldbuf(i-1,j+1; sy=oldbuf(i-1,j+1)+2*oldbuf(i,j+1)+oldbuf(i+1,j+1)-oldbuf(i-1,j-1)- 2*oldbuf(i,j-1)-oldbuf(i+1,j-1; newbuf(i,j)=abs(sx)+abs(sy); end end functionnewbuf=LapFilter(oldbuf,M,N); %LapFilter() fori=2: M-1 forj=2: N-1 newbuf(i,j)=5*oldbuf(i,j)-oldbuf(i-1,j)-oldbuf(i+1,j)-oldbuf(i,j-1)-oldbuf(i,j+1); end end 四、实验结果及分析 实验截图如下: 从上面的图像可以看出: Robert梯度算子得出的图像能够得出原图的大部分边缘细节,灰度差别越大的地方结果越大,所以显示时较为明亮。 一些边缘由于灰度差值较小,在得出的结果图像中不容易分辨出来。 Sobel算子得出的图像则显得明亮而粗壮。 所有的边缘细节均被显示出来,特别是人物面部。 由于其结果粗壮,面部细节显得非常密集。 Laplace算子则用以将图像的边缘、细节增强,通过结果结果可以看出,图像的细节明显比原来突出。 但是这个方法存在的弊端是,在背景区域,结果图像中有一些噪声的图样也被加强了。 实验五图像方块编码(BTC) 一、实验目的 通过编程实验,掌握方块编码的基本方法及压缩性能。 二、实验内容 编程实现子块为n×n的方块编码基本方法,分别取n=2,4,8方块尺寸进行方块编码实验,计算编码后的均方误差和压缩比。 三、实验方法及编程 本实验采用的方案为: (1) (2) (3) 程序的主体部分如下: functionoutbuf=BtcBlock(inbuf,n) %btcblock()方块编码算法函数 %inbuf方块数组 %n方块尺寸 %outbuf存放处理后的方块图像 temp=0;temp0=0;temp1=0;q=0;m=n*n; inbuf=double(inbuf); fori=1: n forj=1: n temp=temp+inbuf(i,j); end end xt=temp/m; fori=1: n forj=1: n if(inbuf(i,j)>=xt) q=q+1; temp1=temp1+inbuf(i,j); else temp0=temp0+inbuf(i,j); end end end ifq~=m a0=round(temp0/(m-q)); end ifq~=0 a1=round(temp1/q); end fori=1: n forj=1: n if(inbuf(i,j) outbuf(i,j)=a0; else outbuf(i,j)=a1; end end end 四、实验结果及分析 实验截图如下: 由实验结果可以看出,窗口大小较小(如2×2)时,编码图像与原图像比几乎相同,很难察觉出误差。 而当窗口较大(如8×8)时,在一些细节较多的部位就能看出有较明显的方块效应。 同时,窗口越大,其对码率的压缩效果也越明显。 综合考虑,当窗口大于8×8时,方块效应会导致观察上有一定的障碍,故选择2×2或4×4较为合适。 实验六图像线性预测编码(DPCM) 一、实验目的 通过编程设计,掌握帧内DPCM的编解码方法(预测、量化)及其压缩性能。 二、实验内容: 1、编制一维前值预测DPCM编解码程序,预测系数取(1,0,0,0)。 2、编制二维前值预测DPCM编解码程序,预测系数取(1/2,1/4,0,1/4)。 3、重建图像f′(i,j)与原图像f(i,j)的误差图像,用绝对值表示如下。 式中的n为放大因子,以便观察误差的分布情况。 本实验采用15个量化分层的主观量化器,其量化电平分别取(0,±5,±7,±10,±17,±28,±39,±52,±67)。 三、实验方法及编程 图像的线性预测编码所运用的基本原理是基于二维图像中相邻图像间存在着很强的相关性。 假定当前待编码的像素为 , 表示预测系数,并用 表示预测值,则 的预测值为: 预测误差为: 的恢复值为: ( 为 的量化值) 程序的主体部分如下: functionnewbuf=Dpcm_code(oldbuf,M,N,dim); %Dpcm_Code()“线性预测编解码器”算法函数 %oldbuf原图像数组 %M,N原图像尺度 %dim选择预测编码维数 %newbuf存放处理后的图像二维数组 globalnewbuf;%定义全局变量 fori=1: M forj=1: N pre_val=Predict_Value(i,j,N,dim); err=oldbuf(i,j)-pre_val; quan_err=Quant_Value(err); res_val=Restor_Value(quan_err,pre_val); newbuf(i,j)=Clip_Value(res_val); end end functionnewbuf=Error_Code(M,N,dim); %Error_Code()“传输误码解码器”算法函数 %参数: %M,N原图像尺度 %dim选择预测编码维数 %newbuf存放处理后的图像二维数组 globalnewbuf; wrong=zeros(M,N); wrong(100,100)=120; fori=1: M forj=1: N pre_val=Predict_Value(i,j,N,dim); err=wrong(i,j); quan_err=Quant_Value(err); res_val=Restor_Value(quan_err,pre_val); newbuf(i,j)=Clip_Value(res_val); end end functionPvalue=Predict_Value(row,col,N,dim) %{Thisfunctionisusedtogivepredictedvalueaslinearpredictor. %Thepredictionformulaisasfollows: %1_DDPCM: ^x[i,j]=128ifj=1 %x'[i,j-1]ifj>1 %2_DDPCM: ^x[i,j]=128ifi=1,j=1 %x'[i,j-1]ifi=1,j>1 %x'[i-1,j]ifi>1,j=1orN %1/2x'[i,j-1]ifi>1,j>1 %1/8x'[i-1,j-1](Pirsch'spredictor) %1/4x'[i-1,j] %1/8x'[i-1,j+1] globalnewbuf; switchdim case1 ifcol==1 Pvalue=128; else Pvalue=newbuf(row,col-1); end case2 if(row==1&&col==1) Pvalue=128; end if(row==1&&col>1) Pvalue=newbuf(row,col-1); end if(row>1&&col==1)||(row>1&&col==N) Pvalue=newbuf(row-1,col); end if(row>1&&col>1&&col end end functionQvalue=Quant_Value(err); %Thisfunctionisusedaslinearquantizer.Thequantizerhastotally %15quantizationlevel: %0,±5,±10,±17,±28,±39,±52,±67 if(abs(err)<=2.5)lev=0; else if(abs(err)<=7.5)lev=5; else if(abs(err)<=13.5)lev=10; else if(abs(err)<=22.5)lev=17; else if(abs(err)<=33.5)lev=28; else if(abs(err)<=45.5)lev=39; else if(abs(err)<=59.5)lev=52; elselev=67; Qvalue=lev; if(err~=0) Qvalue=lev*(err/abs(err)); end functionRvalue=Restor_Value(quan_err,pre_val) %ThisfunctionisusedtogetrestoredvalueofDPCM %x=^x+Quant_Error Rvalue=quan_err+pre_val; functionCvalue=Clip_Value(res_val) %Thisfunctionisusedtocliptorestoredvalueto8_bitvalue %0ifx<0 %x'=255ifx>255 %xotherwise if(res_val<0)Cvalue=0; else if(res_val>255)Cvalue=255; else Cvalue=res_val; end end 四、实验结果及分析 由实验结果可以看出,一维和二维预测编码图像与原图均十分接近,两者的差别难以察觉。 而从误码图像中可以看出,当在某一位置出现误码后,一维预测编码会将误差延续至整个行,显得很明显。 二维预测编码则与之不同,其将误码延续至其后的斜后方,并且随着距离的增加迅速消失,总体而言,影响要小一些。 两相比较,可以体现出二维预测编码的一些优势。 实验七名称: JPEG压缩编码 一、实验目的 (1)掌握n×n子块的DCT图像变换及频谱特点。 (2)熟悉JPEG基本系统的图像编解码方法。 二、实验内容 1、编程实现n×n子块DCT变换的图像频谱显示,8×8子块DCT变换系数按“Z”(Zig-Zag)扫描图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。 2、编程实现JPEG压缩编码,进行8×8子块的DCT图像变换,JPEG量化矩阵的量化与反量化,8×8子块DCT的图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。 三、实验方法及编程: DCT频谱系数在方块中的分布有如下规律: 直流系数位于左上角第一个的位置,且值较大。 余下的为交流系数,越向右下角系数的值一般越小,属于高频分量。 在细节较多的区域,DCT频谱系数整体显得较亮,而在背景区,除了直流系数和少数低频系数,其余都为0或很小的值,故而显示为黑色。 对DCT系数做反DCT变换则可复原出原图。 若反变换前对DCT系数进行取舍则可以降低码率,但是,会对图像质量带来一定的影响。 JPEG压缩编码的算法主要计算步骤如下: (1)通过前向离散余弦变换减少图像数据相关性。 (2)利用人眼的视觉特性对DCT系数进行量化。 (3)使用差分脉冲编码调制对直流系数进行编码。 (4)对交流系数进行“Z”形扫描,使用行程长度编码对交流系数进行编码。 (5)熵编码器对上述描述符进行熵编码,可以采用霍夫曼编码,也可以采用算数编码。 程序的主体部分如下: functionnewbuf=DctBlock(oldbuf,Block) %DctBlock()DCTn*n块频谱函数 %oldbuf原图像数组 %Bloc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京 邮电大学 图像 实验