数字图像处理实验答案.docx

上传人:b****2 文档编号:17074346 上传时间:2023-07-21 格式:DOCX 页数:24 大小:1.16MB
下载 相关 举报
数字图像处理实验答案.docx_第1页
第1页 / 共24页
数字图像处理实验答案.docx_第2页
第2页 / 共24页
数字图像处理实验答案.docx_第3页
第3页 / 共24页
数字图像处理实验答案.docx_第4页
第4页 / 共24页
数字图像处理实验答案.docx_第5页
第5页 / 共24页
数字图像处理实验答案.docx_第6页
第6页 / 共24页
数字图像处理实验答案.docx_第7页
第7页 / 共24页
数字图像处理实验答案.docx_第8页
第8页 / 共24页
数字图像处理实验答案.docx_第9页
第9页 / 共24页
数字图像处理实验答案.docx_第10页
第10页 / 共24页
数字图像处理实验答案.docx_第11页
第11页 / 共24页
数字图像处理实验答案.docx_第12页
第12页 / 共24页
数字图像处理实验答案.docx_第13页
第13页 / 共24页
数字图像处理实验答案.docx_第14页
第14页 / 共24页
数字图像处理实验答案.docx_第15页
第15页 / 共24页
数字图像处理实验答案.docx_第16页
第16页 / 共24页
数字图像处理实验答案.docx_第17页
第17页 / 共24页
数字图像处理实验答案.docx_第18页
第18页 / 共24页
数字图像处理实验答案.docx_第19页
第19页 / 共24页
数字图像处理实验答案.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字图像处理实验答案.docx

《数字图像处理实验答案.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验答案.docx(24页珍藏版)》请在冰点文库上搜索。

数字图像处理实验答案.docx

数字图像处理实验答案

实验名称:

图像的锐化处理

1、实验目的

学习用锐化处理技术来加强图像的目标边界和图像细节。

对图像进行梯度算子、Roberts算子、Sobel算子边缘检测处理和Laplace算子边缘增强处理,使图像的某些特征(如边缘、轮廓等)得以进一步的增强和突出。

2、实验内容

(1)编写梯度算子和Roberts算子滤波函数。

(2)编写Sobel算子滤波函数。

(3)编写Laplace算子边缘增强滤波函数。

(4)观察频域中用高低通滤波技术对图像进行的平滑和锐化处理。

3、实验方法及编程

用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要编写代码如下所示:

functionnewbuf=RobFilter(oldbuf,M,N);

%*************************************************************************

%函数名称:

%RobFilter()

%说明:

%'Robert梯度'滤波算法。

%*************************************************************************

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()

%说明:

%'Sobel'滤波算法。

%*************************************************************************

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()

%说明:

%'Laplace'滤波算法。

%************************************************************************

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

4、实验结果及分析(原图像和处理后的图像比较及分析)

如上图所示即为实验结果。

如上图所示Robert算子能够检测出原图像的边缘,并且显示出来;Sobel在Robert算子的基础上增强了边缘,所以图像上结果会显示比原图像边缘要更加粗一些;Laplace算子与其他边缘增强方法不同,即其边缘的增强程度和边缘的方向无关,所以图像的细节明显比原来更加突出。

 

实验名称:

图像方块编码

3、实验目的

通过编程实验,掌握方块编码的基本方法及压缩性能。

4、实验内容

编程实现子块为nxn的方块编码基本算法,分别取n=2,4,8方块尺寸进行编解码实验,计算编码后的均方误差和压缩比。

实验图像可为任意图像。

5、实验方法及编程

用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,下面是主要的实验代码:

functionnewbuf=BtcCode(oldbuf,M,N,n)

%*************************************************************************

%函数名称:

%BtcCode()方块编码函数

%参数:

%oldbuf原图像数组

%MN原图像尺寸

%n方块尺寸

%说明:

%调用方块编码算法函数,输出编码后的图像

%*************************************************************************

newbuf=oldbuf;

rowblocks=M/n;

colblocks=N/n;

fori=1:

rowblocks-1

row=i*n;

forj=1:

colblocks-1

col=j*n;

fori=1:

n

forj=1:

n

inbuf(i,j)=oldbuf(i+row,j+col);

end

end

outbuf=BtcBlock(inbuf,n);

fori=1:

n

forj=1:

n

newbuf(i+row,j+col)=outbuf(i,j);

end

end

end

end

%-------------------------------------------------------------------------

functionoutbuf=BtcBlock(inbuf,n)

%*************************************************************************

%函数名称:

%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);

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

6、实验结果及分析(原图像和处理后的图像比较及分析)

如上图所示,即为实验结果。

实验将图像分为m=n*n的子图像块,然后进行方块编码;由实验结果可知,窗口愈大时,方块效应越明显,方块编码图像变得越模糊;窗口愈小时,编码图像接近于原图像。

 

实验名称:

图像线性预测编码

7、实验目的

通过编程设计,掌握帧内DPCM的编解码方法(预测,量化)及其压缩性能。

8、实验内容

(1)编制一维前值预测DPCM编解码程序,预测系数取(1,0,0,0)。

