从图像空间域滤波到频域滤波

频域滤波的快速实现是工程领域的里程碑。频域滤波最让工程师兴奋的原因来自于这个公式:

f(x)*g(y)<-->F(u)G(v)

这说明空间域中的复杂的卷积算子,变换到频域中就成了简单的乘法,这样不仅计算简单,而且工程上易于实现。在FFT和快速DCT(余弦变换)的数字实现之前,频域变换的计算是很头疼的事情,在计算效率上并不比普通卷积快多少;在FFT和快读DCT实现之后,频域信号处理几乎无处不在。

空间域滤波的算子可以变成频域滤波算子。假设当前图像尺寸为512x512,滤波算子大小为3x3,显然直接对滤波算子进行频域转换后的结果仍然为3x3,这是无法相乘的。这需要从定义出发来解释。

卷积的定义是:f(t)*g(t)= 如果f和g是周期不同的周期函数,那么我们要用0补全函数周期,保证补全后的函数f’和g’有相同的周期,然后再进行卷积;否则不能保证f和g函数在同一个周期内进行卷积,导致不同周期的滤波结果混淆起来。

回到原始的空间滤波上讲,平时我们的操作是遍历当前图形512x512的每个像素,用3x3的模板对当前像素领域进行卷积操作。其实这是简化后的操作,真正的操作其实是,构建512x512大小的卷积模板,其左上角3x3元素是执行空间域滤波操作的算子元素,剩下的元素全部为0,用这个512x512的卷积模板对图像进行二维卷积。由于除了3x3以外的元素都是0,所以我们实现的时候,只需要计算3x3模板范围的值,看起来就像只用3x3卷积模板对当前像素邻域做操作。

明白了512x512图像的空间滤波算子其实也是512x512大小之后,那么我们就可以实现从空间域滤波到频域滤波。构建一个512x512的滤波算子,把3x3模板参数放在算子左上角(放在不同位置会导致滤波结果变得奇怪,比如图像被循环位移),然后进行频域转换生成512x512的频域模板,将其与频域图像相乘(注意如果频域图像中心化,那么频域模板也要中心化),然后还原到空间域图像,就完成一次和空间域滤波结果相同的频域滤波。

频域滤波就完美无瑕了吗?当然不是。假设我的图像大小为512x512,灰度范围为0~255,那么每个像素只需要用1 byte表示,共512x512 bytes;进行频域滤波之后,我需要用两个float甚至double矩阵来表示频域图像的实部和虚部,这就需要512x512x4x2或者512x512x8x2 bytes,一下子内存消耗多了8~16倍;如果频域转换精度不够高的话,经过频域转换再还原到空间域的图像会有信号损失,而不会完全还原到原始图像。请注意,计算机常用的压缩算法会用到频域转换,原因是频率滤波后,大部分图像信息集中到原点附近和其他少数几个区域,大部分区域是不重要的、或者值为0的,这样就可以大大减小数据的存储尺寸;然而在实际的计算中,压缩数据一般要解压为原始数据才能执行相关的计算和显示操作,因此频域方法可以助力数据存储压缩,却无助于减小计算中的数据的大小。

时间: 2024-11-09 01:10:51

从图像空间域滤波到频域滤波的相关文章

Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)

前面曾经介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这种方法直接对图像空间操作,操作简单,所以也是空间域滤波. 频域滤波说到底最终可能是和空间域滤波实现相同的功能,比如实现图像的轮廓提取,在空间域滤波中我们使用一个拉普拉斯模板就可以提取,而在频域内,我们使用一个高通滤波模板(因为轮廓在频域内属于高频信号),可以实现轮廓的提取,后面也会把拉普拉斯模板频域化,会发现拉普拉斯其实在频域来讲就是一个高通滤波器. 既然是频域滤波就涉及到把图像首先变到频域内,那么把图

灰度图像--频域滤波 概论

学习DIP第25天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 这两天写了一下频域滤波的代码,并且发现以前博客里代码的一个BUG,产生BUG的原因是一维

傅里叶变换和频域滤波

傅里叶变换 #include "opencv2/opencv.hpp" using namespace cv; #define PI2 2*3.141592654 int main() { Mat image = imread("lena.png"); resize(image, image, Size(100,100)); cvtColor(image,image,CV_RGB2GRAY); imshow("src",image); image

傅里叶变换,频域滤波

#include "opencv2/opencv.hpp" using namespace cv; #define PI2 2*3.141592654 int main() { Mat image = imread("lena.png"); resize(image, image, Size(100,100)); cvtColor(image,image,CV_RGB2GRAY); imshow("src",image); image.conve

灰度图像--频域滤波 滤波器

学习DIP第26天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 开篇废话 依然是废话开始,滤波器的起源就是频域来的,针对频域特性,滤波器被设计成各种各样的功能,但

灰度图像--频域滤波 同态滤波

学习DIP第27天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

空域高斯滤波与频域高斯滤波

卷积定理 函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积.对应地,频率域的卷积与空间域的乘积存在对应关系. 即: 由卷积定理可知所有频域的滤波理论上都可以转化为空域的卷积操作. 给定频率域滤波器,可对其进行傅里叶逆变换得到对应的空域滤波器:滤波在频域更为直观,但空域适合使用更 小的滤波模板以提高滤波速度.因为相同尺寸下,频域滤波器效率高于空域滤波器,故空域滤波需要一个更小尺 寸的模板近似得到需要的滤波结果. 空域卷积 将模板在图像中逐像素移动,将卷积核的每个元素分别和图像矩阵对应位置元素相乘

数字图像处理-频域滤波

频域滤波 频域滤波是在频率域对图像做处理的一种方法.步骤如下: 1.理想的高/低通滤波器 顾名思义,高通滤波器为:让高频信息通过,过滤低频信息:低通滤波相反.滤波器大小和频谱大小相同, 理想的低通滤波器模板为: 其中,D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下: M和N表示频谱图像的大小,(M/2,N/2)即为频谱中心 理想的高通滤波器与此相反,1减去低通滤波模板即可. 代码如下:(D0=20) """理想的高/低通滤波器""

opencv的频域滤波

频域滤波流程总结如下: 给定一幅大小为M×N的输入图像f(x,y),从式(6.1-25)和式(6.1-26)得到填充参数P和Q.典型地,我们选择P=2M和Q=2N: 对f(x,y)添加必要数量的0,形成大小为P×Q填充后的图像 用(-1)(x+y)乘以fp(x,y),进行频谱中心化的预处理: 计算中心化预处理过的fp(x,y)的傅里叶变换,得到Fp(u,v); 生成一个实的.对称的滤波函数H(u,v),其大小为P×Q,频谱零点位于(P/2,Q/2)处.用阵列相乘形成乘积G(u,v)=F(u,v)