图像处理————傅里叶变换
定义:
对于数字图像来说,它的储存方式主要为二维矩阵,因此引进连续二元函数的二维傅里叶变换及反变换定义(学过傅里叶变换的看应该很容易理解,就不细讲):
F(u,v)=∫−∞+∞∫−∞+∞f(x,y)e−j2π(ux+vy)dxdyf(x,y)=∫−∞+∞∫−∞+∞F(u,v)ej2π(ux+vy)dudv
由于计算机对数字图像的储存为离散形式,因此得到离散形式的傅里叶变换与逆变换:
F(u,v)=m=0∑M−1n=0∑N−1f(m,n)e−j2πume−j2πvn,m=0,1,⋯,M−1,n=0,1,⋯,N−1f(m,n)=m=0∑M−1n=0∑N−1F(u,v)ej2πumej2πvn,u=0,1,⋯,M−1,v=0,1,⋯,N−1
实现
二维离散傅里叶变换fft2
Y = fft2(X)
Y = fft2(X , m, n)
其中X为需变换的矩阵,m,n为返回Y的行数和列数,若m,n大于X的维数,则在Y相应的位置补0
二维离散傅里叶逆变换ifft2
Y = ifft2(X)
Y = ifft2(X , m, n)
其中X为需变换的矩阵,m,n为返回Y的行数和列数,若m,n大于X的维数,则在Y相应的位置补0
n维离散傅里叶变换fftn
Y = fftn(X)
Y = fftn(X , m, n)
其中X为需变换的矩阵,m,n为返回Y的行数和列数,若m,n大于X的维数,则在Y相应的位置补0
n维离散傅里叶逆变换ifftn
Y = fft2(X)
Y = fft2(X , m, n)
其中X为需变换的矩阵,m,n为返回Y的行数和列数,若m,n大于X的维数,则在Y相应的位置补0
将零频分量移到频谱中心fftshift
通过将零频分量移动到数组中心,重新排列傅里叶变换 X,利于观察频谱。
Y = fftshift(X)
Y = fftshift(X,dim)

频率响应freqz2(h)
freqz2用于求解频率响应,下图为高斯滤波器处理下的频响图

离散余弦变换DCT
离散余弦变换DCT是图像压缩的一种常见的变换,它将图像表示为具有不同振幅和频率的正弦曲线和。类似于离散傅里叶变换,他利用傅里叶变换的对称性将图像变化成偶函数的形式,然后进行二维傅里叶变换,变换的结果仅包含余弦项,因此称为离散余弦变换。
我们可以根据离散余弦变换的几个系数表示出图像的大部分信息,可以用于图像的压缩。
离散余弦变换DCT
在图像处理中,我们经常利用二维DCT变换,而二维是建立在一维的基础之上,因此了解一维很重要,维基百科上给出八种常见形式,摘选出其中一种:
fp=m=0∑n−1xmcos[nπp(m+21)]
二维DCT定义
对于一个M×N的矩阵A,其DCT变换为(通过一维定义可以看出,严格证明此处省略):
Bpq=αpαum=0∑M−1n=0∑N−1Amncos2Mπ(2m+1)pcos2Nπ(2n+1)q,0⩽p⩽M−1,0⩽q⩽N−1αp={1/M,p=02/M,1⩽p⩽M−1,αq={1/N,q=02/N,1⩽q⩽N−1
这里的Bpq可以看做是基函数的权重
DCT变换矩阵
计算DCT一般有两种方法:
B = dct2(A)
B = dct2(A,m,n)
B = dct2(A,[m n])
DCT图像变换
DCT算法进行压缩即进行DCT变换后在进行逆变换。其中DCT系数:

变换前后两张图为:

代码如下:
RGB = imread('公众号.jpg');
I = rgb2gray(RGB);
J = dct2(I);
imshow(log(abs(J)),[]);
colormap(jet(64));
colorbar
J(abs(J) < 10) =0;
K = idct2(J);
subplot(121),imshow(I);
subplot(122),imshow(K,[0 255]);