高斯模糊算法

一维正态分布函数:


对应的曲线如下:


其实就是将某一像素点一定半径内的rgb值按照以上权重分布求出此点的rgb值。

图片像素是二维矩阵,修改如下:


对一个二维的像素矩阵可以分别在水平与垂直方向进行一维高斯模糊其效果等同与二维高斯模糊效果,速度更快。

测试图片如下:


代码如下:

void CGSmooth::generateGaussianKeneral( int radius,float sigma )
{
	float sigma22 = 2*sigma*sigma;
	float pi2 = 2.0*PI;
	float sqrtSigmaPi2 = sqrt(pi2) * sigma;
	int size = 2*radius + 1;
	int index = 0;
	m_gaussianKeneral = new float[size];
	float sum = 0.0f;
	for(int i = -radius; i <= radius; ++i)
	{
		float distance = i*i;
		m_gaussianKeneral[index] = exp((-distance)/sigma22) / sqrtSigmaPi2;
		sum += m_gaussianKeneral[index];
		++index;
	}

	for(i = 0; i < size; ++i)
	{
		m_gaussianKeneral[i] /= sum;
	}
}

int CGSmooth::clamp( float v )
{
	return (int)(v < 0 ? 0 : ( v > 255 ? 255 : v));
}

void CGSmooth::blur( int inPixels[], int outPixels[], int width, int height )
{
	int subCol = 0;  
	int index = 0, index2 = 0;  
	float redSum=0, greenSum=0, blueSum=0;  

	for(int row=0; row < height; row++)
	{
		int ta = 0, tr = 0, tg = 0, tb = 0;  
		index = row;  

		for(int col = 0; col < width; col++)
		{
			redSum = 0.0f;
			greenSum = 0.0f;
			blueSum = 0.0f;
			for(int m = -m_radius; m <= m_radius; m++)
			{
				subCol = col + m;
				if(subCol < 0 || subCol >= width)
				{
					subCol = 0;
				}

				index2 = row * width + subCol;
				ta = (inPixels[index2] >> 24) & 0xff;  
				tr = (inPixels[index2] >> 16) & 0xff;  
				tg = (inPixels[index2] >> 8) & 0xff;  
				tb = inPixels[index2] & 0xff; 

				redSum += (tr * m_gaussianKeneral[m + m_radius]);  
				greenSum += (tg * m_gaussianKeneral[m + m_radius]);  
				blueSum += (tb * m_gaussianKeneral[m + m_radius]); 
			}
			outPixels[index] = (ta << 24) | (clamp(redSum) << 16) | (clamp(greenSum) << 8) | clamp(blueSum); 
			index += height; 
		}
	}
}
代码参考http://blog.csdn.net/jia20003/article/details/9156935



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity HDRP(High Definition Render Pipeline)是Unity引擎的一个高级渲染管线,用于实现高质量的图形渲染效果。高斯模糊是一种常用的图像处理技术,用于创建柔和、模糊的效果。在Unity HDRP中,可以使用Compute Shader来实现高斯模糊效果。 高斯模糊的基本原理是对图像中的每个像素进行加权平均,使得周围像素的颜色对当前像素的影响逐渐减小。这种加权平均的过程可以通过多次迭代来实现更加模糊的效果。 在Unity HDRP中,可以通过以下步骤来实现高斯模糊: 1. 创建一个Compute Shader:Compute Shader是一种在GPU上执行计算任务的程序。可以使用Compute Shader来实现高斯模糊算法。 2. 在Compute Shader中定义高斯模糊算法:在Compute Shader中,可以定义高斯模糊算法的具体实现。通常使用两个Pass来实现水平和垂直方向的模糊。 3. 创建一个Render Texture:Render Texture是一种特殊的纹理,可以用于在渲染过程中存储图像数据。创建一个Render Texture来存储模糊后的图像。 4. 在Compute Shader中使用Render Texture进行计算:在Compute Shader中,使用Render Texture作为输入和输出,对图像进行高斯模糊计算。 5. 在渲染过程中使用模糊后的图像:将模糊后的图像应用到需要模糊效果的对象上,可以通过将Render Texture作为材质的贴图来实现。 需要注意的是,高斯模糊是一种计算密集型的操作,对性能要求较高。在实际使用中,可以根据需求调整模糊的迭代次数和模糊半径,以平衡图像质量和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值