2019-06-07 12:00:37 nanhuaibeian 阅读数 718

文章参考
韩 昊:https://www.cnblogs.com/h2zZhou/p/8405717.html
M李丽:https://blog.csdn.net/qq_32211827/article/details/78338902
赵越:https://zhuanlan.zhihu.com/p/21298832
关系: 傅里叶变换是实现从空域或时域到频域的转换工具

一、时域

时域(时间域)——自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x(t)是描述信号在不同时刻取值的函数。

时域是真实世界,是惟一实际存在的域
从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。

二、频域

频率域(frequency domain。)任何一个波形都可以分解成多个正弦波之和。每个正弦波都有自己的频率和振幅。所以任意一个波形信号有自己的频率和振幅的集合。频率域就是空间域经过傅立叶变换的信号

频域最重要的性质是:它不是真实的,而是一个数学构造。时域是惟一客观存在的域,而频域是一个遵循特定规则的数学范畴。

频域实际上是时域信号进行傅立叶变换的数学结果,使用频域来观察世界的话,你会发现世界是永恒不变的。

时域中的一段音乐:轨迹动态变化着
在这里插入图片描述
频域中的一段音乐:一个一个静止的乐符序列
在这里插入图片描述
从中细化处一个乐符:
在这里插入图片描述
在时域,我们观察到钢琴的琴弦一会上一会下的摆动,就如同一支股票的走势;而在频域,只有那一个永恒的音符

正如:
在这里插入图片描述
正弦波是频域中唯一存在的波形,这是频域中最重要的规则,即正弦波是对频域的描述,因为时域中的任何波形都可用正弦波合成。这是正弦波的一个非常重要的性质。然而,它并不是正弦波的独有特性,还有许多其他的波形也有这样的性质。

三、空间域:图像平面本身,以图像像素直接进行处理为基础

空间域又称图像空间(image space)。由图像像元组成的空间。在图像空间中以长度(距离)为自变量直接对像元值进行处理称为空间域处理。

空间域(spatial domain)也叫空域,即所说的像素域,在空域的处理就是在像素级的处理,如在像素级的图像叠加。通过傅立叶变换后,得到的是图像的频谱。表示图像的能量梯度。

2019-07-02 11:55:17 weixin_39504171 阅读数 644

1频域滤波与空间域滤波比较

(1)空间域滤波简介

        空间域滤波是在图像空间中借助模板对图像进行邻域操作,处理图像的每一个像素的取值都是根据模板对输入像素邻域内的像素值进行加权叠加得到的。空间域滤波是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,从而改变图像的频率分布。空间域滤波是应用模板卷积对图像每一个像素进行局部处理。

 

(2)频域滤波器简介

        频域滤波是图像经傅里叶变换后,边缘和其他尖锐信息在图像中主要出于高频部分,因此,可以通过衰减图像傅里叶变换中的高频成分的范围来实现。

 

(3)频域滤波与空间域滤波的比较

       1)在空间域滤波中,平滑滤波器算法简单,处理速度快,但在降噪同时使图像产生模糊,特别是在边缘和细节处。中值滤波器对椒盐噪声抑制效果比较好,但对点、线等细节较多的图像却不太合适。低通滤波器对椒盐噪声过滤效果差,图像较为模糊。空间域滤波算法简单,处理速度较快,在锐化方面效果明显,线条突出。

        2)在频域滤波中,去噪同时将会导致边缘信息损失,使图像边缘模糊,并且产生振铃效果。页域滤波算法复杂,计算速度慢,有微量振铃效果,图像平缓。

 

(4)频域滤波与空间域滤波的联系

         频域滤波较空域而言更为直观,频域下滤波器表达了一系列空域处理(平滑、锐化等)的本质,即对高于/低于某一特定频率的灰度变化信息予以滤除,而对其他的灰度变化息基本持.不变。这种直观性增加了频域滤波器设计的合理性,使得我们更容易设计出针对特定问题的频域。而想直接在空域中设计出一个能够完成滤波任务的滤波器(卷积模板)是相当困难的。

         为了得到合适的空域滤波器,我们很自然地想到可以首先设计频域滤波器H(u, v)而后根据卷积定理,将H(u, v)反变换至空域后就得到了空域中滤波使用的卷积模板h(x, y),从而解决空域滤波器的设计难题。然而,直接反变换得到的空域卷积模板h(x, y)同H(u, v)等大,要计算这样大的模板与图像的卷积将是非常低效的。利用以全尺寸的空域滤波器h(x, y)为指导设计出的形状与之类似的小空域卷积模板,同样可以取得类似于频域滤波器H(u, v)的滤波效果。这就为从频域出发,最终设计出具有实用价值的空域模板提供了一种完美的解决方案。

 

