https://blog.csdn.net/angelia_yue/article/details/105794344

https://www.jianshu.com/p/4eaf349de9e9

一. 高斯滤波

高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声。

高斯滤波和均值滤波一样,都是利用一个掩膜和图像进行卷积求解。不同之处在于:

  • 均值滤波器的模板系数都是相同的,为1。
  • 而高斯滤波器的模板系数,随着距离模板中心距离的增大,系数减小(服从二维高斯分布)。

所以,高斯滤波器相比于均值滤波器而言,对图像模糊程度较小,更能保持图像的整体细节。

二维高斯分布

我们不必纠结于系数,因为它只是一个常数!并不会影响互相之间的比例关系,而且最终都要进行归一化,所以在实际计算时我们忽略它而只计算后半部分 

其中(x,y)为掩膜内任一点的坐标(ux,uy)为掩膜内中心点的坐标,在图像处理中可认为是整数;σ 是标准差

例如:要产生一个3×3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。(x轴水平向右,y轴竖直向下)

模板在各个位置的坐标,如上图所示↑

这样,将各个位置的坐标带入到高斯函数中,得到的值就是滤波器的系数。

如果窗口模板的大小为 (2k+1)×(2k+1),则:

窗口模板中各个元素的计算公式

这样计算出来的模板有两种形式:小数和整数。

小数形式的模板,就是直接计算得到的值,没有经过任何的处理;

整数形式的模板,需要进行归一化处理,将模板左上角的值归一化为1。使用整数的模板时,需要在模板的前面加一个系数,系数为模板中元素和的倒数。

例如,标准差 =1.3 的 3*3 的整数形式的高斯滤波器如下:

σ 的意义及选取

通过上述的实现过程,不难发现,高斯滤波器模板的生成最重要的参数就是高斯分布的标准差σ。标准差代表着数据的离散程度,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。

高斯分布的概率分布密度图

可以看到:σ越小分布越瘦高,σ越大分布越矮胖。

由于图像的长宽可能不是滤波器大小的整数倍,因此我们需要在图像的边缘补0,这种方法叫做 zero padding 。


二. python实现高斯滤波

算法流程:①对图像进行zero padding ②根据高斯滤波器的核大小和标准差大小实现高斯滤波器 ③使用高斯滤波器对图像进行滤波(相乘再相加)④输出高斯滤波后的图像

代码如下:

import cv2import numpy as np# Gaussian filterdef gaussian_filter(img, K_size=3, sigma=1.3):if len(img.shape) == 3:H, W, C = img.shapeelse:img = np.expand_dims(img, axis=-1)H, W, C = img.shape## Zero paddingpad = K_size // 2out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)## prepare KernelK = np.zeros((K_size, K_size), dtype=np.float)for x in range(-pad, -pad + K_size):for y in range(-pad, -pad + K_size):K[y + pad, x + pad] = np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2)))K /= (2 * np.pi * sigma * sigma)K /= K.sum()tmp = out.copy()# filteringfor y in range(H):for x in range(W):for c in range(C):out[pad + y, pad + x, c] = np.sum(K * tmp[y: y + K_size, x: x + K_size, c])out = np.clip(out, 0, 255)out = out[pad: pad + H, pad: pad + W].astype(np.uint8)return out# Read imageimg = cv2.imread("../paojie.jpg")# Gaussian Filterout = gaussian_filter(img, K_size=3, sigma=1.3)# Save resultcv2.imwrite("out.jpg", out)cv2.imshow("result", out)cv2.waitKey(0)cv2.destroyAllWindows()

三. python程序输出结果:

高斯滤波后图像

原图

四. opencv函数 cv2.GaussianBlur(img,(3,3),1.3) 实现高斯滤波

其中,(3,3)为滤波器的大小;1.3为滤波器的标准差,如果标准差这个参数设置为0,则程序会根据滤波器大小自动计算得到标准差。

import cv2img=cv2.imread('../paojie.jpg')#(3, 3)表示高斯滤波器的长和宽都为3,1.3表示滤波器的标准差out=cv2.GaussianBlur(img,(3,3),1.3)cv2.imwrite('out.jpg',out)cv2.imshow('result',out)cv2.waitKey(0)cv2.destroyAllWindows()

五. opencv函数GaussianBlur滤波结果:

GaussianBlur 函数输出结果

