高斯滤波器讲解(python实现)

这篇具有很好参考价值的文章主要介绍了高斯滤波器讲解(python实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.高斯滤波器

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

比如下面的一块图像区域的像素值与权值矩阵的乘积(权值矩阵代表卷积核)
高斯滤波器讲解(python实现)
可以看到这个核,距离中心的19越远的系数所占的比重越少,那么对图像的模糊程度也越小。
注:如果噪声的概率密度函数服从高斯分布的就叫做高斯噪声。

关于方盒滤波和均值滤波:
https://mydreamambitious.blog.csdn.net/article/details/125173270


2.高斯函数讲解

(这里将高斯函数和高斯函数的具体应用过程一起讲)

(1)高斯函数

GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)

(2)参数详解

(1)src:表示输入的原图像
(2)Ksize:表示卷积核(高斯核)大小(ksize(w,h),w-像素宽度,h-像素高度)
(3)sigmaX:X方向的滤波核;表示卷积核在X方向上的标准差,控制的是权重比例
(4)sigmaY:Y方向的滤波核;表示卷积核在Y方向上的标准差,控制的是权重比例
如果 sigmaY 为零,则将其设置为等于 sigmaX;如果两个sigma均为零,则分别根据ksize.width 和 进行计算 ksize.height完全控制的结果,无论这一切的语义未来可能的修改,建议指定所有的ksize,sigmaX和sigmaY
sigmaX = 0.3 x ((ksize.width-1) x 0.5 - 1) + 0.8
sigmaY = 0.3 x ((ksize.height-1) x 0.5 - 1) + 0.8

(5)borderType:推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT.

(3)高斯函数具体实现过程

基于二维高斯函数,构建权重矩阵,进而构建高斯核,最终对每个像素点进行滤波处理(平滑、去噪)
高斯滤波器讲解(python实现)
思考:1.为什么可以通过设置高斯函数的sigma值对图像进行平滑操作呢?
高斯滤波器讲解(python实现)
解释:其实大家也知道,当μ=0的时候,图像关于Y轴对称,当σ的值不断变化时,图像的“高瘦”也不断变化,当σ的值变大时,图像越分散(“矮”);相反这越高;通过这样的变化,可以想到我们图像的像素周围的值和高斯函数这样图像的变换的关系。通过这样的方式对图像进行模糊(可能这里还是没有解释清楚)

(3)那这里的sigmaX,sigmaY,ksize是怎么实现卷积并且对图像进行滤波的呢?

(1)为什么要使用sigmaX和sigmaY呢?

解释:因为高斯滤波是一种线性滤波器,为了处理二维的图像,所以使用sigmaX和sigmaY分别对水平和竖直方向进行操作。但是在opencv中首先是使用如下函数得到“水平”放向上的卷积核;然后再调用该函数得到“竖直”放向上的卷积核。(但是其实opencv中并没有具体实现直接使用二维的卷积核,而是通过两个一维的卷积实现的)
具体实现过程如下:

Mat getGaussianKernel( int ksize,         //一维垂直方向上高斯核的行数
                       double sigma,      //标准差
                       int ktype = CV_64F //返回值的数据类型
                      )

得到两个卷积核之后使用opencv中的sepFilter2D函数进行行和列的卷积:最终结果按增量移位后存储在dst中。(下图就是sigmaX和sigmaY通过函数getGaussianKernel产生的两个卷积核,分别是水平和竖直的对图像的一部分区域进行卷积,最后得到一个像素值,这个是像素值就是卷积之后的结果)
高斯滤波器讲解(python实现)

(2)卷积核(权重矩阵)中的值具体计算

首先看一下二维的高斯公式:这里的X,Y随机变量相互独立。
关于X的一维高斯函数(正态分布):

高斯滤波器讲解(python实现)
由于高斯滤波器是以模板的中心位置为坐标原点进行取样,以3x3大小的矩阵为例:
高斯滤波器讲解(python实现)
通过这个公式计算卷积核(权重矩阵):
其中的sigma是我们给出的,那么x,y是怎么得到呢?(看下图)

高斯滤波器讲解(python实现)
这个矩阵周围的点通过
左上点: (x-1,y+1)
顶点: (x,y+1)
右上点:(x+1,y+1)
右边顶点:(x+1,y)
左边顶点(x-1,y)
左下角顶点:(x-1,y-1)
底部顶点:(x,y-1)
右下角顶点:(x+1,y-1)
这个方式计算,通过上面的这个矩阵可以算出卷积核的值(权重值矩阵,如下计算结果)

高斯滤波器讲解(python实现)
注:以公式计算出的中心数据值是最大的,也就是在对图像进行卷积的时候,中心像素值所占比例最大,随着离中心距离越大,权重所占比例越小,可这说明了什么?因为我们计算要对图像进行平滑(通过模糊的方式),那么一个像素点周围的像素值很大程度是有关系的,随着离这个像素中心点的距离越远,像素之间的关系越远,上面我们谈到过,一维高斯图像随着σ变化和我们平滑图像是什么关系,其实是通过高斯公式计算出权重矩阵,而这个权重矩阵也满足随着离像素中心点的距离越远,像素值之间的关系越小。所以随着σ的变大,权重矩阵的各个权重值相差就不是很大,比较类似均值模版,对图像的平滑效果比较明显。

总结:所以以后在设置sigmaX和sigmaY的时候可以更清楚其工作的具体过程,sigma设置的越大,同样的3x3矩阵计算出的权值相差不是很大,接近于均值滤波,对图像平滑处理效果更加明显(下面用代码实例演示效果)。


