Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#4 |
初级会员
注册日期: 2009-03-09
年龄: 42
帖子: 13
声望力: 17 ![]() |
![]()
数字图像处理的方法有两类:空间域处理法和频域法。频域法首先是要将图像从空间域变换到频率域,然后在频率域对图像进行各种处理,再将所得到的结果进行反变换,从而达到图像处理的目的,频域法具有很多明显的优点。目前,频域变换被广泛运用于图像特征提取、图像增强、图像复原、图像数据压缩和图像识别等领域。
(1)离散傅立叶变换(DFT) 离散傅立叶变换(DFT)在数字信号处理和数字图像处理中应用十分广泛。使用离散傅立叶变换的根本原因有二:一是DFT的输入、输出均为离散形式的,这使得计算机非常容易操作;二是因为计算DFT存在快速算法,即快速傅立叶变换(FFT),因而计算比较方便。 空间域是由f(x,y)所组成的坐标系,其中x和y用作(空间)变量。频率系统是由F(u,v)所组成的坐标系,其中u和v用作(频率)变量。由u=0,1,2,…M-1和v=0,1,2,…N-1定义的M×N矩形区域常称为频率矩形。显然,频率矩形的大小与输入图像的大小相同。为了与MATLAB的实现形式相一致,将1/MN项放置于逆变换公式的前面。由于MATLAB中的数组索引是以1而不是以0开头的,所以MATLAB中的F(1,1)和f(1,1)相应于正变换和逆变换中的数字量F(0,0)和f(0,0)。在频域原点处变换值[如F(0,0)]称为傅立叶变换的直流(dc)分量,F(0,0)等于f(x,y)的平均值的MN倍。 MATLAB图像处理工具箱提供了一些函数来进行傅立叶变换: ① 函数:fft2——用于计算二维快速傅立叶变换。调用格式为: Y = fft2(X); Y = fft2(X,M,N); 其中X是输入图像矩阵,Y是X进行二维傅立叶变换后的图像矩阵;X和Y大小相同。在Y=fft2(X,M,N)中,按照M、N指定的值对图像进行剪切或补0后进行傅立叶变换,返回变换矩阵的大小为M×N。变换结果的左上、右上、左下、右下四个角的周围对应于低频成分,中央部位对应于高频成分。 ② 函数:fftn——用于计算n维傅立叶变换。调用格式: Y = fftn(X); Y = fftn(X,SIZE); 其中Y=fftn(X)计算图像的n维傅立叶变换,输出图像Y与X大小相同。在Y=fftn(X,SIZE)函数中,按照SIZE指定的值对图像X进行剪切或补0后进行傅立叶变换,返回变换矩阵的大小为SIZE。 ③ 函数:fftshift——将变换后的图像频谱中心从矩阵的原点移到矩阵的中心。其调用格式为: Y = fftshift(X); Y = fftshift(X,DIM); 其中fftshift用于调整 fft、fft2和fftn的输出结果。对于向量X,将其左右两半交换位置,对于矩阵X,将其一、三象限和二、四象限进行互换,对于高维向量X,将矩阵各维的两半进行互换。利用这个函数可使变换结果的零频率分量位于中心。但应注意,在进行反变换时,必须使用四角代表低频成分,中央对应高频部分的变换结果。 ④ 函数:ifft2——用于计算图像的二维傅立叶反变换。其调用格式为: Y = ifft2(X); Y = ifft2(X,M,N); 其中ifft2用于返回图像的二维傅立叶反变换矩阵,其参数定义同fft2。 ⑤ 函数:ifftn——用于计算图像的n维傅立叶反变换。调用格式为: Y = ifftn(X); Y = ifftn(X,SIZE); 其参数定义同fftn。 实例:对某矩阵进行零填充后,进行快速傅立叶变换并显示其频谱。如图1.4.1所示。 f=zeros(30,30); f(5:24,13:17)=1; subplot(1,2,1),imshow(f); F=fft2(f,256,256); F2=fftshift(log(abs(F))); % 计算对数幅值并使零频率系数位于图形的中心 subplot(1,2,2),imshow(F2,[-1 5]); colorbar; (2)离散余弦变换(DCT) 离散余弦变换(DCT,Discrete Cosine Transform)的变换核为实数的余弦函数,因而DCT的计算速度要比变换核为复指数的DFT要快得多。离散余弦变换是仅次于K-L变换的次最佳正交变换,且有这样的性质:许多有关图像的重要可视信息都集中在DCT变换的一小部分系数中,因此已被广泛应用到图像压缩编码、语音信号处理等众多领域,并成为许多图像编码国际标准的核心。 MATLAB图像处理工具箱实现离散余弦变换有两种方法:其一是使用函数dct2,该函数用一个基于FFT的算法来提高当输入较大的输入方阵时的计算速度。其二是使用由dctmtx函数返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(例如8×8或16×16) 提供DCT函数分别为: ① 函数:dct2——实现图像的二维离散余弦变换。调用格式为: B = dct2(A); B = dct2(A,[M N]); B = dct2(A,M,N); 其中A表示要变换的图像,M和N是可选参数,表示填充后的图像矩阵大小,如果m和n比图像A小,则进行变换之前,将图像A进行剪切,B表示变换后得到的图像矩阵,各元素为离散余弦变换的系数B(k1,k2)。 ② 函数:dctmtx——主要用于实现较小输入矩阵的离散余弦变换,调用格式为:D = dctmtx(N),其中D是返回N×N的DCT变换矩阵,如果矩阵A是N×N方阵,则A的DCT变换可用D×A×D’来计算。这在有时比dct2计算快,特别是计算大量小的相同尺寸DCT时,矩阵D只需计算一次,因而速度快。 例如,在实现JPEG压缩时,要多次实现大小为8×8的图像块的DCT,为了实现这种变换,首先利用语句D=dctmtx(8),然后,对每一个图像块执行运算B=D×A×D’。这种实现方法比调用函数dct2要快。 ③ 函数:idct2——实现图像的二维离散余弦反变换。调用格式为: B = idct2(A); B = idct2(A,[M N]); B = idct2(A,M,N); 其中参数同dct2。 |
![]() |
![]() |