《数字图像处理》上机实验报告3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理

上机实验报告

实验名称:图像变换

学期:2014/2015上学期

班级:电子信息工程1102

姓名:陈玮

学号:3110209424

实验时间:2014.11.10

实验三:图像变换

1 目的

1.了解图像空域和频域的概念.

2.掌握几种常用的图像变换原理,包括傅里叶变换、离散余弦变换等.

3.了解图像变换的快速算法

2 器材

1.BMP格式灰度图像

2.MAtlab软件

3.台式PC机

3 原理

1.离散余弦变换

数字图像处理中的正交变换,除了傅里叶变换以外,还经常用到离散余弦变换(Discrete Cosi ne Transform,DCT)。DCT是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(Discrete Fourier Transform, DFT),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数)。

对于离散余弦变换主要用于对信号和图像进行有损数据压缩。其具有以下特点:离散余弦变换具有很强的“能量集中”特性。大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分。

对于一维的离散傅里叶变换

=

上式中F(u)是第u个余弦变换系数,u是广义频率变量u=1,2,…,N-1;f(x)是时域N点序列,x =1,2,…,N-1;两式构成了一维离散余弦变换对。

对于二维离散傅里叶变换

二维离散余弦变换具有系数为实数,正变换与逆变换的核相同的特点。离散余弦变换是一种正交变换。为了分析计算方便,还可以用矩阵的形式来表示。

设f为一个N点的离散信号序列,可以用一个N*1的列向量表示,F为频域中一个N* 的列向量。N*N的矩阵C为离散余弦变换矩阵,一维离散余弦变换表示为:

二维离散余弦变换为:

正变换

2.傅里叶变换

1)数字图像傅里叶变换的频谱分布

数字图像的二维离散傅里叶变换所得结果的频率成分如下图所示,左上角为直流成分,变换结果的四个角的周围对应于低频成分,中央部位对应于高频部分。为了便于观察谱的分布,使直流成分出现在窗口的中央,可采用图示的换位方法,根据傅里叶频率位移的性质,只需要用f(x,y)乘上因子进行傅里叶变换即可实现,变换后的坐标原点移动到了窗口中心,围绕坐标中心的是低频,向外是高频。

二维傅里叶变换的频谱分布

频率位移示例

上图为二维离散傅里叶变换的频率位移特性。围绕坐标中心的是低频,向外是高频,频谱由中心向周边放射,而且各行各列的谱对中心点是共轭对称的,利用这个特性,在数据存储和传输时,仅存储和传输它们中的一部分,进行逆变换恢复原图像前,按照对称性补充另一部分数据,就可达到数据压缩的目的。

(2)对大多数无明显颗粒噪音的图像来说,低频区集中了85%的能量,这一点成为对图像变换压缩编码的理论根据,如变换后仅传送低频分量的幅值,对高频分量不传送,反变换前再将它们恢复为零值,就可以达到压缩的目的。

(3)图像灰度变化缓慢的区域,对应它变换后的低频分量部分;图像灰度呈阶跃变化的区域,对应变换后的高频分量部分。除颗粒噪音外,图像细节的边缘、轮廓处都是灰度变化突变区域,它们都具有变换后的高频分量特征。

4 实验(设计)步骤

1.查找资料

2.理解算法原理

3.编写程序

4.仿真查错

5 设计结果与总结分析

结果分析:

离散余弦变换具有信息强度集中的特点。图像进行DCT变换后,在频域中矩阵左上角低频的幅值大而右下角高频幅值小,经过量化处理后产生大量的零值系数,在编码时可以压缩数据,因此DCT被广泛用于视频编码图像压缩。

6参考文献

《数字图像处理(第三版)》电子工业出版社阮秋琦阮宇智等译

7实验代码

DCT_cof.m:

function au = DCT_cof(u)

if u==0

au=0.7071;

else

au=1;

end

end

DCT1D_my.m:

function C=DCT1D_my(f,N)

for u=1:N

sum=0;

for x=1:N

sum=sum+f(x)*cos(pi*(u-1)*(2*x-1)/(2*N)); end

C(u)=sqrt(2/N)*DCT_cof(u-1)*sum;

end

end

DCT2D_my.m:

function F=DCT2D_my(f,M,N)

Temp1=zeros(N);

ff1=double(Temp1);

Temp2=zeros(M);

ff2=double(Temp2);

for y=1:M

for x=1:N

Temp1(x)=f(x,y);

end

ff1=DCT1D_my(Temp1,N)

for x=1:N

f(x,y)=ff1(x);

end

end

for x=1:N

for y=1:M

Temp2(y)=f(x,y);

end

ff2=DCT1D_my(Temp2,M)

for y=1:M

f(x,y)=ff2(y);

end

end

F=f;

DCTexam.m:

clear;

P=imread('Miss.bmp');

P_double=double(P);

[m n]=size(P);

Q_double=DCT2D_my(P_double,m,n);

R=dct2(P);

Q=uint8(Q_double);

subplot(1,3,1),imshow(P),title('原始图像');

subplot(1,3,2),imshow(Q),title('自己的DCT图像');

subplot(1,3,3),imshow(log(abs(R))),title('Matlab自带的DCT图像');

相关文档
最新文档