lightwise

高斯滤波

     做图像处理时, 发现很多算法都要用到高斯滤波,特别是最近做验证码识别时用到的一些算法都涉及到高斯滤波。虽然高斯滤波比较简单,但还是把它记下来,就当是日记了。

//一维高斯滤波
//width IN 宽度
//sigma IN 输入参数
//guassianTemplate OUT 输出高斯模板
bool GenerateGuassian1D(int width,double sigma, double *guassianTemplate)
{
	if (NULL == guassianTemplate)
	{
		return false ;
	}
	if (width %2 != 1 &&  sigma > 0)
	{
		return false ;
	}
	// 一维高斯数据滤波器
	int nSize = width*width;
	int nHalfLen = width/2;  //  窗口长度的1/2

	// 高斯滤波系数的总和   
	double total = 0;

	for (int i=0;i<nSize;i++)
	{	
		*(guassianTemplate + i) = exp(-((i-nHalfLen)*(i-nHalfLen))/(2*sigma*sigma));
		total += *(guassianTemplate + i);
	}
	//归一化
	for (i=0;i<nSize;i++)
	{
		*(guassianTemplate + i) /=total;
	}

	return true;
}

//保持width =height = 2k+1  
//保证guassianTemplate 的大小为(2*k+1)*(2*k+1)
//width IN 高斯模板宽
//height IN高斯模板高
//sigma IN输入参数
//guassianTemplate OUT 输出高斯模板
bool GenerateGuassian2D(int width, int height, double sigma, double *guassianTemplate)
{
	if (NULL == guassianTemplate)
	{
		return false;
	}
	if (width %2 != 1 && height %2 != 1 && sigma > 0)
	{
		return false;
	}
	//高斯模板为(2*k+1)*(2*k+1)
	double total = 0;
	for(int i=0;i<width;i++)
		for(int j=0;j<height;j++)
		{
			guassianTemplate[int(width)*j+i]=exp(-((i-int(width/2))*(i-int(width/2))+(j-int(height/2))*(j-int(height/2)))/(2*sigma*sigma));
			total += guassianTemplate[int(width)*j+i];
		}
		//归一化,高斯模板的所有元素总和为1
		for(int i=0;i<width;i++)
		{
			for(int j=0;j<height;j++)
			{
				guassianTemplate[int(width)*j+i]/=total;
			}
		}

		return true;
}

  

分类:

技术点:

相关文章:

  • 2022-01-05
  • 2022-01-01
  • 2021-12-23
  • 2022-01-06
猜你喜欢
  • 2021-12-14
相关资源
相似解决方案