(5)空间域高斯滤波与频域高斯滤波的比较

         1)方差:空域高斯函数的方差越大,高斯函数越宽,模板尺寸越大,处理的图像越模糊;频域高斯函数的方差越小,高斯函数越窄,滤除的低频成分越多,图像越模糊。

         2)计算量:空域高斯滤波的计算花费随着模板的规模的增大而增大;频域高斯滤波的计算星独立于滤波函数。

 

(6)振铃效应

        振铃效应(Ringingeffect)是影响复原图像质量的众多因素之一,其典型表现是在图像灰度剧烈变化的邻域出现类吉布斯(Gibbs)分布--满足给定约束条件且熵最大的分布)的振荡。

        在图像盲复原中,振铃效应是一个不可忽视的问题,其严重降低了复原图像的质量, ,并且使得难于对复原图像进行后续处理。如果点扩振铃效应是由于在图像复原中选取了不适当的图像模型造成的;在图像盲复原中散函数选择不准确也是引起复原结果产生振铃效应的另一个原因,特别是选用的点扩散函数尺寸大于真实点扩散函数尺寸时,振铃现象更为明显;振铃效应产生的直接原因是图像退化过程中信息量的丢失,尤其是高频信息的丢失。铃效应对复原图像质量影响严重,众多学者对抑制振铃效应的方法进行了广泛研究,然而大多数图像复原方法在这一点上都有所不足,造成了复原过程中的振铃效应几乎不可避免,尤其对于有噪声存在的场合,它会混淆图像的高频特性,使得振铃效应带来的影响更加显著。

 

(7)参考文献

http://www.doc88.com/p - 3022161431207.html

http: / /blog.csdn.net/u010839382/article/details/41908541

2016-05-06 10:08:43 lpsl1882 阅读数 3861

一般我们看到的图像可以表示为函数f(x,y),x和y是空间上的坐标,此时的图像称为空间域图像;经过频域变换后的图像称为频域图像。离散情况下,一维傅里叶变换有如下形式。同时这里还证明了,对原始数据乘以(-1)^x之后,频域结果被中心化。


在二维情况下,则有

因为图像处理中一般有M=N,所以有

 

我们对一幅图像每个像素点(x,y)乘以(-1)^(x+y),然后进行FFT,得到中心化的频域图像,然后对频域图像进行操作,最后进行傅里叶逆变换,得到处理图像。

 

在频域上可以方便地进行低通滤波和高通滤波,或者叫模糊化滤波和锐化滤波。设当前的频域图像已经中心化,如果频域图像像素离中心越远,乘以一个小的权值,那么变换回空间域图像,就会发现图像模糊了;反之图像变锐化。常用如下几种滤波器:

1、理想低/高通滤波。如果频域图像像素点离中心超过/小于一定距离D0,那么赋值为0。理想滤波之后产生的空间域图像会伴随着波纹,称为振铃,原因是理想滤波器曲线是阶跃曲线,用傅里叶级数去拟合会产生吉布斯效应引起的震荡。、

2、巴特沃斯滤波器。其公式中n为阶数,控制坡度大小。N=1时有振铃效应,n增大后振铃逐渐减弱。

3、高斯滤波器。效果比较完美。

 

低通滤波器LPF,其中D0是截止频率,D(u,v)是离中心的距离


高通滤波器HPF = 1 -LPF

带阻滤波器HBR,w是带宽,D0是截止频率,D就是D(u,v)

带通滤波器HBP = 1- HBR

表格略。

陷波器,带阻滤波器中心不在原点的,带有偏移的带阻滤波器。

https://github.com/artzers/NGImageProcessor.git BaseFFTProcessor.py

2017-03-16 10:12:08 Touch_Dream 阅读数 4122

一篇写的不错的博文http://blog.csdn.net/lu597203933/article/details/17252285

图像滤波:

滤波是信号处理机图像处理中的一个基本操作。滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样(图像进行一系列的几何变换输出新的图像)。

图像中的频域和空域:空间域指用图像的灰度值来描述一幅图像;而频域指用图像灰度值的变化来描述一幅图像。而低通滤波器和高通滤波器的概念就是在频域中产生的。

低通滤波器指去除图像中的高频成分,而高通滤波器指去除图像中的低频成分。

后面将介绍低通滤波器—均值和高斯滤波器;中值滤波器—非线性滤波器;高通滤波器—sobel算子(方向滤波器)和拉普拉斯变换(二阶导数)。其中利用方向滤波器和拉普拉斯变换可以对图像的边缘进行检测。

二:低通滤波器(平滑图像)

<1>cv::blur函数:每个像素替换为相邻矩形内像素的平均值

<2>cv::GaussianBlur函数:通过高斯核来进行替换

