3140601044周俊鹏.docx

上传人:b****6 文档编号:4374621 上传时间:2022-12-01 格式:DOCX 页数:28 大小:1.16MB
下载 相关 举报
3140601044周俊鹏.docx_第1页
第1页 / 共28页
3140601044周俊鹏.docx_第2页
第2页 / 共28页
3140601044周俊鹏.docx_第3页
第3页 / 共28页
3140601044周俊鹏.docx_第4页
第4页 / 共28页
3140601044周俊鹏.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

3140601044周俊鹏.docx

《3140601044周俊鹏.docx》由会员分享,可在线阅读,更多相关《3140601044周俊鹏.docx(28页珍藏版)》请在冰豆网上搜索。

3140601044周俊鹏.docx

3140601044周俊鹏

 

JIANGSUUNIVERSITY

DSP原理及应用课程设计报告

 

学院名称:

计算机科学与通信工程学院

专业班级:

通信工程1402

学生姓名:

周俊鹏

学生学号:

3140601044

指导教师:

宋雪桦

 

2017年6月18日

目录

一、实验目的1

二、实验内容1

三、实验原理1

1、DCT与IDCT的原理1

2、图像压缩编码3

3、遮罩量化压缩算法3

4、量化的方法4

5、图像压缩的评价4

5、图像压缩编码性能指标6

五、实验流程图与主要代码分析6

1、流程图6

1.峰值信噪比function7

2.Matlab灰色图片的压缩与分析7

3.CCS图像分析9

六、实验结果13

1、MATLAB灰色图像压缩实验结果13

2、MATLAB彩色图像压缩实验结果16

2、CCS实验结果18

七、实验分析与问题解决20

1、实验分析20

2问题解决20

九、参考文献22

一、实验目的

1、掌握DCT图像压缩算法。

2、熟悉CCS开发模式。

3、学会利用MATLAB算法仿真和CCS软件仿真。

二、实验内容

根据资料找出几种主流图像压缩算法,采用DCT算法实现对Lena图像的压缩和解压,分析算法的性能参数指标。

三、实验原理

1、DCT与IDCT的原理

离散余弦变化(DCT)是与傅里叶变换变换相关的一种变换,它类似于离散傅里叶变换(DFT),但是只使用变数,是对实信号定义的一种变换,变换后在频域中得到的也是一个实信号,相比较DFT而言,DCT可以减少一半以上的计算。

离散余弦变换可以将图像描述为不同幅值和频率的正弦值之和的形式。

DCT的一个重要性质就是,有关图像的许多重要可视信息都集中在变换后的一小部分系数当中,因此,在图像压缩处理中离散余弦变换是非常有用的,而且离散余弦变换已经是有损压缩国际标准JPEG算法的核心变换。

1)一维DCT

设空间域中的N点离散实序列f(x),x=0,1,…,N-1。

其一维一维离散余弦变换(1D-DCT)和逆变换(1D-IDCT)的定义如下:

(1)

(2)

其中,

在MATLAB中,实现一维离散余弦变换和反变换的函数具体介绍见表1。

表1一维离散余弦变换和反变换

D=dct(X)

dct函数计算向量X的一维离散余弦变换

D=dct(X,n)

dct函数计算向量X的n点离散余弦变换

D=idct(X)

idct函数计算向量X的一维离散余弦反变换

D=idct(X,n)

idct函数计算向量X的n点离散余弦反变换

2)二维DCT

静止图像是二维空间中的数据阵列,图像处理中常常使用二维的离散余弦变换(2D-DCT)。

对二维空间域数据列f(x,y)的二维离散余弦对的定义如下:

(3)

(4)

其中,

二维数据的2D-DCT可以通过两次1D-DCT的快速算法来实现。

具体流程如下:

对数据矩阵f(x,y)逐列进行1D-DCT,得到的中间矩阵F(u,y),再对中间矩阵F(u,y)进行逐行1D-DCT,最后得到F(u,v)。

JPEG采用的是8×8大小的子块的二维离散余弦变换。

在编码器的输入端,把原始图像顺序地分割成一系列8×8的子块,子块的数值在-128到127之间。

采用余弦变换获得64个变换系数。

在MATLAB中,实现二维离散余弦变换和反变换的函数具体介绍见表2。

表2二维离散余弦变换和反变换

D=dct2(X)

dct2函数计算矩阵X的二维离散余弦变换

D=dct2(X,m,n)

dct2函数先对矩阵X截去获补充0元素成为m×n阶数组,然后对其进行二维离散余弦变换