(2)编制二维前值预测DPCM编解码程序,预测系数取(1/2,1/4,0,1/4)。

(3)重建图像

与原图像

误差图像,用绝对误差表示如下:

式中的n为放大因子,以便观察误差的分布情况。

本实验采用15个量化分层的主观量化器,其量化电平分别取(0,+5,+10,+17,+28,+39,+52,+67)。

分别计算重建后图像的PSNR。

实验的图像为cla0或cla1。

3、实验方法及编程

用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要的代码如下所示:

functionnewbuf=Dpcm_code(oldbuf,M,N,dim);

%*************************************************************************

%函数名称:

%Dpcm_Code()“线性预测编解码器”算法函数

%参数:

%oldbuf原图像数组

%M,N原图像尺度

%dim选择预测编码维数

%newbuf存放处理后的图像二维数组

%说明:

%根据线性预测编解码算法调用各个子模块,对原图像进行1D/2D线性预测编码和解码,

%解码后的恢复图像放在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存放处理后的图像二维数组

%说明:

%模拟信道传输过程中产生的误码,观察传输误码经解码后对恢复图像的影响,解码

%后的恢复图像放在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]

%Dim:

Dimensionofprediction

%Row:

verticalcoordinateofcurrentpixeltobepredicted

%COL:

horizontalcoordinateofcurrentpixeltobepredicted}

%*************************************************************************

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

Pvalue=(1/2)*newbuf(row,col-1)+(1/4)*newbuf(row-1,col-1)+...

(1/4)*newbuf(row-1,col+1);

end

end

%-------------------------------------------------------------------------

functionQvalue=Quant_Value(err);

%*************************************************************************

%Thisfunctionisusedaslinearquantizer.Thequantizerhastotally

%13quantizationlevel:

%0,-+7,-+16,-+27,-+38,-+51,-+66

%*************************************************************************

if(abs(err)<=3)lev=0;

elseif(abs(err)<=11)lev=7;

elseif(abs(err)<=21)lev=16;

elseif(abs(err)<=32)lev=27;

elseif(abs(err)<=44)lev=38;

elseif(abs(err)<=58)lev=51;

elselev=66;

end;

end;

end;

end;

end;

end;

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;

elseif(res_val>255)Cvalue=255;

elseCvalue=res_val;

end;

end;

4、实验结果及分析(原图像和处理后的图像比较及分析)

如上图所示,即为实验所得的结果图像。

由实验结果可以看出,一维和二维预测编码图像非常接近原图像;从误码图像中可以看出,一维预测编码会将误差延续到行末端,而二维预测编码其将误码延续至其后的斜后方,所以二维预测编码的误差会偏小。

实验名称:

JPEG压缩编码

9、实验目的

(1)掌握nxn子块的DCT图像变换及频谱特点。

(2)熟悉JPEG基本系统的图像编解码方法。

2、实验内容

(1)编程实现nxn子块DCT变换的图像频谱显示,8x8子块DCT变换系数按“Z”扫描图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。

(2)编程实现JPEG压缩编码,进行8x8子块的DCT图像变换,JPEG量化矩阵的量化与反量化,8x8子块DCT的图像重建,计算图像的均方根误差RMSE,显示误差图像和误差直方图。

3、实验方法及编程

用Matlab进行编程,主要是对照着实验书上面的算法流程图进行代码的编写,主要的代码如下所示:

functionnewbuf=DctBlock(oldbuf,Block)

%*************************************************************************

%函数名称:

%DctBlock()DCTn*n块频谱函数

%

%参数:

%oldbuf原图像数组

%BlockDCTn*n当前块选择值

%newbuf存放处理后的图像二维数组

%

%说明:

%根据Block块的当前选择值,计算原图像的n*n块DCT变换,并转换为可视频谱图,

%有利于频谱的观察。

%*************************************************************************

oldbuf=double(oldbuf);%添加程序

H=dctmtx(Block);

newbuf=blkproc(oldbuf,[BlockBlock],'P1*x*P2',H,H');

newbuf=log(abs(newbuf));

subplot(2,2,2);

imshow(newbuf,[]);

%-------------------------------------------------------------------------

functionnewbuf=DctCode(oldbuf,DCTch)

%*************************************************************************

%函数名称:

%DctCode()DCT8*8块系数“Z”字扫描图像压缩函数

%

%参数:

%oldbuf原图像数组

%DCTchDCT8*8块“Z”扫描当前系数选择值

%newbuf存放处理后的图像二维数组

%

%说明:

%计算图像的8×8子块DCT变换,按“Z”字扫描顺序,根据DCTch参数,只保留64个

%DCT系数中的前DCTch个系数,对修改后的DCT系数用逆DCT变换重建图像,得到DCT变

%换的压缩图像。

计算重建图像的均方根误差RMSE;显示误差图像和误差直方图。

%*************************************************************************

zigzag=[126715162829%设置z扫描顺序

3581417273043

49131826314244

1012192532414554

1120243340465355

2123343947525661

2235384851576062

3637495058596364];

tbuf=ones(8);%定义8*8全1数组

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2