DCT变换在图像去噪中的应用
精品文档---下载后可任意编辑 离散余弦变换(Discrete Cosine Trans,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,假如被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。本文主要介绍了基于DCT变换的图像去噪的基本原理及其实现步骤,并使用MATLAB对一副原始图像用不同的低通滤波器进行去噪,给出了实验仿真结果。 关键词:DCT;图像去噪;MATLAB 目录 精品文档---下载后可任意编辑 精品文档---下载后可任意编辑 1离散余弦变换简介1 2离散余弦变换的定义及应用1 3离散余弦变换的Matlab实现2 4图像去噪的实现3 总结9 参考文献10 1. 离散余弦变换简介 离散余弦变换(DCT)是N.Ahmed等人在1974年提出的正交变换方法。它常被认为是对语音和图像信号进行变换的最佳方法。为了工程上实现的需要,国内外许多学者花费了很大精力去寻找或改进离散余弦变换的快速算法。由于近年来数字信号处理芯片(DSP)的进展,加上专用集成电路设计上的优势,这就牢固地确立离散余弦变换(DCT)在目前图像编码中的重要地位,成为H.261、JPEG、MPEG 等国际上公用的编码标准的重要环节。在视频压缩中,最常用的变换方法是DCT,DCT被认为是性能接近K-L变换的准最佳变换,变换编码的主要特点有: (1)在变换域里视频图像要比空间域里简单。 (2)视频图像的相关性明显下降,信号的能量主要集中在少数几个变换系数上,采纳量化和熵编码可有效地压缩其数据。 (3)具有较强的抗干扰能力,传输过程中的误码对图像质量的影响远小于预测编码。通常,对高质量的图像,DMCP要求信道误码率 ,而变换编码仅要求信道误码率 。 DCT等变换有快速算法,能实现实时视频压缩。针对目前采纳的帧内编码加运动补偿的视频压缩方法的不足, 我们在Westwater 等人提出三维视频编码的基础上, 将三维变换的结构应用于视频图像压缩, 进一步实现了新的视频图像序列的编码方法。 2. 离散余弦变换的定义及应用 离散余弦变换的变换核为实数的余弦函数,因而DCT的计算速度要比变换核为指数的DFT快得多,已广泛应用到图像压缩编码、语音信号处理等众多领域。 一维离散余弦变换 (2.1) 其中: 二维离散余弦变换 (2.2) 其中 u,v=0,1,.,N— l, x,y=0,1,.,N— l。 可以看出,DCT和 IDCT的变换是可分离的,即二维变换可以分解成串联的两次一维变换。 2.3离散余弦变换的应用 离散余弦变换在图像处理中占有重要的地位,尤其是在图像的变换编码中有着非常成功的应用。近年来十分流行的静止图像压缩标准JPEG就采 用了离散余弦变换。离散余弦变换实际上是傅里叶变换的文数部分,但是它比傅里叶变换有更强的信息集中能力。对于大多数自然图像,离散余弦变换能将主要的信息放到较少的系数上去,因此就更能提高编码的效率。 3. 离散余弦变换的Matlab实现 在Matlab中,dct2函数和idct2函数分别用于进行二维DCT变换和二维DCT反变换。 1. dct2数 功能:二维DCT变换 格式:B=dct2(A) B=dct2(A,m,n,) B=dct2(A, [m n]) 说明:B=dct2(A)计算A的DCT变换B,A与B的大小相同;B=dct2(A,m,n,)和B=dct2(A, [m n])通过对A补0或剪裁,使B的大小为。 2. idct2数 功能: DCT反变换 格式:B=idct2(A) B=idct2(A,m,n,) B=idct2(A, [m n]) 说明:B=idct2(A)计算A的DCT反变换B,A与B的大小相同;B=idct2(A,m,n,)和B=idct2(A, [m n])通过对A补0或剪裁,使B的大小为。 3. dctmtx函数 功能:计算DCT变换矩阵。 格式:D=dctmtx(n) 说明:D=dctmtx(n)返回一个nn的DCT变换矩阵,输出矩阵D为double类型。 4.图像去噪的实现 简介 MATLAB是矩阵实验室(Matrix Laboratory)的简称,在数学类科技应用应用广泛。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等。 MATLAB的优点: (1)友好的工作平台和编程环境; (2)简单易用的程序语言; (3)强大的科学计算机数据处理能力; (4)出色的图形处理功能; (5)应用广泛的模块集合工具箱; (6)有用的程序接口和发布平台。 4.2图像去噪的Matlab实现 1. 理想低通滤波器程序 I=imread( xpy.jpg ); f=double(I); g=fft2(f); g=fftshift(g); [M,N]=size(g); d0=100; m=fix(M/2);n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); if(d> result=ifftshift(result); >> J1=ifft2(result); >> J2=uint8(real(J1)); >> imshow(J2) 2. 巴特沃斯低通滤波器程序 I=imread( xpy.jpg ); f=double(I); g=fft2(f); g=fftshift(g); [M,N]=size(g); nn=2; d0=30; m=fix(M/2);n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); h=1/(1+0.414*(d/d0)^(2*nn)); result(i,j)=h*g(i,j); end end result=ifftshift(result); J1=ifft2(result); J2=uint8(real(J1)); imshow(J2) 3. 高斯低通滤波器程序 I=imread( xpy.jpg ); f=double(I); g=fft2(f); g=fftshift(g); [M,N]=size(g);