高斯滤波(Gaussian blur)
高斯滤波法,利用高斯函数计算高斯核,利用高斯核处理图像。高斯函数在滤除高斯噪音以及模糊方面效果较好,实现该函数的核心在于高斯核的计算。高斯函数的一维形式如公式(1)所示:
高斯核的计算:
private double[,] Kernerl(){double sum = 0;double[,] kernel = new double[_k, _k];for (int i = -_halfK; i <= _halfK; i++){for (int j = -_halfK; j <= _halfK; j++){//sigma控制图像的模糊程度,值越大,模糊效果越明显//省略公式前的常数A,减少计算量double g = Math.Exp(-((i * i + j * j) / (2 * _sigma * _sigma)));kernel[i + _halfK, j + _halfK] = g;sum += g;}}for (int i = 0; i < _k; i++){for (int j = 0; j < _k; j++){kernel[i, j] /= sum;}}return kernel;}
用高斯核遍历整幅图像,从而实现模糊效果:
private void gaussion(Bitmap bit){_kernel = Kernerl();byte[,] grayData = Image2Byte(_bit);for (int y = _halfK; y < _h - _halfK; y++){for (int x = _halfK; x < _w - _halfK; x++){int sum = 0;for (int j = -_halfK; j <= _halfK; j++)for (int i = -_halfK; i <= _halfK; i++)sum += (int)(grayData[x + i, y + j] * _kernel[i + _halfK, j + _halfK]);Color c = Color.FromArgb(sum, sum, sum);bit.SetPixel(x, y, c);}}}
实际上高斯函数在x和y方向的滤波可分开进行,这样可降低复杂度,提高计算效率。
如有需要完整代码可留言。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
