用python实现高斯滤波器

简介: 用python实现高斯滤波器

一、原理

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。

如下图所示为21*21高斯滤波,离中心越远的像素点占的权重越小。
image.png

二维高斯函数如下所示
image.png

高斯滤波核实际上是对高斯函数的离散化,以3 * 3的高斯滤波核为例,(x,y)为点坐标,
image.png

将以上点坐标代入高斯公式可得3 * 3高斯滤波核

sigma的作用:如下图所示,随着sigma(标准差)的增大,高斯滤波器对领域的考虑越多,因此生成的图像越模糊,极限情况下,高斯滤波器接近于均值滤波器。
image.png

二、代码

def gaussian(img, kernel_size, sigma):
    gaussian_kernel = np.zeros((kernel_size, kernel_size))
    print(gaussian_kernel.shape)
    sum = 0
    for i in range(kernel_size):
        for j in range(kernel_size):
            gaussian_kernel[i][j] = math.exp((-1 / 2) * (np.square(i - (kernel_size - 1) / 2) + np.square(j - (kernel_size - 1) / 2)) / sigma**2) / (2 * math.pi * sigma**2)
            sum = sum + gaussian_kernel[i][j]
    gaussian_kernel = gaussian_kernel / sum

    rows = np.size(img, 0)
    columns = np.size(img, 1)
    for i in range(0, rows - kernel_size + 1):
        for j in range(0, columns - kernel_size + 1):
            img[i][j] = np.sum(np.sum(gaussian_kernel * img[i:i + kernel_size, j:j + kernel_size]))
    return img

三、调用函数

img_blurr = cv2.GaussianBlur(img,(11,11),0)

参数分别为源图像、高斯核大小、x方向的标准差(y方向的标准差不设的话与x方向的相等)
当第三个参数设为0时,会自动计算合适的标准差,计算公式如下
在这里插入图片描述

目录
相关文章
|
7月前
|
数据可视化 数据挖掘 Python
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(下)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
|
7月前
|
数据可视化 API 开发者
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(上)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
|
7月前
|
数据采集 算法 数据可视化
python实现时序平滑算法SG滤波器
python实现时序平滑算法SG滤波器
|
Python
Python实现因子分析(附案例实战)
Python实现因子分析(附案例实战)
1679 0
Python实现因子分析(附案例实战)
|
7月前
|
算法 计算机视觉 Python
OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)
OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)
297 0
|
7月前
|
算法 计算机视觉 Python
OpenCV均值、中值滤波器的讲解及实战应用(附Python源码)
OpenCV均值、中值滤波器的讲解及实战应用(附Python源码)
754 0
Python print() 打印两个 list ,实现中间换行
Python print() 打印两个 list ,实现中间换行
|
算法 大数据 Python
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
158 2
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
|
存储 数据安全/隐私保护 计算机视觉
python 实现pacs功能 推送下拉影像
python 实现dcmtk关联pacs功能 推送下拉影像
288 0
python 实现pacs功能 推送下拉影像
|
前端开发 Python
Leecode加法题目3个 每日练习 Python实现
Leecode加法题目3个 每日练习 Python实现
114 0
Leecode加法题目3个 每日练习 Python实现