图像滤波之高斯滤波

1、高斯函数(一维)数学定义

在这里插入图片描述
  高斯函数的曲线形状为钟状,如图1所示,上式中a、b、c为常实数,其中a为高斯曲线的尖峰,b为高斯函数曲线尖峰位置的X坐标位置,c为标准差,表征高斯函数曲线的宽度
在这里插入图片描述

图1   当且仅当 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/80014ca92ccf4a3f9f07a5d30f22fb01.png#pic_center)   高斯函数的积分为1,通俗点讲,就是高斯曲线以下的面积为1,此时高斯函数可以写为: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/816525b0fafc4b2298daf5e5f7872175.png#pic_center)

2、二维高斯函数

在这里插入图片描述
  上式中(x0,y0)为二维高斯函数中心。бx、бy为标准差。二维高斯函数图像如图2所示
在这里插入图片描述

图2

3、图像滤波之高斯滤波

  在图像处理中,利用二维高斯函数对图像进行滤波,本质上是利用高斯函数生成一个窗口,窗口中各位置权值总和为1,窗口中各位置的权重根据各位置与窗口中心位置之间的欧式距离计算获得,总体呈中间大边缘小趋势。其数学滤波器定义为:
在这里插入图片描述
  高斯滤波器通过生成的高斯核,利用窗口中各位置的权重对对图像进行滤波处理,将中心点像素值与其邻域内像素值进行紧密结合,从而实现对噪声的滤除。

4、高斯滤波代码

#include<opencv2/opencv.hpp>
#include<iostream>

bool GuassFilters(cv::Mat inputImage, cv::Mat& outputImage, int sizeD, float sigma)
{
	if (inputImage.empty())
		return false;
	cv::Mat bordImage;
	cv::copyMakeBorder(inputImage, bordImage, sizeD / 2, sizeD / 2, sizeD / 2, sizeD / 2, cv::BORDER_REPLICATE);
	outputImage = cv::Mat(inputImage.size(), CV_8UC1, cv::Scalar(0));
	for (int i = sizeD / 2; i < bordImage.rows - sizeD / 2; i++)
	{
		for (int j = sizeD / 2; j < bordImage.cols - sizeD / 2; j++)
		{
			float pixWSum = 0.0f;
			float kernelSum = 0.0f;
			for (int x = i - sizeD / 2; x < i + sizeD / 2 + 1; x++)
			{
				for (int y = j - sizeD / 2; y < j + sizeD / 2 + 1; y++)
				{
					float kernelW = exp(-((x - i)*(x - i) - (y - j)*(y - j)) / (2 * sigma*sigma))/(2*3.14* sigma*sigma);
					pixWSum += bordImage.at<uchar>(x, y)*kernelW;
					kernelSum += kernelW;
				}
			}
			outputImage.at<uchar>(i - sizeD / 2, j - sizeD / 2) = pixWSum / kernelSum;
		}
	}
	return true;
}



void main()
{
	cv::Mat src = cv::imread("testImage.png", 0);
	cv::Mat dst;
	cv::Size sizeK = cv::Size(5, 5);
	bool sign = GuassFilters(src, dst, 5, 3);
	cv::waitKey(0);
}

5、高斯滤波效果

在这里插入图片描述

高斯滤波前

在这里插入图片描述

高斯滤波后
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值