Code:

Mat result;                              // 线性平滑 滤波  每个像素替换为相邻矩形内像素的平均值
	blur(image, result,Size(5,5));         // filter2D可以自定义核进行线性滤波

	Mat gauResult;
	GaussianBlur(image, gauResult, Size(5,5), 1.5);    // 高斯平滑 模糊  线性滤波器

Result:

sourceImage:

BlurResult:


GaussianBlur:


低通滤波器的效果是对图像进行模糊和平滑,减弱了物体边缘可见的快速变化。它是一种线性滤波器,原理是与核进行卷积运算,此时的核内定,当我们需要指定核函数进行卷积时可以用filter2D函数,它的使用见blog:http://blog.csdn.net/lu597203933/article/details/16811851。 

三:中值滤波器

中值滤波器是非线性滤波器,它的原理是仅仅计算这组数的中值,并用中值替换当前的像素值。因此对于去除椒盐噪点非常有用。

Code:

Mat medianResult;
	medianBlur(image, medianResult,5);  // 是一个非线性的滤波器,利用中值替换当前的像素值,对于去除椒盐噪点尤为有用

Result:

 

三:方向滤波器—sobel算子

Sobel算子就是通过卷积操作来计算图像的一阶导数,由于边缘处图像灰度变化率较大,因此可以用sobel算子来进行边缘检测。Sobel算子的核定义为:

y坐标轴:


x坐标轴:


Sobel函数:Sobel(InputArray src, OutputArray dst, int ddepth,

                         int dx, int dy, int ksize=3,

                         doublescale=1,double delta=0,

                         int borderType=BORDER_DEFAULT );

其中ddepth为图像类型, (dx,dy) = (1,0)为x方向导数,(dx,dy) = (0,1)为y方向导数,scale和delta的作用是再保存前可以对图像进行缩放,公式为:dst =dst * scale + delta.

Code:

int main()
{
	Mat image = imread("F:\\lena.png", 0);
	if(!image.data)
	{
		cout << "Fail to load image" << endl;
		return 0;
	}
	Mat sobel_x, sobel_y;
	//Sobel(image, sobel_x, CV_8U, 1, 0, 3, 0.4, 128);
	//Sobel(image, sobel_y, CV_8U, 0, 1, 3, 0.4, 128);

	Sobel(image, sobel_x, CV_16S, 1, 0);  // 因为后面要相加 所以用16位有符号的整数来表示  另外导数肯定含有负数
	Sobel(image, sobel_y, CV_16S, 0, 1);
	Mat sobel;
	sobel = abs(sobel_x) + abs(sobel_y);

	double sobmin, sobmax;
	minMaxLoc(sobel, &sobmin, &sobmax);
	Mat sobelImage;
	sobel.convertTo(sobelImage, CV_8U, -255.0/sobmax, 255);   // 等价于  saturate_cast(a*sobel + b)
	
	Mat sobelThresholded;
	int thre = 200;
	threshold(sobelImage, sobelThresholded, thre, 255, THRESH_BINARY);

	namedWindow("sobelImage", 0);
	imshow("sobelImage", sobelImage);
	namedWindow("sobelThresholded", 0);
	imshow("sobelThresholded", sobelThresholded);

	waitKey(0);
	return 0;
}

Result:


当然除了sobel算子,还有其它的算子,如Scharr算子,它更精确、快。它的核为:

 

Sobel(image, sobelX, CV_16S, 1, 0,CV_SCHARR);

或者:

Scharr(image, scharrX, CV_16S, 1, 0, 3);

四:拉普拉斯变换

拉普拉斯变化时基于图像导数的高通滤波器,计算二阶导数以衡量图像的弯曲度

Code:

int main()
{
	Mat image = imread("F:\\lena.png", 0);
	if(!image.data)
	{
		cout << "Fail to load image" << endl;
		return 0;
	}
	Mat laplacian;
	Laplacian(image, laplacian, CV_16S, 3);  // 二阶导数肯定含有负数。。  基于图像导数的高通滤波器,计算二阶导数以衡量图像的弯曲度
	laplacian = abs(laplacian);
	Mat laplacianImage;
	laplacian.convertTo(laplacianImage, CV_8U);
	namedWindow("laplacianImage");
	imshow("laplacianImage", laplacianImage);
	waitKey(0);
	return 0;

}

Result:



2016-05-09 16:01:19 lpsl1882 阅读数 5557

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

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的,这样就可以大大减小数据的存储尺寸;然而在实际的计算中,压缩数据一般要解压为原始数据才能执行相关的计算和显示操作,因此频域方法可以助力数据存储压缩,却无助于减小计算中的数据的大小。

没有更多推荐了,返回首页