Python+OpenCV(1)---傅里叶变换

一,傅里叶变换原理

傅里叶的原理表明,任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。利用傅立叶变换算法直接测量原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅 和相位就可以表示原始信号。

二,傅里叶变换

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
o=cv2.imread("test.png",0)
# 傅里叶变换
f=np.fft.fft2(o)
# 傅里叶变换后,将低频部分移到中心位置
fshift=np.fft.fftshift(f)
# 傅里叶逆变换 转到0-255
result=20*np.log(np.abs(fshift))
# 显示图像  1行2列,的第一列
plt.subplot(121)
# 原始图像
plt.imshow(o,cmap='gray')
# 傅里叶变换结果
plt.title('original')
# 关闭坐标轴
#plt.axis('off')

# 显示图像  1行2列的第二列
plt.subplot(122)
# 傅里叶变换结果
plt.imshow(result,cmap='gray')
# 傅里叶变换结果
plt.title('result')
# 关闭坐标轴
#plt.axis('off')
# 显示图像
plt.show()

三,逆傅里叶变换

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
#加载图像
o=cv2.imread('test.png', cv2.IMREAD_UNCHANGED)
#傅里叶变换
f=np.fft.fft2(o)
#傅里叶变换后,将低频部分移到中心位置
fshift=np.fft.fftshift(f)
#傅里叶逆变换
ishift=np.fft.ifftshift(fshift)
#傅里叶逆变换
io=np.fft.ifft2(ishift)
#取绝对值
io=np.abs(io)

#显示图像
plt.subplot(121)
#原始图像
plt.imshow(o,cmap='gray')
#原始图像的标题
plt.title('original')
#原始图像的坐标轴不显示
plt.axis('off')

#显示图像
plt.subplot(122)
#傅里叶变换结果图像
plt.imshow(io,cmap='gray')
#傅里叶变换结果图像的标题
plt.title('result')
#傅里叶变换结果图像的坐标轴不显示
plt.axis('off')
#显示图像
plt.show()

四,高通滤波

高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。例如,在一幅大草原的图像中,其中狮子的边缘等信息。

python 复制代码
# 傅里叶 高通滤波
# 
import cv2
import numpy as np
import matplotlib.pyplot as plt
o=cv2.imread('test.png',0)
# 傅里叶变换
f=np.fft.fft2(o)
# 傅里叶变换后,将低频部分移到中心位置
fshift=np.fft.fftshift(f)
# 高通滤波
rows,cols=o.shape
# 中心位置
crow,ccol=int(rows/2),int(cols/2)
# 高通滤波,将低频部分置零 (中心部分)
fshift[crow-30:crow+30,ccol-30:ccol+30]=0
# 傅里叶逆变换
ishift=np.fft.ifftshift(fshift)
# 傅里叶逆变换
io=np.fft.ifft2(ishift)
# 取绝对值
io=np.abs(io)
# 显示图像
plt.subplot(121)
plt.imshow(o,cmap='gray')
# 显示图像
plt.subplot(122)
plt.imshow(io,cmap='gray')
plt.show()

五,低通滤波

低频对应图像内变化缓慢的灰度分量。例如,在一幅大草原的图像中,低频对应着广袤的颜色趋于一致的草原。

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
o=cv2.imread("test.png",0)
dft=cv2.dft(np.float32(o),flags=cv2.DFT_COMPLEX_OUTPUT)
dshift=np.fft.fftshift(dft)
rs,cs=o.shape
cr,cc=int(rs/2),int(cs/2)
mask=np.zeros((rs,cs,2),np.int8)
mask[cr-30:cr+30,cc-30:cc+30]=1
md=dshift*mask
imd=np.fft.ifftshift(md)
io=cv2.idft(imd)
i0=cv2.magnitude(io[:,:,0],io[:,:,1])

# 原图像
plt.subplot(121)
plt.imshow(o,cmap='Grays')
plt.axis('off')
plt.title('original')

# 频域处理后图像
plt.subplot(122)
plt.imshow(io ,cmap='Grays')
plt.axis('off')
plt.title('result')
plt.show()
相关推荐
万化冥合35 分钟前
怎么批量把 Word 转 PDF?
python·pdf·c#·word
~城南花已开~40 分钟前
Redfish 事件接收服务搭建指南(Ubuntu Server 实测)
linux·服务器·python·ubuntu
fengyangaiGEO41 分钟前
如何通过GEO优化实现外贸B2B询盘增长?
人工智能·python
qq_4017004143 分钟前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
星夜离尘561 小时前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
jianxuan1 小时前
Spring Boot + Maven 接入 Allatori:从普通打包到可选混淆发布
spring boot·python·maven
不一样的故事1261 小时前
Prompt 工程(Prompt Engineering)
前端·人工智能·python
我命由我123451 小时前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
ZoeLandia1 小时前
React08:自定义 Hook
开发语言·前端·react.js·typescript
zh路西法1 小时前
【模型式强化学习】(三):MBPO——短轨迹生成与模型数据驱动的策略优化
python·强化学习·pe·sac·pets·mbpo·mbrl