首先写一下对图像频率的一些理解:

简单一点说,图像中的高频分量,指的是图像强度(亮度/灰度)变化剧烈的地方,也就是我们常说的边缘(轮廓);图像中的低频分量,指的是图像强度(亮度/灰度)变换平缓的地方。那么保留高频就是高通滤波器(边缘提取),保留低频就是低通录波器(图像平滑)。高斯滤波器可以使图像边缘变得平滑,它是一种低通滤波器。

高斯滤波

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。而高斯滤波器的系数,随着距离核锚点的增大而减小,成高斯分布,如下式所示。所以,高斯滤波器相比于均值滤波器部分克服了图像边缘像素信息丢失的问题,但无法完全避免,因为高斯核只考虑了空间分布,没有考虑到像素值的差异,图像的边缘往往是图像灰度剧烈变化的地方。
--------------------- 

opencv 频域 高斯 opencv高斯滤波函数_高斯滤波

 

opencv 频域 高斯 opencv高斯滤波函数_opencv 频域 高斯_02

高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是: 
  (1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向. 
  (2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真. 
  (3)高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号. 
  (4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷. 
  (5)由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长. 

API的介绍:

opencv 频域 高斯 opencv高斯滤波函数_opencv 频域 高斯_03

#include "pch.h"
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
	Mat src = imread("F:\\visual studio\\Image\\women1.jpg");
	if (src.empty())
	{
		cout << "Can't load the image" << endl;
		return -1;
	}
	imshow("src", src);
	//Mat gaussNoise = Mat::zeros(src.size(), src.type());
	//RNG rng(getTickCount());
	使用RNG根据高斯分布生成随机数,填充矩阵。
	//rng.fill(gaussNoise, RNG::NORMAL, Scalar(0,0,0), Scalar(255,255,255));
	与原图像相加 生成带有高斯噪声的图像
	//Mat srcWithNoise;
	//add(src, gaussNoise, srcWithNoise);
	//imshow("srcWithImage", srcWithNoise);

	Mat dst;
	GaussianBlur(src, dst, Size(9, 9), 3, 3);
	imshow("dst", dst);
	waitKey(0);

}

opencv 频域 高斯 opencv高斯滤波函数_opencv 频域 高斯_04