高斯滤波的简介、C语言实现和实测
文章目录
- 前言
- 一、核心原理
- 二、C语言实现
- 三、实测
- 四、主要特点与优势
- 五、应用场景
- 六、总结
前言
高斯滤波(Gaussian Filter)是一种广泛应用于图像处理、信号处理和计算机视觉领域的线性平滑滤波器。它基于高斯函数(正态分布函数)来生成滤波核(卷积核),对图像或信号进行加权平均,以达到去噪和模糊的效果。
一、核心原理
- 高斯函数 (Gaussian Function):
二维高斯函数是其基础,定义如下:
G(x, y) = (1 / (2πσ²)) * exp(-(x² + y²) / (2σ²))- (x, y):是滤波核中某个位置相对于中心点的坐标。
- σ (sigma):是标准差,是控制高斯核形状的关键参数。
- σ 越大:高斯曲线越“胖”和“平”,滤波核的权重分布越分散,影响范围越大,产生的模糊效果越强。
- σ 越小:高斯曲线越“瘦”和“尖”,权重越集中在中心点,模糊效果越弱,更接近于简单的均值滤波。
- 滤波核 (Kernel):
- 选择一个合适的尺寸(如 3x3, 5x5, 7x7),中心点为 (0, 0)。
- 将高斯函数计算出的值填入核的每个位置。
- 对整个核进行归一化(所有元素求和后,每个元素除以这个总和),确保滤波后图像的总体亮度不变(加权平均的权重和为1)。
- 卷积操作 (Convolution):
- 将滤波核在图像上滑动。
- 对于图像上的每一个像素点,将其邻域(由核大小决定)内的像素值与核中对应位置的权重相乘。
- 将所有乘积结果相加,得到的新值作为该中心像素的输出值。
- 由于高斯核是对称且可分离的,计算可以优化:
- 对称性:核在水平和垂直方向上对称,简化了设计。
- 可分离性:一个二维高斯核可以分解为一个一维水平高斯核和一个一维垂直高斯核的组合。这意味着可以先用一维核对图像进行水平方向卷积,再用另一个一维核对结果进行垂直方向卷积。这大大降低了计算复杂度(从 O(n²) 到 O(2n))。
二、C语言实现
static inline int convolution(int *operator, unsigned char *block)
{int value = 0, i, j;for (i = 0; i < 3; i++