图像的二维傅里叶变换的频谱图代码实现

本文详细介绍了如何使用Java实现图像的二维傅里叶变换,通过分解步骤解释了从图像矩阵装入、傅里叶变换类的编写、低频部分移动到中心,到最终的频谱图显示。强调了普通二维傅里叶变换在大尺寸图像上的运算效率问题,并探讨了其背后的数学原理。
摘要由CSDN通过智能技术生成

实现图像的二维傅里叶变换的频谱图

图像的频谱分析有助于我们理解图像的二维傅里叶变换(离散非周期),并且以直观的方式来展现图像的低通或高通滤波,然而如何获得图像的频谱呢?在matlab中只要短短的几行代码,就可以利用库中的函数轻松地做到。

可是,在此过程中都发生了哪些数学变换,以及得到的频谱图的含义,以及二维傅里叶变换的执行过程…都被蒙在了暗盒里。此篇文章将以应用的角度来加深对二维傅里叶变换执行过程的理解。不过,谈不上实际应用,因为普通的二维傅里叶变换实在是…太!慢!了!

由于我只熟悉java,所以用java来写。如果你熟悉的语言不是java并不会影响你对本文的理解,我会一步步解释,保证你用C/C++也能实现它。

1. 图像矩阵f(x,y)装入二维数组

这个简单,在双重循环里获取图像(i,j)坐标处的像素值(这里为了减少运算量,只获取了一个颜色通道),存到二维数组中待下一步操作

for (int i = 0;i<width;i++) {
   
    for(int j=0;j<height;j++){
   
       pixel[i][j]=image.getRGB(i,j)<<24>>24&0xff;
    }
}
2.编写二维傅里叶变换类

F ( k , l ) = ∑ x = 0 w i d t h − 1 ∑ y = 0 h e i g h t − 1 f ( x , y ) e − i 2 π ( k x w i d t h + l y h e i g h t ) F(k,l)=\sum_{x=0}^{width-1}\sum_{y=0}^{height-1} f(x,y) e^{-i2\pi(\frac{kx}{width}+\frac{ly}{height})} F(k,l)=x=0width1y=0height1f(x,y)ei2π(widthkx+heightly)
由欧拉公式:
e − i x = c o s ( x ) − i s i n ( x ) e^{-ix}=cos(x)-isin(x) eix=cos(x)isin(x)
得:
F ( k , l ) = ∑ x = 0

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unicode718A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值