STM32F103ZET6的FFT算法实现与LCD显示优化
摘要
随着计算机技术的发展,数字图像也越来越常见,因此提高图像分辨率和对其进行降噪也尤为重要。由于图像中像素的不连续性,需要使用离散傅里叶变换(DFT)来代替常规的傅里叶变换(FT)。为了降低运算复杂度,提高处理效率,便引出了快速傅里叶变换(FFT)。本课题首先阐述了FFT在图像处理中的意义与作用,然后在MATLAB软件以及c语言程序中分别实现1维和2维FFT并将结果进行对比,最后再用stm32微控制器实现图像的FFT处理,并将处理之前和处理之后的图像通过LCD进行显示。最终结果表明图像的FFT在MATLAB、C语言程序仿真以及STM32实现中都具有一致的结果。
关键词:数字图像;像素;快速傅里叶变换(FFT);图像显示
目录
0引言 1
1FFT理论研究 2
1.1一维离散傅里叶变换(DFT) 2
1.2一维快速傅里叶变换(FFT) 2
1.2.1FFT的必要性 2
1.2.2FFT的原理 3
1.2.3FFT的方法 3
1.3二维快速傅里叶变换(FFT) 5
2研究内容 5
2.1一维和二维FFT 5
2.2图像处理 6
2.3STM32实现图像FFT 6
3核心程序设计 6
Ⅱ
3.1VC++实现一维FFT 6
3.2MATLAB实现图像的二维FFT 8
3.3STM32微控制器实现图像FFT 9
4课题研究结果 11
4.1一维FFT的实现 11
4.1.1MATLAB实现一维FFT 11
4.1.2VC++实现一维FFT 12
4.2二维FFT的实现 12
4.2.1MATLAB实现二维FFT 12
4.2.2VC++实现二维FFT 13
4.3对图像进行二维FFT处理 14
4.3.1MATLAB对图像进行FFT处理 14
4.3.2VC++对图像进行FFT处理 15
4.4STM32实现FFT 16
5课题总结 18
参考文献 19
致谢 错误!未定义书签。
附录:源程序 错误!未定义书签。
MATLAB实现一维FFT 错误!未定义书签。
MATLAB实现二维FFT 错误!未定义书签。
MATLAB实现图像二维FFT………………错误!未定义书签。VC++实现一维FFT…………错误!未定义书签。
VC++实现二维FFT…………错误!未定义书签。
VC++实现图像二维FFT……错误!未定义书签。LCD实现FFT………………错误!未定义书签。
0引言
傅里叶变换(FT)早在1807年就由法国数学家和物理学家傅里叶JeanBaptisteJosephFourier(1768-1830)提出(高子涵,马文博,2022)[1,它可以将图像在时域和频域间转换,可以简化对图像特征的提取和分析,这在一定水平上揭示是描述图像信息的第二种语言,其在图片的编码,压缩,分割与重建中被广泛应用(周悦澄,吴漫妮,2023)[2,因此对于广泛研究FT以及其扩展形式的特性是非常有价值的。在计算机中的所有信号都是离散的是,所以对于离散傅里叶变换(DFT)的研究也是必不可少的,在此类设定里为了降低运算复杂度,提高图像处理的速度,DFT的快速算法快速傅里叶变换(FFT)在1965年被库利(Cooley)和图基(Tukey)发现(江景轩,赖俊杰,2017)I3,随着之后的发展,目前最常用的FFT算法是基2,基4和分裂基算法。
数字图像处理最早也出现在1964年美国喷气推进实验室使用计算机对月球照片进行处理使原本模糊的图片变得清晰(罗明轩,孙芷蕾,2021)[41,在这种场合里图1为月球照片(处理前),图2为月球照片(处理后),通过对比发现FFT对图像处理的效果是非常显著的。随着技术的不断发展与完善,数字图像处理技术在气象,生物医学,军事等众多领域都有着不可取代的作用(吴天煜,郑婉晴,2019)[5,对于数字图像处理最常用的方法便是FFT。由于FFT一般为复数其结果比较复杂,为了结果的准确性,本课题采用了MATLAB和C语言程