图像变换——(DFT、DCT变换,IDFT、IDCT重建)

目的:对图像进行离散傅立叶变换(DFT)、离散余弦变换(DCT)变换,并对图像傅立叶变换的结果进行必要解释,使用IDFT、IDCT对图像进行重建,分析重建后的图像。操作过程中获取两帧图像,对这两帧图像分别进行 DFT、DCT变换,分析它们对应的频谱图、相位图。逆过程类似。

一、基本原理

1. 1-D FFT

序列的DFT定义为:

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第1张图片

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第2张图片

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第3张图片

2. 2-D FFT

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第4张图片

3. 数字图像FFT流程图

根据图像阵列的特性,对其按下列步骤进行FFT变换:
(1)将图像数据阵列变换为按列存储,即从下到上,从左到右;
(2)对每一列图像数据进行1-D FFT;
(3)将按列处理后的数据结果存储,并对它们按原图像阵列的形式,即按行重新存储;
(4)对重新排列的数据逐行进行1-D FFT;
(5)将每行处理后的数据存储起来,即得到2-D 数字图像FFT结果。

对一幅图像进行FFT其流程图如下所示:

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第5张图片

  离散余弦变换(DCT)具有能使图象的最重要的信息集中在DCT的几个系数上的性能。正是基于此,DCT通常应用于图象的压缩。比如,DCT正是国际上有名的有损压缩算法JPEG的核心。输入的图象被分成8×8或16×16的小块,对每一小块分别计算其二维DCT。DCT系数值经计算后再被量化、编码和传输。

 4. 2-IDFT


5. 1-DCT

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第6张图片

6. 2-DCT

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第7张图片

7. 离散余弦反变换

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第8张图片

二、结果图分析

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第9张图片图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第10张图片

     经过傅里叶变换之后,可以获得原图像信号的频域分布情况。从图中可以看出,两幅图的灰度值的不同,其频谱图的意义就是相邻像数之间数值(颜色,亮度等等)的变化,也就是说图像在空间上变化的越快,他对应在频域上的数值就越大。

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第11张图片

  从上面的图片可以看出,图像进行DCT变换后,在频域中矩阵左上角低频的幅值大而右下角高频幅值小,经过量化处理后产生大量的零值系数,在编码时可以压缩数据,因此DCT被广泛用于视频编码图像压缩。

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第12张图片

  经过傅里叶逆变换后又会恢复到原图像,但图像的灰度值发生了变化。经过傅里叶逆变换后的图像不同像素区域的位置与原图像的像素区域的位置发生了改变,逆变换后的图像的灰度级有了明显的压缩。通过观察对图1(或图2)的频谱图和图2(或图1)的频谱图、相位图分别进行IDFT重建后的图片,可以看出,相位图对于图片的重建占主要地位。

图像变换——(DFT、DCT变换,IDFT、IDCT重建)_第13张图片

  通过观察对图1(或图2)的频谱图和图2(或图1)的频谱图、相位图分别进行IDFT重建后的图片,可以看出,重建后的图片与重建之前的相位图更相似。说明相位图对于重建后的图片影响较大。相位图包含更多的边缘信息,而幅度谱图反应了灰度值信息。

三、完整程序

1.读取图片
x=imread('111.jpg');
y=imread('222.jpg');
 
2.将两图分别转换成灰度图像 
x=rgb2gray(x);y=rgb2gray(y);

3.FFT变换,并将中心平移
dftxchange = fftshift(fft2(x));   
dftychange = fftshift(fft2(y));
 
4.将平移后矩阵取实部,显示频谱图在窗口中。使用angle函数求相位角,显示相位图
figure(1)
subplot(1,2,1);imshow(x);title('原图1');
subplot(1,2,2);imshow(y);title('原图2');
figure(2)
subplot(2,2,1);imshow(log(abs(dftxchange)),[8 10]);title('图1的DFT频谱图');
subplot(2,2,3);imshow(angle(dftxchange));title('图1的DFT相位图');
subplot(2,2,2);imshow(log(abs(dftychange)),[8 10]);title('图2的DFT频谱图');
subplot(2,2,4);imshow(angle(dftychange));title('图2的DFT相位图');

5.DCT变换
dcta=dct2(x); 
dctb=dct2(y); 

6.显示频谱图和相位图
figure(3)
subplot(2,2,1);imshow(log(abs(dcta)),[]);title('图1的DCT变换幅度图');
subplot(2,2,2);imshow(angle(dcta),[]);title('图1的DCT变换相位图');
subplot(2,2,3);imshow(log(abs(dctb)),[]);title('图2的DCT变换幅度图'); 
subplot(2,2,4);imshow(angle(dctb),[]);title('图2的DCT变换相位图'); 
 
7.对图1和图2的频谱图和相位图分别进行IDFT重建,对图1(图2)的频谱图和图2(图1)的频谱图、相位图分别进行IDFT重建,显示重建后图片。
A=fft2(double(x)); B=fft2(double(y));
Af=abs(A); phaseA=angle(A);
Bf=abs(B); phaseB=angle(B);
  
rA=Af.*cos(phaseA)+Af.*sin(phaseA).*i;
rB=Bf.*cos(phaseB)+Bf.*sin(phaseB).*i;
xchange=uint8(abs(ifft2(rA)));
ychange=uint8(abs(ifft2(rB)));
figure(4);
subplot(2,2,1);imshow(xchange,[]);title('图1的幅度和1相位DFT重建');
subplot(2,2,3);imshow(ychange,[]);title('图2的幅度和2相位DFT重建');

8.对图1和图2的频谱图和相位图分别进行IDCT重建,对图1(图2)的频谱图和图2(图1)的频谱图、相位图分别进行IDCT重建,显示重建后图片。
rab0=Af.*cos(phaseB)+Af.*sin(phaseB).*i;
rab1=Bf.*cos(phaseA)+Bf.*sin(phaseA).*i;
xy=uint8(abs(ifft2(rab0)));
xy1=uint8(abs(ifft2(rab1))); 
subplot(2,2,2);imshow(xy,[]);title('图1幅谱与2相谱IDFT重建');
subplot(2,2,4);imshow(xy1,[]);title('图2幅谱与1相谱IDFT重建');
 
dctxchange1=abs(dcta);dctxap=angle(dcta);
dctyychange2=abs(dctb);dctybp=angle(dctb);
dctxxchange4=dctxchange1.*cos(dctxap)+dctxchange1.*sin(dctxap).*i;
dctyychange5=dctyychange2.*cos(dctybp)+dctyychange2.*sin(dctybp).*i; 
dctxxchange4=uint8(abs(idct2(dctxxchange4)));
dctyychange5=uint8(abs(idct2(dctyychange5)));
figure(5)
subplot(2,2,1);imshow(dctxxchange4,[]);title('图1幅度与1相位IDCT重建');
subplot(2,2,3);imshow(dctyychange5,[]);title('图2幅度与2相位IDCT重建');
dctxxchange4=dctxchange1.*cos(dctybp)+dctxchange1.*sin(dctybp).*i;
dctyychange5=dctyychange2.*cos(dctxap)+dctyychange2.*sin(dctxap).*i;
dctxchanger1=uint8(abs(idct2(dctxxchange4)));
dctychanger1=uint8(abs(idct2(dctyychange5)));
subplot(2,2,2);imshow(dctxchanger1,[]);title('图1幅度与2相位IDCT重建'); 
subplot(2,2,4);imshow(dctychanger1,[]);title('图2幅度与1相位IDCT重建');


你可能感兴趣的:(数字图像处理,数字图像处理(MATLAB))