1实验一图像信号的数字化一、实验目的通过本实验了解图像的数字化参数取样频率(象素个数)、量化层数与图像质量的系。二、实验内容1.编写并调试图像数字化程序。要求参数k,n可调。其中k为亚抽样比例;n为量化比特数。2.可选择任意图像进行处理,在显示器上观察各种数字化参数组合下的图像效果。本实验是对8(bit)的数字图像进行再取样和再量化。三、实验原理在数字系统中进行处理、传输和存储图像,必须把代表图像的连续信号转变为离散信号,这样的变换过程称为图像信号的数字化。它包括两种处理:取样和量化。1.取样在水平和垂直方向作1:k(k=2、4、6、8)的取样,得到新的取样图像。为了观察显示的需要,再按k:1的比例将再抽样的图像还原为原图像尺寸(256×256)。2.量化量化层数取成2的n次幂,通常称为对图像进行n比特量化。如果对每个象素分别取n比特的量化(n=7、6、...、2、1),其处理算法为:(8)(8)gf(i,j)=[f(i,j2)2/]nn--·式中[/]表示取整运算。编程参考框图如图1.1所示。四、实验方法及程序根据编程参考框图1.1,编写图像数字化函数。functionnewbuf=Sample_Quant(oldbuf,k,n)函数实现的功能:读取原图像数据,对oldbuf中的原图像按1:k的比例进行再抽样,并按式(1.1)再量化为n比特,把处理后的图像放在newbuf数组中。2图1.1图像取样、量化编程框图实验程序:1、主函数DigitalPrj.m:完成程序界面生成功能,定义菜单回调函数Digital(),用于处理“图像数字化”clfreset%清除图形窗口globalk;globaln;globaloldbuf;%定义数组为全局变量k=1;n=3;%取样和量化初始值Select=0;set(gcf,'name','数字图像实验一__图像信号的数字化','numbertitle','off',...'unit','normalized','position',[0.12,0.15,0.85,0.75],...'menubar','none');str1='SampleInterval';3str2='QuantizationBits';h_text1=uicontrol(gcf,'style','text',...'position',[330,50,100,35],'back',[0.8,0.8,0.8],'fontsize',9,...'string',[str1,sprintf('%d',k)]);h_text2=uicontrol(gcf,'style','text',...'position',[520,50,100,35],'back',[0.8,0.8,0.8],'fontsize',9,...'string',[str2,sprintf('%d',n)]);h_slider1=uicontrol(gcf,'style','slider',...'position',[310,28,120,20],...'max',20,'min',1,...'sliderstep',[.05,.05],'Value',1,...'Enable','off');h_slider2=uicontrol(gcf,'style','slider',...'position',[508,28,120,20],...'max',8,'min',1,...'sliderstep',[.125,.125],'Value',1,...'Enable','off');set(h_slider1,'callback',['k=round(get(gcbo,''value''));',...'set(h_text1,''string'',[str1,sprintf(''%d'',k)]);',...'Digital(2);']);set(h_slider2,'callback',['n=round(get(gcbo,''value''));',...'set(h_text2,''string'',[str2,sprintf(''%d'',n)]);',...'Digital(2);']);K=0;while(K4)%菜单选择K=menu('图像数字化菜单','读入图像','图像数字化','Close');switchKcase1Digital(K)4case2set(h_slider1,'Enable','on');set(h_slider2,'Enable','on');Digital(K);case3clear;close;clc;endend;2、图像信号数字化函数SampleQuant:functionSampleQuant(Select);globaloldbuf;%定义数组为全局变量switchSelect%选择函数case1oldbuf=ReadImage;%读图像函数case2Sample_Quant(oldbuf);%数字化算法函数endfunctionoldbuf=ReadImage;%读入原图像函数oldbuf=imread('lena.bmp');subplot(1,2,1);imshow(oldbuf);title('原图像');functionSample_Quant(oldbuf);%图像数字化算法函数,在水平和垂直方向%作1:k(1~20)取样,得到新的取样图像,再根据量化公式对每个像素分别取n(1~8)特比%量化,为了观察显示的需要,再按k:1的比例将再取样的图像还原为原图像尺寸。globalk;globaln;i=1;j=1;5[M,N]=size(oldbuf);temp=2^(8-n);whileiMwhilejNsample=oldbuf(i,j);quante=(sample/temp)*temp;%算法处理fori1=0:k-1forj1=0:k-1if(i+i1M)&(j+j1N)newbuf(i+i1,j+j1)=quante;%尺寸处理endendendj=j+k;endifj=Nj=1;endi=i+k;endsubplot(1,2,2);imshow(newbuf);title('数字化图像');五、实验结果与分析(k取样间隔,n量化比特值)1、改变采样间隔:6(1)k=1,n=4分析:图(1)中取样间隔为1,量化比特值为4,,图片轮廓清晰。(2)k=2,n=4(3)k=4,n=4分析:随着采样间隔的增大,图片轮廓变得更加模糊,失真加重。当k=4,n=4时,可看到图像呈现出方块。(4)k=7,n=4(5)k=11,n=47(6)k=20,n=4分析::随着采样间隔的进一步增大,方块愈加明显,采样间隔达到11后,图片的轮廓已变得很模糊。据以上分析可知,当采样间隔较小时可获得更好的量化结果。2、改变量化比特数:(7)k=1,n=1分析:据图(7),量化比特数为1时,图像有较为严重的失真。(8)k=1,n=3(9)k=1,n=48分析:随着量化比特数的增加,图像失真减小,当量化比特数达到4时,图像变得较为清晰,与远图像几乎没有差异。(10)k=1,n=5(11)k=1,n=8分析:由图(9)—(11)可见,随着量化比特数的进一步增大,数字化得到的图像并无太大的改变。由以上分析,当量化比特数较大时,图像数字化的效果更佳。综合以上分析:采样间隔越小,量化比特数越大,图像数字化的效果更好。但这只是相对的,当量化比特数达到一定值时即使再增大也并不能如预期地改善数字化效果,同样,采样间隔也会有一个下限值。因此,在实际应用中,应适当设置这两个参数,为了能得到良好的处理效果,同时也避免由于参数设置不当造成的资源的浪费和成本的提高。