六. matlab实现高斯滤波

% 高斯滤波器大小为5*5,标准差为10clear all;close all;clc;OriImage=imread('F:\image_process\paojie.jpg');    %读入图片sigma1 = 10;      %高斯正态分布标准差grayImg=rgb2gray(OriImage);    %转为灰度图像gausFilter = fspecial('gaussian',[5 5],sigma1);  %高斯滤波blur=imfilter(grayImg,gausFilter,'replicate');    %对任意类型数组或多维图像进行滤波imshow(blur);

七. matlab 高斯滤波输出结果

matlab 高斯滤波后图像

八. 参考内容:

https://www.jianshu.com/p/4eaf349de9e9

高斯滤波详解 附python和matlab高斯滤波代码相关推荐

  1. python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)

    之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...

  2. Linux用户、权限及改变文件所有者及文件所属组多例详解 附python代码

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) Linux用户.权 ...

  3. sklearn预测评估指标:混淆矩阵计算详解-附Python计算代码

    目录 前言 混淆矩阵 python代码 前言 很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵.准确率.精确率.召回率.F1 sc ...

  4. 【强化学习】Q-Learning算法详解以及Python实现【80行代码】

    强化学习 在文章正式开始前,请不要被强化学习的tag给吓到了,这也是我之前所遇到的一个困扰.觉得这个东西看上去很高级,需要一个完整的时间段,做详细的学习.相反,强化学习的很多算法是很符合直观思维的. ...

  5. 数学规划详解(附例题及部分Python实现)

    数学规划详解(附例题及Python实现) 例题来自于清风老师的数学建模课,个人认为讲的非常好,欢迎大家购买 一.概述 1.1 定义 数学规划是运筹学的一个分支,在约束条件下,按照目标函数来寻求计划管理 ...

  6. python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解

    文章目录 1 基于Numpy.convolve实现滑动平均滤波 1.1 滑动平均概念 1.2 滑动平均的数学原理 1.3 语法 1.4 滑动平均滤波示例 2 曲线平滑处理--Savitzky-Gola ...

  7. python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...

    Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...

  8. 一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现

    一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现 1 隐马尔科夫模型 1.1 HMM解决的问题 1.2 HMM模型的定义 1.2.1HMM的两个假设 1.2.2 HMM模型 1.3 HM ...

  9. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  10. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

最新文章

  1. ha-2:read-project-properties (default) on project
  2. mysql远程连接 Host * is not allowed to connect to this MySQL server
  3. oracle常用的监控,oracle常用性能监控及优化语句
  4. Android AlertDialog学习
  5. Boostrap技能点整理之【网格系统】
  6. 蓝桥杯java 大纲,2019 第十届蓝桥杯Java省赛B组个人总结
  7. java persistence.xml_java – 找不到persistence.xml
  8. python如何制作exe文件_Python制作exe文件简单流程
  9. mf4350d驱动下载linux,佳能 imageCLASS MF4350d 驱动程序下载-更新佳能软件(打印机)
  10. CocosCreator 基于Assembler实现的图片切割破碎效果及自定义遮罩
  11. 用elasticsearch和kibana 进行简单的实时数据报表分析
  12. 跨期套利的四大核心逻辑
  13. Airtest双11领喵币代码
  14. Python应用之批量打水印
  15. 联想小新 Air 13 (Pro) 6,7代笔记本安装Win7系统
  16. mac 设置阿里企业邮箱
  17. Matplotlib——饼图pie()函数
  18. 滴滴一下,小程序专车来了
  19. Github十大深度学习项目
  20. ffmpeg视频转动图gif和Webp

热门文章

  1. java之继承 封装 多态
  2. php mysql计数器代码一例
  3. 创业经验谈(转自:ouravr.com)
  4. 流媒体服务器分发RTSP视频流并发压力测试
  5. 计量经济学计算机答案第一章,计量经济学计算机作业
  6. 比较全面的OA系统需求分析
  7. 计算机类毕业论文中期检查,计算机类毕业论文中期检查表
  8. 局域网计算机名和ip扫描工具,局域网IP扫描器(Advanced IP Scanner)
  9. 服务器上不存在该种子文件,风行为什么点击种子链接总会弹出“找不到文件关联或无效的菜单句柄”...
  10. 拆分器控件Splitcontainer