《数字图像处理》上机实验报告3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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图像');