D=idct2(X)

idct2函数计算矩阵X的二维离散余弦反变换

D=idct2(X,m,n)

idct2函数先对矩阵X截去获补充0元素成为m×n阶数组,然后对其进行二维离散余弦反变换

B=dctmtx(n)

D=BXB’

dctmtx函数返回一个n×n阶的DCT变换矩阵

2、图像压缩编码

1)图像压缩编码的定义和分类

在满足一定保真度的而要求下,对图像数据进行变换、编码和压缩,去除多余数据,减少表示数字图像时所需要的数据量,以便于图像的存储和传输,即以较少的数据量有损或无损地表示原来的像素矩阵的技术,也称图像编码。

2)图像压缩编码的必要性

数字图像已经在人们日常生活中随处可见,并且成为生活中不可或缺的一部分,但是图像数字化以后,其数据量是非常庞大的。

大数据量的图像信息会给存储器的存储容量、通信干线的带宽以及计算的处理速度增加极大的压力。

图片的压缩能够降低存储容量的压力,降低传输的时间。

3)图像压缩编码的可能性

由于图像数据本身固有的冗余性和相关性,使得将一个大的图像数据文件转换成较小的图像数据文件成为可能,图像数据压缩就是去掉信号数据的冗余性。

一般来说,图像数据中存在着空间冗余、时间冗余、信息熵冗余、结构冗余、知识冗余、心理视觉冗余等。

3、遮罩量化压缩算法

由于本实验采用的是基于dct算法进行压缩的,也就是老师说的主流算法,经过DCT变换后许多有关图像的许多重要可视信息都集中在变换后的一小部分系数当中,比如本次实验是能量集中在左上角如图所示:

图3-1

由图可知信号能量和有效信息一般都存在于直流分量(第一个点),和围绕直流分量周围的低频分量这些包含了图像的主要信息,而高频区域有很大一部分,能量都为0,即冗余信号,那么现在我们通过一个mask,类似滤波器的作用一样对齐滤除高频冗余分量,只留下有效分量,这样之后图片的信息量就会得到减少而起到压缩的效果。

现在主流的算法还有还有其他的算法如小波变换算法,JPEG2000就是采用这种算法,还有很多……

对于彩色图片的方法我想到了两种算法

1.由于RGB图片是三维数组,将512×512×3的三维数组变换成512×1536的二维数组即有亮度和色度两种量,二维数组的前512列为R分量,中间512列为G分量,最后512列为B分量,编码后的数据再通过解码器解码,将解码结果通过reshape()函数变成512×512×3的三维数组,再将三维数组显示,就实现了真彩图像的压缩编码。

在理论上我觉得是可行的。

这次实验我使用的是另一种更为简便的方法

2.也是我本次实验所做的算法:

提取图片的R、G、B分量,之后就像做灰度图像的方法一样对其进行dct变换还有mask遮罩量化,之后idct之后使用cat函数将三种分量再次叠加处理。

这样实现的真彩图像的压缩,更为的简便,但是理论上的速度会比上述的方法慢。

主要的时间用于Matlab提取R、G、B三个分量

4、量化的方法

DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。

因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。

量化后的DCT系数的编排如图2-7所示。

DC为其直流分量,AC部分为其交流分量。

图3-2量化DCT系数的编排

5、图像压缩的评价

图像信息在压缩过程中会产生误差,尤其是在有损压缩中,产生的误差应在允许的范围之内,在这种情况下,保真度准则可以用来衡量压缩效果或系统质量的优劣。

通常这种衡量的指标分为客观保真度准则和主观保真度准则。

1)客观保真度准则

当输入图像与压缩解码后的图像可用函数表示时,最常用的一个准则是输入图像和输出图像之间的均方误差或均方根误差。

为原始图像,压缩后的还原图像为

之间的均方误差(EMS)定义为

(5)

如对上式求平方根,就得到

之间的均方根误差(ERMS),即

最常用的是峰值信噪比(PSNR),设

,k为图像中一个像素点所用的二进制位数,JPG标准中k取8来表示0-255的灰度值,则峰值信噪比定义为

(6)

本实验主要采用的是峰值信噪比来进行客观的图片质量判定。

2)主观保真度准则

图像质量的好坏是否与图像本身的客观质量有关,也与人多视觉系统的特性有关。

因此,在客观保真度之外又规定了主观保真度以此评价图像的主观质量。

主观评价也可对照某种绝对尺寸进行。

表3为对图像质量的主观评价标准。

表3对图像质量的主观评价标准