3.代码实战

import os
import cv2
import random
import numpy as np

def GaussFilter(img_path='images/lenna_GaussNoise.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img=cv2.GaussianBlur(src=img,ksize=(5,5),sigmaX=0,sigmaY=1.0)
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    print('Pycharm')
    GaussFilter()

高斯滤波器讲解(python实现)

(1)当sigma=0.0时,随着ksize的不同,平滑的效果

#无sigma的处理
def GaussFilter(img_path='images/lenna_GaussNoise.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img_5x5=cv2.GaussianBlur(src=img,ksize=(5,5),sigmaX=0)
    img_11x11 = cv2.GaussianBlur(src=img, ksize=(11,11), sigmaX=0)
    img_27x27 = cv2.GaussianBlur(src=img, ksize=(27,27), sigmaX=0)
    cv2.imshow('img_src', img_src)
    cv2.imshow('img_5x5',img_5x5)
    cv2.imshow('img_10x10', img_11x11)
    cv2.imshow('img_20x20', img_27x27)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

高斯滤波器讲解(python实现)

(2)当设置sigma的值不为0的时候,随着sigma增加对图像的平滑效果

def GaussFilterSigmax(img_path='images/lenna_GaussNoise.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img_sigma_1=cv2.GaussianBlur(src=img,ksize=(5,5),sigmaX=1.0)
    img_sigma_5 = cv2.GaussianBlur(src=img, ksize=(11,11), sigmaX=5.0)
    img_sigma_10 = cv2.GaussianBlur(src=img, ksize=(27, 27), sigmaX=10.0)
    cv2.imshow('img_src', img_src)
    cv2.imshow('img_sigma_1',img_sigma_1)
    cv2.imshow('img_sigma_5', img_sigma_5)
    cv2.imshow('img_sigma_10', img_sigma_10)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

高斯滤波器讲解(python实现)
可以看到随着sigma的增加,对图像的平滑处理更加的明显。

https://blog.csdn.net/jiangyutongyangyi/article/details/105281262
https://blog.csdn.net/jgj123321/article/details/94448463文章来源地址https://www.toymoban.com/news/detail-439169.html

到了这里,关于高斯滤波器讲解(python实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪

    一、前言 在一幅图像中, 低频部分对应图像变化缓慢的部分即图像大致外观和轮廓。高频部分对应图像变换剧烈的部分即图像细节(注意图像的噪声属于高频部分) 。 低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频中的噪声。即 低通滤波的效

    2023年04月09日
    浏览(47)
  • 表面计量封闭型高斯滤波器(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 ISO 1661

    2024年02月10日
    浏览(41)
  • 使用高斯滤波器进行表面开放轮廓过滤研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 该滤波器

    2024年02月11日
    浏览(41)
  • 【图像处理:频率域平滑与锐化】理想滤波器,巴特沃思滤波器,高斯滤波器

    本文主要介绍频率域滤波器,此处的频率域是基于傅立叶变换得出。 在一幅图像中, 低频对应图像变化缓慢的部分 ,即图像大致外观和轮廓。 高频部分对应图像变化剧烈的部分即图像细节 。低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频

    2024年02月04日
    浏览(50)
  • opencv011 滤波器03 高斯滤波

    今天来学习一下高斯滤波!高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。  高斯函数是符合高斯

    2024年01月24日
    浏览(39)
  • 高斯滤波器

    最近读论文和看源码过程中经常看到高斯滤波器这个概念,论文中说的是利用高斯滤波器来进行去噪、使得特征变得光滑啥的,就不免有一个疑问,为啥高斯滤波器这么牛?同时高斯滤波器也可以看作一种特殊的卷积,那么研究一下高斯滤波器也将有助于我们理解CNN。 图像噪

    2024年02月08日
    浏览(46)
  • 卡尔曼滤波器原理讲解及其matlab实现

    目录 一:卡尔曼滤波器的信号模型[1-2] 二:其他方程及变量介绍 三:卡尔曼滤波器递推公式 四:matlab仿真[3] 参考文献: 引言:在进行一些信号处理的过程中,我们通常会采集到一些数据,但是实际测量到的数据是受到噪声干扰了之后的,故与真实的数据有一些偏差。因此

    2023年04月08日
    浏览(43)
  • Matlab图像处理- 高斯低通滤波器

      高斯低通滤波器 高斯低通滤波器是一种 更平滑的一种滤波器 ,高斯低通滤波器完全没有振铃现象,且边缘平滑。 示例代码 利用输入图像,构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 效果图片

    2024年02月09日
    浏览(42)
  • MATLAB/Python的编程教程: 匹配滤波器的实现

    注1:本文系“MATLAB/Python的编程教程”系列之一,致力于使用Python和Matlab实现特定的功能。本次要实现的功能是:匹配滤波器的实现。 匹配滤波器 ,这是一个在信号处理领域常见的主题,主要用于增强特定信号的检测性能,特别是在噪声环境中。在本教程中,我们将手把手教

    2024年02月09日
    浏览(23)
  • 图像处理:Gabor滤波器简介以及python实现

    在图像处理中,以Dennis Gabor命名的Gabor滤波器是一种用于纹理分析的线性滤波器,本质上是指在分析点或分析区域周围的局部区域内,分析图像中是否存在特定方向的特定频率内容。Gabor滤波器的频率和方向表示被许多当代视觉科学家认为与人类视觉系统的频率和方向表示相似

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包