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()
相关推荐
fanstuck5 分钟前
2025MCM美国大学生数学建模竞赛B题-可持续旅游管理思路详解+建模论文+源代码
人工智能·python·数学建模·数据挖掘·美赛
艺杯羹11 分钟前
二级C语言题解:孤独数、找最长子串、返回两数组交集
c语言·开发语言·数据结构·算法
比特在路上13 分钟前
ListOJ13:环形链表(判断是否为环形链表)
c语言·开发语言·数据结构·链表
LuiChun15 分钟前
Django-Admin WebView 集成项目技术规范文档 v2.1
后端·python·django
weisian15123 分钟前
消息队列篇--扩展篇--码表及编码解码(理解字符字节和二进制,了解ASCII和Unicode,了解UTF-8和UTF-16,了解字符和二进制等具体转化过程等)
java·开发语言
xianwu54326 分钟前
反向代理模块。。
开发语言·网络·数据库·c++·mysql
{⌐■_■}1 小时前
【Validator】字段验证器struct与多层级验证,go案例
开发语言·信息可视化·golang
imoisture1 小时前
PyTorch中的movedim、transpose与permute
人工智能·pytorch·python·深度学习
Tester_孙大壮1 小时前
第31章 测试驱动开发中的设计模式与重构解析(Python 版)
python·设计模式·重构
weixin_307779131 小时前
C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
数据库·c++·数据仓库·python·sqlserver