1、实验名称:图像的锐化处理1、实验目的学习用锐化处理技术来加强图像的目标边界和图像细节。对图像进行梯度算子、Roberts 算子、Sobel 算子边缘检测处理和 Laplace 算子边缘增强处理,使图像的某些特征(如边缘、轮廓等)得以进一步的增强和突出。2、实验内容(1)编写梯度算子和 Roberts 算子滤波函数。(2)编写 Sobel 算子滤波函数。(3)编写 Laplace 算子边缘增强滤波函数。(4)观察频域中用高低通滤波技术对图像进行的平滑和锐化处理。3、实验方法及编程用 Matlab 进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要编写代码如下所示:function
2、newbuf=RobFilter(oldbuf,M,N);% *% 函数名称: % RobFilter() % 说明:% Robert 梯度滤波算法。 % *for i=1:M-1for j=1:N-1newbuf(i,j)=abs(oldbuf(i,j)-oldbuf(i+1,j+1)+abs(oldbuf(i+1,j)-oldbuf(i,j+1);endend %-function newbuf=SobFilter(oldbuf,M,N);% *% 函数名称: % SobFilter() % 说明:% Sobel滤波算法。 % *for i=2:M-1for j=2:N-1 sx=oldb
3、uf(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);endend %-function newbuf=LapFilter(oldbuf,M,N);% *% 函数名称: % LapFilter() % 说明:% La
4、place滤波算法。 % *for i=2:M-1for j=2:N-1newbuf(i,j)=5*oldbuf(i,j)-oldbuf(i-1,j)-oldbuf(i+1,j)-oldbuf(i,j-1)-oldbuf(i,j+1);endend 4、实验结果及分析(原图像和处理后的图像比较及分析)如上图所示即为实验结果。如上图所示 Robert 算子能够检测出原图像的边缘,并且显示出来;Sobel 在 Robert 算子的基础上增强了边缘,所以图像上结果会显示比原图像边缘要更加粗一些;Laplace 算子与其他边缘增强方法不同,即其边缘的增强程度和边缘的方向无关,所以图像的细节明显比原来更
5、加突出。实验名称:图像方块编码3、实验目的通过编程实验,掌握方块编码的基本方法及压缩性能。4、实验内容编程实现子块为 nxn 的方块编码基本算法,分别取 n=2,4,8 方块尺寸进行编解码实验,计算编码后的均方误差和压缩比。实验图像可为任意图像。5、实验方法及编程用 Matlab 进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,下面是主要的实验代码:function newbuf=BtcCode(oldbuf,M,N,n)% *% 函数名称:% BtcCode() 方块编码函数% 参数:% oldbuf 原图像数组% M N 原图像尺寸% n 方块尺寸% 说明:% 调用方块编码算法
6、函数,输出编码后的图像% *newbuf=oldbuf; rowblocks=M/n; colblocks=N/n; for i=1:rowblocks-1row=i*n;for j=1:colblocks-1col=j*n;for i=1:nfor j=1:ninbuf(i,j)=oldbuf(i+row,j+col); endendoutbuf=BtcBlock(inbuf,n);for i=1:nfor j=1:nnewbuf(i+row,j+col)=outbuf(i,j); endendendend%-function outbuf=BtcBlock(inbuf,n)% *% 函数名
7、称:% btcblock() 方块编码算法函数% 参数:% inbuf 方块数组% n 方块尺寸% outbuf 存放处理后的方块图像% 说明:% 把原图像分成 n*n 子块,对每个方块的图像数据分别计算 xt,a0,a1 值,再用分辨率分% 量(a0,a1)替代方块原来的数据 最后放入方块图像数组中并返回该数组。% *temp=0; temp0=0; temp1=0; q=0;m=n*n;inbuf=double(inbuf);for i=1:nfor j=1:ntemp=temp+inbuf(i,j);endendxt=temp/m;for i=1:nfor j=1:nif (inbuf(
8、i,j)=xt)q=q+1;temp1=temp1+inbuf(i,j);elsetemp0=temp0+inbuf(i,j);endendendif q=ma0=round(temp0/(m-q);endif q=0a1=round(temp1/q);endfor i=1:nfor j=1:nif (inbuf(i,j)1% 2_D DPCM: xi,j=128 if i=1,j=1% x i,j-1 if i=1,j1% xi-1,j if i1,j=1 or N% 1/2x i,j-1 if i1,j1% 1/8xi-1,j-1 (Pirschs predictor)% 1/4xi-1,
9、j % 1/8xi-1,j+1% Dim : Dimension of prediction% Row : vertical coordinate of current pixel to be predicted% COL : horizontal coordinate of current pixel to be predicted% *global newbuf;switch dim %预测算法编程case 1if col=1Pvalue=128;elsePvalue=newbuf(row,col-1);endcase 2if (row=1endif (row=1endif (row1en
10、dif (row1else Cvalue=res_val;end;end;4、实验结果及分析(原图像和处理后的图像比较及分析)如上图所示,即为实验所得的结果图像。由实验结果可以看出,一维和二维预测编码图像非常接近原图像;从误码图像中可以看出,一维预测编码会将误差延续到行末端,而二维预测编码其将误码延续至其后的斜后方,所以二维预测编码的误差会偏小。实验名称:JPEG 压缩编码9、实验目的(1)掌握 nxn 子块的 DCT 图像变换及频谱特点。(2)熟悉 JPEG 基本系统的图像编解码方法。2、实验内容(1)编程实现 nxn 子块 DCT 变换的图像频谱显示,8x8 子块 DCT 变换系数按“Z
11、”扫描图像重建,计算图像的均方根误差 RMSE,显示误差图像和误差直方图。(2)编程实现 JPEG 压缩编码,进行 8x8 子块的 DCT 图像变换,JPEG 量化矩阵的量化与反量化,8x8 子块 DCT 的图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。3、实验方法及编程用 Matlab 进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要的代码如下所示:function newbuf=DctBlock(oldbuf,Block)% *% 函数名称: % DctBlock() DCT n*n 块频谱函数% % 参数:% oldbuf 原图像数组% Block D
12、CT n*n 当前块选择值% newbuf 存放处理后的图像二维数组% % 说明:% 根据 Block 块的当前选择值,计算原图像的 n*n 块 DCT 变换,并转换为可视频谱图,% 有利于频谱的观察。 % *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)% *% 函数名称:
13、 % DctCode() DCT 8*8 块系数“Z”字扫描图像压缩函数% % 参数:% oldbuf 原图像数组% DCTch DCT 8*8 块“Z”扫描当前系数选择值% newbuf 存放处理后的图像二维数组% % 说明:% 计算图像的 88 子块 DCT 变换,按“Z”字扫描顺序,根据 DCTch 参数,只保留 64 个% DCT 系数中的前 DCTch 个系数,对修改后的 DCT 系数用逆 DCT 变换重建图像,得到 DCT变% 换的压缩图像。计算重建图像的均方根误差 RMSE ;显示误差图像和误差直方图。 % *zigzag=1 2 6 7 15 16 28 29 %设置 z 扫描
14、顺序3 5 8 14 17 27 30 434 9 13 18 26 31 42 4410 12 19 25 32 41 45 5411 20 24 33 40 46 53 5521 23 34 39 47 52 56 6122 35 38 48 51 57 60 6236 37 49 50 58 59 63 64;tbuf=ones(8); %定义 8*8 全 1 数组maskbuf=tbuf .* zigzag= 1 %如果有数据s=max(h(:);subplot(2,2,3);%imshow(hist);bar(x,h/s,k); %显示图像差值直方图RMSE = num2str(RM
15、SE); %把数值转换为字符串strRMSE = strcat(图像差值直方图 均方根误差 RMSE= ,RMSE); %把多个串连接成长串title(strRMSE);e = mat2gray(e,-emax,emax); %显示差值图像subplot(2,2,4),imshow(e);title(原图像与压缩图像的差值图像 ); %显示结果图像标题endend4、实验结果及分析(原图像和处理后的图像比较及分析)如上图所示,即为实验的结果图像。对于 DCT 变换,变换后的高频部分存在于图像的左上角,代表着图像的轮廓,而低频部分代表图像的细节部分。对 DCT系数做反 DCT 变换则可复原出原图。若反变换前对 DCT 系数进行取舍则可以降低码率,但是,会对图像质量带来一定的影响。如上图所示,当保留的系数越少,恢复的图像方块效应越严重,误差越大,差值图像越明显;当保留的系数越多,图像越接近于原图,误差越小,差值图像越不明显。