得分

第一种评价标准

第二种平均评价标准

5

优秀

没有失真感觉

4

良好

感觉到失真,但没有不舒服的感觉

3

可用

感觉到优点不舒服

2

较差

感觉较差

1

感觉到非常不舒服

设每种得分为Ci,每种得分的评分人数为ni,那么一个被称为感觉平均分的主观评价可以定义为

(7)

MOS越高,表示解码后图像的主观评价越高。

这个是人的客观评价,在本次实验我们展示给宋老师看了,让她做出来评价。

5、图像压缩编码性能指标

1)压缩比

压缩比是衡量数据压缩程度的指标之一,目前常用的压缩比Pr定义有好几种版本本次实验我们选取为

(8)

这个压缩比的物理意义是压缩后的数据占源数据的百分比,一般而言,这个压缩比越小,则说明被压缩掉的数据量越多,压缩的的越大;

本实验中主要采用压缩比来衡量压缩性能。

五、实验流程图与主要代码分析

1、流程图

图5-1程序流程图

灰度图像处理流程

图5-2灰度图像处理流程图

2.主要代码分析

1.峰值信噪比function

每个实验都要计算峰值信噪比,所以专门写了个function

functionPSNR=psnr(im1,im2)

%计算两幅图像的峰值信噪比

k=8;%k为图像是表示地个像素点所用的二进制位数,即位深。

0-255

fmax=(2.^k-1).^2;

[m,n]=size(im1);

A=im2double(im1);

B=im2double(im2);

D=sum(sum((A-B).^2));

MSE=D/(m*n);%我觉得也可以用MSE=mean(mean(a-b))来实现这样就不用除M*N也不用计算图片的面积大小了

ifD==0%如果输入的参数为两幅图一样

error('两幅图像完全一样');

PSNR=100;

else

PSNR=10*log10((fmax)/MSE);

end

End

2.Matlab灰色图片的压缩与分析

