• / 24
  • 下载费用:8 金币  

【可编辑】南京邮电大学图像实验.doc

关 键 词:
可编辑 编辑 南京 邮电大学 图像 实验
资源描述:
通信与信息工程学院2016/2017学年第一学期实 验 报 告实验课程名称 数字图像处理与图像通信实验 专 业 电子信息工程 学 生 学 号 学 生 姓 名 指 导 教 师 谢世鹏 指 导 单 位 广播工程电视系 实验一 图像信号的数字化一、实验目的通过本实验了解图像的数字化参数取样频率(像素个数)、量化级数与图像质量的关系。二、实验内容1、编写并调试图像数字化程序。要求参数k,N可调。其中,k为亚抽样比例,N为量化比特数。2、可选任意图像进行处理,在显示器上观察各种数字化参数组合下的图像效果。三、实验方法及编程在数字系统中进行处理、传输和存储图像,必须把代表图像的连续信号转变为离散信号,这种变换过程称为图像信号的数字化。它包括采样和量化两种处理。本实验对数字图像进行再采样和再量化,以考察人眼对数字图像的分辨率和灰度级的敏感程度。 程序的主体部分如下: function newbuf=Sample_Quant(oldbuf,k,n)% % 函数名称:Sample_Quant() 图像数字化算法函数 % oldbuf 原图像数组 % M N 原图像尺寸 % k 取样间隔 % n 量化比特值 % newbuf 存放处理后的图像二维数组 [M,N]=size(oldbuf); oldbuf=double(oldbuf); x=1;y=1; while x=N y=1; end x=x+k; end4、 实验结果及分析实验截图如下: 由实验结果可以看出,亚抽样比例k和量化比特数N对都会使图像变得模糊,但两者的影响是不相同的。亚抽样比例k的大小决定了数字化图像的方块效应是否明显。当k较大时,数字化图像会有较为明显的块状出现,对于图像的视觉效果影响很大。量化比特数N则决定了图像的灰度级,量化比特数为N时,图像有个2N灰度级。所以当N较小时,图像会出现不规则的区域有着相同的灰度值的情况,但是这些区域在原图像中却有着差别较小的不同的灰度值。特别是在原图的灰度渐变的区域,这种效应会变得尤为明显。实验二 图像灰度级修正一、实验目的掌握常用的图像灰度级修正方法,即图像的灰度变换法和直方图均衡化法,加深对灰度直方图的理解。二、实验内容1、编程实现图像的灰度变换。改变图像输入、输出映射的灰度参数范围(拉伸和反比),观看图像处理结果。2、修改可选参数gamma值,使其大于1,等于1和小于1,观看图像处理结果。3、对图像直方图均衡化处理,显示均衡前后的直方图和图像。三、实验方法及编程 灰度级修正是图像空间域上的增强方法图像增强,它以图像的灰度映射变换为基础,直接对图像中的像素进行处理。常用到三种基本方式:线性,对数,幂次。 程序的主体部分如下: Function newbuf=GrayGamma(oldbuf,r) newbuf=imadjust(oldbuf,stretchlim(oldbuf),[],r); newbuf=uint8(newbuf); function newbuf=GrayEqualize(oldbuf) % 函数名称: % GrayEqualize() 直方图均衡算法函数 % 参数: % oldbuf 原图像数组 % newbuf 存放处理后的图像二维数组 [M,N]=size(oldbuf); NN=M*N;sk=0; [COUNTS,X]=imhist(oldbuf,256); for i=1:M for j=1:N kk=double(oldbuf(i,j)); for k=1:kk sk=sk+COUNTS(k); end sk=sk/NN*256; newbuf(i,j)=sk; end end newbuf=uint8(newbuf);4、 实验结果及分析实验截图如下: 由实验结果可以看出,所选的测试图像的灰度值主要分布于低值的部分。经过无gamma值的灰度值变换后,直观地看出:分布于低值部分的直方图分散开来,分布于几乎所有的灰度值,但是对映于各个灰度值的像素个数分布仍是不均匀的。变换后的图像比原图显得明亮、清晰。经过第二第三幅图像可以进一步看出:gamma值的灰度值变换则明显受gamma值的影响:当gamma值大于1时,直方图有向灰度为0的一端压缩的趋势,gamma越大,这种趋势越明显。此时的图像比原图清晰,但是原本偏暗的部分更加偏黑,原本较亮的部分则变得发白,总体而言,图像偏暗的部分较多。当gamma值小于1时,其趋势与gamma值大于1相反,故整个图像显得发白。直方图均衡后的图像也显得较为清晰、均匀。它能尽量将直方图变得均衡,分布也更为均匀,各个灰度值所对应的像素个数尽可能相同。实验三 图像的平滑滤波一、实验目的图像平滑主要目的是减少噪声对图像的影响。噪声有很多种类,不同的噪声有不同的抑制措施。本实验要求用平滑线性滤波和中值滤波两种最典型、最常用的处理算法进行程序设计,学习如何对已被污染的图像进行“净化”。通过平滑处理,对结果图像加以比较,得出自己的实验结论。2、 实验内容 1、编写并调试窗口尺寸为m×n的平滑滤波函数。2、编写并调试窗口尺寸为m×n的中值滤波函数。三、实验方法及编程 在M*N的图像f上,用m*n大小的滤波器模板进行线性滤波由这个公式给出: 程序如下: function newbuf=AverageFilter(oldbuf,M,N,m) % 函数名称: % AverageFilter() 均值滤波算法函数 % 参数: % oldbuf 噪声图像数组 % M N 噪声图像尺寸 % m 矩形平滑窗口尺寸 % newbuf 存放处理后的图像二维数组 oldbuf=double(oldbuf); newbuf=zeros(M,N); for i=(m+1)/2:M-(m+1)/2 for j=(m+1)/2:N-(m+1)/2 for x=-(m-1)/2:(m-1)/2; for y=-(m-1)/2:(m-1)/2; newbuf(i,j)=newbuf(i,j)+oldbuf(i+x,j+y)/(m*m); end end end end function newbuf=MedianFilter(oldbuf,M,N,m) % 函数名称: % MedianFilter() 中值滤波算法函数 % 参数: % oldbuf 原图像数组 % M N 原图像尺度 % m 滑动窗口尺寸 % newbuf 存放处理后的图像数组 for i=(m+1)/2:M-(m+1)/2 for j=(m+1)/2:N-(m+1)/2 k=1; for x=-(m-1)/2:(m-1)/2; for y=-(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); %取窗口尺寸 for i=1:winsize %编写排序函数 for j=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));4、 实验结果及分析实验截图如下: 由实验结果可以看出,对于处理椒盐噪声,中值滤波比均值滤波要好很多。当窗口大小为3×3时,均值滤波能一定程度上降低噪声的污染,但是,仍能看出在噪声点,并没有完全消除噪声,只是将噪声与周围的图像进行了平均,噪声点只是显得模糊了,并没有完全消除。相比之下,中值滤波则效果明显,同为3×3的窗口,几乎能把所有的噪声点消除,效果非常显著。当窗口大小变大时,也能将大部分噪声点消除,但是会带来严重的模糊。同时我们可以看出,两种方法都使得处理后的图像比原图要模糊,并且随着窗口的变大,图像变得越来越模糊。通过两种方法之间的比较则可以看出,同等窗口下中值滤波带来的模糊比均值滤波要轻一些。实验四名称:图像的锐化处理一、实验目的学习用锐化处理技术来加强图像的目标边界和图像细节。对图像进行梯度算子、Roberts算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,是图像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。二、实验内容1、编写梯度算子和Roberts算子滤波函数。2、编写Sobel算子滤波函数。3、编写拉普拉斯边缘增强滤波函数。三、实验方法及编程 在实验中,我们对于这三种算子的算法,都有其各自对应的模板,根据这个模板我们可以方便地编写出程序的主体结构。指导书中也有对应的流程框图可供参考。 程序的主体部分如下: function newbuf=RobFilter(oldbuf,M,N); % RobFilter() for i=1:M-1 for j=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 function newbuf=SobFilter(oldbuf,M,N); % SobFilter() for i=2:M-1 for j=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 function newbuf=LapFilter(oldbuf,M,N); % LapFilter() for i=2:M-1 for j=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 end4、 实验结果及分析实验截图如下:从上面的图像可以看出:Robert梯度算子得出的图像能够得出原图的大部分边缘细节,灰度差别越大的地方结果越大,所以显示时较为明亮。一些边缘由于灰度差值较小,在得出的结果图像中不容易分辨出来。Sobel算子得出的图像则显得明亮而粗壮。所有的边缘细节均被显示出来,特别是人物面部。由于其结果粗壮,面部细节显得非常密集。Laplace算子则用以将图像的边缘、细节增强,通过结果结果可以看出,图像的细节明显比原来突出。但是这个方法存在的弊端是,在背景区域,结果图像中有一些噪声的图样也被加强了。实验五 图像方块编码(BTC)一、实验目的通过编程实验,掌握方块编码的基本方法及压缩性能。二、实验内容编程实现子块为n×n的方块编码基本方法,分别取n=2,4,8方块尺寸进行方块编码实验,计算编码后的均方误差和压缩比。3、 实验方法及编程本实验采用的方案为:(1)(2) (3) 程序的主体部分如下: function outbuf=BtcBlock(inbuf,n) % btcblock() 方块编码算法函数 % inbuf 方块数组 % n 方块尺寸 % outbuf 存放处理后的方块图像 temp=0; temp0=0; temp1=0; q=0; m=n*n; inbuf=double(inbuf); for i=1:n for j=1:n temp=temp+inbuf(i,j); end end xt=temp/m; for i=1:n for j=1:n if (inbuf(i,j)>=xt) q=q+1; temp1=temp1+inbuf(i,j); else temp0=temp0+inbuf(i,j); end end end if q~=m a0=round(temp0/(m-q)); end if q~=0 a1=round(temp1/q); end for i=1:n for j=1:n if (inbuf(i,j)1% 2_D DPCM: ^x[i,j]=128 if i=1,j=1% x'[ i,j-1] if i=1,j>1% x'[i-1,j ] if i>1,j=1 or N% 1/2x'[ i,j-1] if i>1,j>1% 1/8x'[i-1,j-1] (Pirsch's predictor)% 1/4x'[i-1,j ]% 1/8x'[i-1,j+1]global newbuf;switch dim case 1 if col==1 Pvalue=128; else Pvalue=newbuf(row,col-1); end case 2 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&&col255% x otherwiseif (res_val<0) Cvalue=0;else if(res_val>255) Cvalue=255; else Cvalue=res_val; endend4、 实验结果及分析 由实验结果可以看出,一维和二维预测编码图像与原图均十分接近,两者的差别难以察觉。而从误码图像中可以看出,当在某一位置出现误码后,一维预测编码会将误差延续至整个行,显得很明显。二维预测编码则与之不同,其将误码延续至其后的斜后方,并且随着距离的增加迅速消失,总体而言,影响要小一些。两相比较,可以体现出二维预测编码的一些优势。实验七名称: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)熵编码器对上述描述符进行熵编码,可以采用霍夫曼编码,也可以采用算数编码。程序的主体部分如下: function newbuf=DctBlock(oldbuf,Block) % DctBlock() DCT n*n块频谱函数% oldbuf 原图像数组% Block DCT n*n当前块选择值% newbuf 存放处理后的图像二维数组 oldbuf=double(oldbuf);H=dctmtx(Block);newbuf=blkproc(oldbuf,[Block Block],'P1*x*P2',H,H');newbuf=log(abs(newbuf));subplot(2,2,2);imshow(newbuf,[]); function newbuf=DctCode(oldbuf,DCTch) % DctCode() DCT 8*8 块系数“Z”字扫描图像压缩函数% oldbuf 原图像数组% DCTch DCT 8*8 块“Z”扫描当前系数选择值% newbuf 存放处理后的图像二维数组zigzag=[1 2 6 7 15 16 28 29 %设置Z扫描顺序 3 5 8 14 17 27 30 43 4 9 13 18 26 31 42 44 10 12 19 25 32 41 45 54 11 20 24 33 40 46 53 55 21 23 34 39 47 52 56 61 22 35 38 48 51 57 60 62 36 37 49 50 58 59 63 64]; tbuf=ones(8); %定义8*8全1数组maskbuf=tbuf .* zigzag<=DCTch; %根据当前DCTch值得到“Z”字扫描的二值掩模oldbuf=double(oldbuf);H=dctmtx(8);dctno=blkproc(oldbuf,[8 8],'P1*x*P2',H,H');newbuf=blkproc(dctno,[8 8],'P1*(x.*P2)*P3',H',maskbuf,H);subplot(2,2,2);imshow(newbuf,[]);eimag(oldbuf,newbuf);function newbuf=JpegCode(oldbuf) % JpegCode() JPEG近似基准编码% oldbuf 原图像数组% newbuf 存放处理后的图像二维数组 z = [16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99] ; %标准亮度量化表 oldbuf=double(oldbuf); %原图像数据转换为双精度H=dctmtx(8);dctno=blkproc(oldbuf,[8 8],'P1*x*P2',H,H');jpegno=blkproc(dctno,[8 8],'round(x./P1)',z);jpegno1=blkproc(jpegno,[8 8],'x.*P1',z);newbuf=blkproc(jpegno1,[8 8],'P1*x*P2',H',H);subplot(2,2,2);imshow(newbuf,[]);eimag(oldbuf,newbuf);function eimag(oldbuf,newbuf) % eimag() e=double(oldbuf)-newbuf; %计算原图像与压缩图像之差[m,n]=size(e);RMSE=sqrt(sum(e(:).^2) / (m*n)); %计算均方根误差if RMSE %如果有误差,即rmse不为0 emax=max(abs(e(:))); %找图像差最大值 [h,x]=hist(e(:),emax); %用于生成直方图数据 if length(h) >= 1 %如果有数据 s=max(h(:)); subplot(2,2,3),bar(x,h/s,'k'); %显示图像差值直方图RMSE=num2str(RMSE); %把数值转换为字符串oldbuf=double(oldbuf); %原图像数据转换为双精度H=dctmtx(8);dctno=blkproc(oldbuf,[8 8],'P1*x*P2',H,H');jpegno=blkproc(dctno,[8 8],'round(x./P1)',z);jpegno1=blkproc(jpegno,[8 8],'x.*P1',z);newbuf=blkproc(jpegno1,[8 8],'P1*x*P2',H',H);subplot(2,2,2);imshow(newbuf,[]);eimag(oldbuf,newbuf);4、 实验结果及分析 由实验结果可以看出:当保留的系数很少时,恢复的图像有着严重的方块效应,对观看造成很大的阻碍。而当保留的系数较多时,恢复的图像和原图十分接近,对于观看基本没有影响。JPEG是常用的静态图片编码方法,实验时进行了一定的简化。从结果看,其编码的结果较好,对观看影响很小。同时,JPEG对于码率的压缩也是效果很好的。实验课程小结和思考 通过实验我学会了很多实用的内容。如在数字系统中进行处理、传输和存储图像,把代表图像的连续信号转变为离散信号的图像信号的数字化过程;利用锐化处理技术来加强图像的目标边界和图像细节;利用方块编码以便高效率地进行图像的数字传输或数字存储。 感谢谢老师的耐心指导,经过这门课的学习,我对图像处理的认识不再局限于但单调的理论知识,而是真正学会了如何利用理论知识来处理现实生活中发生的问题。24
展开阅读全文
  语墨文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:【可编辑】南京邮电大学图像实验.doc
链接地址:http://www.wenku38.com/p-81536.html

                                            站长QQ:1002732220      手机号:18710392703    


                                                          copyright@ 2008-2020 语墨网站版权所有

                                                             经营许可证编号:蜀ICP备18034126号

网站客服微信
收起
展开