高斯滤波详解 附python和matlab高斯滤波代码
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滤波结果:
六. 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 高斯滤波输出结果
八. 参考内容:
https://www.jianshu.com/p/4eaf349de9e9
高斯滤波详解 附python和matlab高斯滤波代码相关推荐
- python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)
之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...
- Linux用户、权限及改变文件所有者及文件所属组多例详解 附python代码
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) Linux用户.权 ...
- sklearn预测评估指标:混淆矩阵计算详解-附Python计算代码
目录 前言 混淆矩阵 python代码 前言 很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵.准确率.精确率.召回率.F1 sc ...
- 【强化学习】Q-Learning算法详解以及Python实现【80行代码】
强化学习 在文章正式开始前,请不要被强化学习的tag给吓到了,这也是我之前所遇到的一个困扰.觉得这个东西看上去很高级,需要一个完整的时间段,做详细的学习.相反,强化学习的很多算法是很符合直观思维的. ...
- 数学规划详解(附例题及部分Python实现)
数学规划详解(附例题及Python实现) 例题来自于清风老师的数学建模课,个人认为讲的非常好,欢迎大家购买 一.概述 1.1 定义 数学规划是运筹学的一个分支,在约束条件下,按照目标函数来寻求计划管理 ...
- python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解
文章目录 1 基于Numpy.convolve实现滑动平均滤波 1.1 滑动平均概念 1.2 滑动平均的数学原理 1.3 语法 1.4 滑动平均滤波示例 2 曲线平滑处理--Savitzky-Gola ...
- python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...
Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...
- 一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现
一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现 1 隐马尔科夫模型 1.1 HMM解决的问题 1.2 HMM模型的定义 1.2.1HMM的两个假设 1.2.2 HMM模型 1.3 HM ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
- 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...
详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网 浏览: 次 日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...
最新文章
- ha-2:read-project-properties (default) on project
- mysql远程连接 Host * is not allowed to connect to this MySQL server
- oracle常用的监控,oracle常用性能监控及优化语句
- Android AlertDialog学习
- Boostrap技能点整理之【网格系统】
- 蓝桥杯java 大纲,2019 第十届蓝桥杯Java省赛B组个人总结
- java persistence.xml_java – 找不到persistence.xml
- python如何制作exe文件_Python制作exe文件简单流程
- mf4350d驱动下载linux,佳能 imageCLASS MF4350d 驱动程序下载-更新佳能软件(打印机)
- CocosCreator 基于Assembler实现的图片切割破碎效果及自定义遮罩
- 用elasticsearch和kibana 进行简单的实时数据报表分析
- 跨期套利的四大核心逻辑
- Airtest双11领喵币代码
- Python应用之批量打水印
- 联想小新 Air 13 (Pro) 6,7代笔记本安装Win7系统
- mac 设置阿里企业邮箱
- Matplotlib——饼图pie()函数
- 滴滴一下,小程序专车来了
- Github十大深度学习项目
- ffmpeg视频转动图gif和Webp
热门文章
- java之继承 封装 多态
- php mysql计数器代码一例
- 创业经验谈(转自:ouravr.com)
- 流媒体服务器分发RTSP视频流并发压力测试
- 计量经济学计算机答案第一章,计量经济学计算机作业
- 比较全面的OA系统需求分析
- 计算机类毕业论文中期检查,计算机类毕业论文中期检查表
- 局域网计算机名和ip扫描工具,局域网IP扫描器(Advanced IP Scanner)
- 服务器上不存在该种子文件,风行为什么点击种子链接总会弹出“找不到文件关联或无效的菜单句柄”...
- 拆分器控件Splitcontainer