I=imread('C:

\Users\jeepz\Desktop\lena.bmp');%打开获取图像

gray=rgb2gray(image);%转换成灰度图像

D=dctmtx(8);%得到一个8

8dct函数矩阵

C=blkproc(I,[8,8],'P1*x*P2',D,D');%分块处理

mask1=[10000000%只保留直流分量

00000000

00000000

00000000

00000000

00000000

00000000

00000000];

……%普通环境下的

X5=blkproc(C,[88],'P1.*x',mask1);%低频0个(只保留直流分量)

I5=blkproc(X5,[8,8],'P1*x*P2',D',D);%解压图像

之后可以用imshow来展示图片

可以用imfinfo获取文件句柄f然后f.FileSize(I)获取原图像和新图像大小就可以按照上述压缩比公式计算压缩比;再调用最上面的psnr函数就可以求出峰值信噪比;

2.彩色图像分析关键

%亮度量化表

m=0.5*[1611101624405161;

1212141926586055;

1413162440576956;

1417222951878062;

182237566810910377;

243555648110411392;

49647887103121120101;

7292959811210010399];

%RGB图分层处理得到3个分量图

R=RGB(:

:

1);

G=RGB(:

:

2);

B=RGB(:

:

3);

%转换为双精度

IR=double(R);

IG=double(G);

IB=double(B);

%建立8*8的DCT变换矩阵

T=dctmtx(8);

%进行DCT变换

RR=blkproc(IR,[8,8],'P1*x*P2',T,T');

GG=blkproc(IG,[8,8],'P1*x*P2',T,T');

BB=blkproc(IB,[8,8],'P1*x*P2',T,T');

%量化

LR=blkproc(RR,[88],'round(x./P1)',m);

LG=blkproc(GG,[88],'round(x./P1)',m);

LB=blkproc(BB,[88],'round(x./P1)',m);

%对DCT系数进行遮罩处理

mR=blkproc(LR,[88],'x.*P1.*P2',mask,m);

mG=blkproc(LG,[88],'x.*P1.*P2',mask,m);

mB=blkproc(LB,[88],'x.*P1.*P2',mask,m);

%反DCT变化IDCT

YR=blkproc(mR,[88],'P1*x*P2',T',T);

YG=blkproc(mG,[88],'P1*x*P2',T',T);

YB=blkproc(mB,[88],'P1*x*P2',T',T);

%转换为uint8

YR=uint8(YR);

YG=uint8(YG);

YB=uint8(YB);

%组合三个分量得到重构图像

RGB_rec=cat(3,YR,YG,YB);

3.CCS图像分析

1.用matlab生成一个CCS可读取的.dat文件

I=imread('C:

\Users\jeepz\Desktop\lena.bmp');%打开图像,这里改成自己的图像名及路径

%将图像缩小一点,将512

512不然数据量太大

I=imresize(I,[8,8],'bicubic');%缩小成8*8,二维FFT时需要图像为2的n次方

Figure

(1);imshow(I);%显示图像

[N,M]=size(I);%获取图像的高与宽

DCT=dct2(I);%dct变换双击在边上workspace查看矩阵;可用来与CCS出来的数据做比较

IDCT=idct2(DCT);%同上一句操作

fid=fopen('img2dat4_8.dat','w');%保存.dat图像数据文件

fprintf(fid,'%d%d%s%d%d\n',1651,2,'8cc0',0,N*M);%写入二进制文件的第一行

forn=1:

N%将图片数据写入Dat文件中

form=1:

M

fprintf(fid,'%d\n',I(n,m));

end

end

fclose(fid);%关闭

disp('RunOK')%显示所有操作已经做完可以关闭程序做下一步操作了

2.在CCS里面loadData加载matlab生成的.dat文件,之后运行dct和idct算法并输出。

Dct和idct算法:

voidDCT(double**f,double**F)//DCT变换

{

intx,m,n;

doubledTemp[N][N]={0.0};

doubletemp[N][N]={0.0};

doublecoff[N]={0.0};//变换系数

coff[0]=1/sqrt(N);

for(m=1;m

{coff[m]=sqrt

(2)/sqrt(N);}//一维变换,对列进行一维DCT变换

for(n=0;n

for(m=0;m

for(x=0;x

(*((double*)temp+m*N+n))+=(double)(*((double*)f+x*N+n))*coff[m]*cos((2*x+1)*PI*m/(2*N));

//二维变换,对行进行DCT变换

for(m=0;m

for(n=0;n

for(x=0;x

(*((double*)F+m*N+n))+=(*((double*)temp+m*N+x))*coff[n]*cos((2*x+1)*PI*n/(2*N));

}

voidIDCT(double**f,double**F)//逆变换

{

inty,m,x;

doubledTemp[N][N]={0.0};//中间矩阵

doubletemp[N][N]={0.0};

doublecoff[N]={0.0};//变换系数

coff[0]=1.0/sqrt(N);

for(m=1;m

{

coff[m]=sqrt

(2)/sqrt(N);

}

//一维变换

for(x=0;x

for(y=0;y

for(m=0;m

(*((double*)temp+x*N+y))+=(*((double*)f+x*N+m))*coff[m]*cos((2*y+1)*PI*m/(2*N));

//二维变换

for(y=0;y

for(x=0;x

{for(m=0;m

(*((double*)dTemp+x*N+y))+=(*((double*)temp+m*N+y))*coff[m]*cos((2*x+1)*PI*m/(2*N));

if((*((double*)dTemp+x*N+y))<0){

(*((double*)F+x*N+y))=(int)((*((double*)dTemp+x*N+y))-0.5);//-0.5为四舍五入取整}

else{(*((double*)F+x*N+y))=(int)((*((double*)dTemp+x*N+y))+0.5);//+0.5为四舍五入取整}}

输出之后的结果在后面实现结果中;

六、实验结果

1、MATLAB灰色图像压缩实验结果

Mask的量化矩阵的选取情况

灰度原图

压缩比Pr

峰值信噪比PSNR

(dB)

[11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000]

保留

理想低频35个

97.87%

83.85

[11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000]

保留

理想低频27个

94.45%

83.23

[11111000

11110000

11100000

11000000

10000000

00000000

00000000

00000000]

保留

理想低频14个

73.31%

80.61

[1111000011100000110000001000000000000000000000000000000000000000]

保留

理想低频9个

58.98%

79.09

[1000000000000000000000000000000000000000000000000000000000000000]

只保留

理想直流分量

15.09%

72.62

[10000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111]

保留

理想高频36个

15.12%

72.62

[10000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111]

保留

理想高频28个

15.38%

72.62

[10000000

00000000

00000000

00000001

00000011

00000111

00001111

00011111]

保留

理想高频15个

0.1571

72.62

[10000000

00000000

00000000

00000000

00000001

00000011

00000111

00001111]

保留

理想高频10个

20.59%

72.65

[10000000

00000000

00000000

00000000

00000000

00000000

00000001

00000011]

保留

理想高频3个

28.22%

72.70

[01110000

11100000

11000000

10000000

00000000

000000

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

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1