10句话读懂图像频域滤波——不能不知道的信号与系统基本理论

10句话读懂图像频域滤波——不能不知道的信号与系统基本理论


今天的图像处理依靠各类方便易用的工具箱与函数库似乎已然成为上手就能用的应用科学。但没有那种算法是普适的,知其所以然才能真正理解原理,深刻的理解才能针对具体应用行成独到见解。图像处理是信号与信息处理学科的分支,图像滤波的理论当然得从信号与系统说起。尽管很多文献都有详细的论述,但如果你对LSI系统、空间卷积、二维傅里叶变换、空域与频域、滤波与变换的理论概念虽耳熟能详但仍一知半解,本文将尽力用简单的文字将这些关系屡屡清楚,总结并告诉我们一些不可不知的图像频域滤波处理基本理论。

10句话读懂图像频域滤波基本理论

 1  数字图像信号为离散二维或三维信号。


二维灰度图像                                                                        三维视频图像

 2  图像处理很简单,给一幅输入图像x得到一幅输出图像y(n1,n2),通常将这个过程视为一个二维信号处理系统T


 3  线性移不变(LSI)系统有很多优良的性质,这类系统必须同时具有线性与空间移不变性:输出对任意输入都满足均匀性与叠加性(合称线性),输出与系统的坐标原点位置无关(移不变性)



 4  单位冲激函数δ(n1,n2)过LSI系统,输出为系统的冲激响应h(n1,n2)


 5  想得到输出图像其实不难:若已知LSI系统的冲激响应h(n1,n2),则输出图像=输入图像与冲激响应的二维卷积:


 6  傅里叶很牛,可将图像信号从空域x(n1,n2)变到到频域X(ω1,ω2),也可以将图像信号从频域变回空域(ω1,ω2)分别表示频域中的垂直与水平频率



 7  LSI系统冲激响应h(n1,n2)的傅里叶变换就是该系统的频率响应H(ω1,ω2),它给出了系统在频点(ω1,ω2)处的响应特性:


 8  有了卷积定理,一切变得简单:LSI系统在空域的二维卷积运算,等于该系统在频域的乘积运算:


 9  结论来了,频域滤波就是设计合适 的LSI系统频谱响应H(ω1,ω2),即可实现对输入图像中某些频率的放大、衰减或不通过(拒绝):


 10  那么问题来了,到底怎么分析呢(。・∀・)ノ゙~图像滤波中所用的滤波核或模板就是系统的冲激响应h,每个滤波核都已其特定的频率响应函数H,例如:

             

低通滤波器:频率响应曲线中间凸、四周低表示低频部分系数高:低频分量通过,高频被抑制

             

高通滤波器频率响应曲线四周高、中间凹表示高频部分系数高:高频分量通过,低频被抑制

P.S. 如果还想更进一步,请参考博文“如何构造频域滤波器——图像频域滤波的信号与系统基本理论”。


转载请注明:iracer的CSDN博客 http://blog.csdn.net/iracer/article/details/49311463

0

  • 14
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中可以使用numpy和opencv库进行图像频域滤波。 1.使用numpy库实现图像频域滤波 频域滤波的步骤是: (1)读入图像 (2)将图像转换为灰度图 (3)进行傅里叶变换,得到频域图像 (4)设计滤波器 (5)对频域图像进行滤波操作 (6)进行傅里叶逆变换,得到滤波后的图像 代码示例: ```python import cv2 import numpy as np # 读入图像 img = cv2.imread('img.jpg') # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行傅里叶变换,得到频域图像 f = np.fft.fft2(gray) fshift = np.fft.fftshift(f) # 构建高通滤波器 rows, cols = gray.shape crow, ccol = rows // 2, cols // 2 mask = np.ones((rows, cols), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 对频域图像进行滤波操作 fshift = fshift * mask # 进行傅里叶逆变换,得到滤波后的图像 ishift = np.fft.ifftshift(fshift) i = np.fft.ifft2(ishift) result = np.abs(i) # 显示原图和滤波后的图像 cv2.imshow('Original', gray) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 2.使用opencv库实现图像频域滤波 OpenCV提供了cv2.dft()和cv2.idft()函数,可以方便地实现图像的傅里叶变换和逆变换。与numpy库相比,opencv库的实现更加简单。频域滤波的步骤与上面的步骤相同。 代码示例: ```python import cv2 import numpy as np # 读入图像 img = cv2.imread('img.jpg') # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行傅里叶变换,得到频域图像 dft = cv2.dft(np.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 构建高通滤波器 rows, cols = gray.shape crow, ccol = rows // 2, cols // 2 mask = np.ones((rows, cols, 2), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 对频域图像进行滤波操作 fshift = dft_shift * mask # 进行傅里叶逆变换,得到滤波后的图像 ishift = np.fft.ifftshift(fshift) i = cv2.idft(ishift) result = cv2.magnitude(i[:, :, 0], i[:, :, 1]) # 显示原图和滤波后的图像 cv2.imshow('Original', gray) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值