计算机视觉 (五) -- 图片FFT

本文介绍如何使用快速傅立叶变换(FFT)处理图像,并通过示例代码展示了如何识别图像中的边界。通过对图像进行频率变换,我们可以区分图像的高频和低频部分,进而找到图像中的边界。

FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

我们使用FFT 对图像的高频和低频信号处理,可以找出信号在哪个方向变化快。在变化快方向就有可能存在边界。


import numpy as np
import matplotlib.pyplot as plt
import cv2
image = cv2.imread("./imgs/1.jpg")
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
f = np.fft.fft2(image/255.0)#use 2 dim fft
f_shift = np.fft.fftshift(f)
'''
#Shift the zero-frequency component to the center of the spectrum.
>>> freqs = np.fft.fftfreq(9, d=1./9).reshape(3, 3)
>>> freqs
array([[ 0., 1., 2.],
[ 3., 4., -4.],
[-3., -2., -1.]])
>>> np.fft.fftshift(freqs, axes=(1,))
array([[ 2., 0., 1.],
[-4., 3., 4.],
[-1., -3., -2.]])
'''
frequency_tx = 60*np.log(np.abs(f_shift))
f,(a1,a2) = plt.subplots(1,2,figsize=(200,200))
a1.set_title("original image")
a1.imshow(image,cmap='gray')
a2.set_title("requency transform image")
a2.imshow(frequency_tx,cmap='gray')
plt.show()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值