计算机视觉 图像的傅里叶变换
傅里叶基础
法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被世人铭记的最大的贡献是:他指出任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数(现在称该和为傅里叶级数)。无论函数多么复杂,只要它是周期的,并且满足某些适度的数学条件,都可以用这样的和来表示。即一个复杂的函数可以表示为简单的正弦和余弦之和。甚至非周期函数(单该曲线下的面积是有限的)也可以用正弦和/或许·余弦乘以加权函数的积分来表示。在这种情况下的公式就是傅里叶公式。
比如说我们以制作一个饮料的过程,使用时域的角度来看就是这样:
这里是什么意思呢,就是说一个饮料的制作需要在18点整放1个单位冰糖、3个单位红豆、2个单位的绿豆、4个单位的西红柿,还有1个单位的纯净水。然后再18:01分只需要假如一个单位的纯净水。后面也是一致。而频域是怎么描述这件事的呢?
具体来说就是说他发现了一个规律,就是说这个制作过程,每分钟都要加入冰糖,每两分钟都要加入红豆,每三分钟都要加入一次绿豆…。对于时域角度我们这样描述。
对于频域角度我们这样描述这件事,用直方图表示就是:
如果要考虑更精准的时间精度,我们就要引入相位这个概念。他是一个和时间差有关的一个表述。
这里我们说明一下就是时域和频域的表述是互逆的,对于时域我们是时间为横坐标,振幅为纵坐标。对于频域我们以频率为横坐标,振幅为纵坐标。但是可以看得出来频域的表述更加简单,但是比较抽象,不容易理解。傅里叶说: 任何连续周期信号,可以由一组适当的正弦曲线组合而成。 注意这里是一组而不是一个。比如对于这样的一个图像: f(x)=3 np.sin(0.8 x)+7 np.sin(1/3 x)+2 np.sin(0.2 x)
看上去是毫无规律可言吧,但是它也可以由一组正弦函数组成。
他们是可逆的,想不到吧,乱七八糟的东西也有规律了。但是他们就是这样组合而成的吗?不可能吧,所以这里就是不是同时开始的一组余弦函数,在叠加时要体现开始的时间。也就说组合的函数他们的开始时间是不一样的。在这里分别对应0,2,3.看公式就看出来啦。这里多说一嘴就是说傅里叶变换从时域角度来看,这个世界是动态的!从频域角度来看这个世界是静止的。从数学角度来讲:傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式。从物理角度来讲:傅里叶变换实现了将信号从空间域到频率域的转换。
傅里叶基础numpy实现
python是可以实现傅里叶变换的,这里就要说到三剑客的numpy了。对应的函数是: numpy.fft.fft2 返回一个复数数组(complex ndarray)。 numpy.fft.fftshift 这个函数时表示把将零频率分量移到频谱中心。
还要设置频谱的范围 20*np.log(np.abs(fshift)) ,对于图像来说就是255了。
结果是:
原图和频谱图像。
逆傅里叶numpy实现
对于傅里叶的逆操作这里没有什么可说的,就是把频域图像转回原图像。
函数是: numpy.fft.ifft2 ,那么还有一个操作就是把中间移动回去对啊。 numpy.fft.ifftshift 。 iimg = np.abs(逆傅里叶变换结果) 而第二个图就表示低频部分,边缘就表示为高频部分。
首先我们要进行傅里叶变换吧,才可以进行逆操作。结果是:
完全一致!!!
2024-08-08 广告