高斯模糊的算法(高斯权重)

本文转自:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

通常,图像处理软件会提供”模糊”(blur)滤镜,使图片产生模糊的效果。
这里写图片描述
“模糊”的算法有很多种,其中有一种叫做”高斯模糊“(Gaussian Blur)。它将正态分布(又名”高斯分布”)用于图像处理。
这里写图片描述
本文介绍”高斯模糊”的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

一、高斯模糊的原理

所谓”模糊”,可以理解成每一个像素都取周边像素的平均值。
这里写图片描述
上图中,2是中间点,周边点都是1。
这里写图片描述
“中间点”取”周围点”的平均值,就会变成1。在数值上,这是一种”平滑化”。在图形上,就相当于产生”模糊”效果,”中间点”失去细节。
这里写图片描述
显然,计算平均值时,取值范围越大,”模糊效果”越强烈。
这里写图片描述
上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。
接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?
如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

二、正态分布的权重

正态分布显然是一种可取的权重分配模式。
这里写图片描述
在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将”中心点”作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

三、高斯函数

上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。
这里写图片描述
正态分布的密度函数叫做”高斯函数”(Gaussian function)。它的一维形式是:
这里写图片描述
其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。
这里写图片描述
根据一维高斯函数,可以推导得到二维高斯函数:
这里写图片描述
有了这个函数 ,就可以计算每个点的权重了。

四、权重矩阵

假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
这里写图片描述
更远的点以此类推。
为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:
这里写图片描述
这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。
这里写图片描述

五、计算高斯模糊

有了权重矩阵,就可以计算高斯模糊的值了。
假设现有9个像素点,灰度值(0-255)如下:
这里写图片描述
每个点乘以自己的权重值:
这里写图片描述
得到
这里写图片描述
将这9个值加起来,就是中心点的高斯模糊的值。
对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

六、边界点的处理

如果一个点处于边界,周边没有足够的点,怎么办?
一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

七、参考文献

  • How to program a Gaussian Blur without using 3rd party libraries

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

序列化流与反序列化流

序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。 1 对象序列化流Objec…

图像相似性搜索的原理

本文转自: 相似图片搜索的原理 相似图片搜索的原理(二) http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html http://blog.s…

关于无效份额 和 拒绝份额

找到一个份额: 显卡每计算出满足要求的一个结果时是一个FOUND SHARE(找到一个份额); 无效份额: 每找到一个份额时内核会将计算结果发给矿池,有些内核会在将结果发给矿池时(之前、之后或同时&…

灰度共生矩阵(GLCM)并计算能量、熵、惯性矩、相关性(matlab)(待总结)

关于灰度共生矩阵的介绍可参考 http://blog.csdn.net/chuminnan2010/article/details/22035751 http://blog.csdn.net/xuezhisd/article/details/8908824 http://blog.csdn.net/xuexiang0704/article/details/8713204 http://cn.mathworks.com/help/images/ref/imlincomb.h…

你多久更新一次简历,决定了你的收入多久能提升

提到更新简历,或许大家第一时间就想到换工作,因为只有在换工作时才会更新。一般程序员大概1年半到2年跳槽一次,也就是说最多2年会更新一次。 更新简历是在其中更新自己的技术和各种能拿得出手的亮点,所以从这意义上来讲…

文件重命名批量处理(Matlab)

第一种方法:eval 方法 该方法未对文件进行任何处理,直接重命名。文件不损失任何信息。 tic clear; close all; % edited by cmwang,if any problem,please reference the website %http://blog.csdn.net/jiandanjinxin/article/details/51513598%------…

React-router总结

版本 v3和v4有一些差距&#xff1a; https://blog.csdn.net/qq_35484341/article/details/80500237 以下的总结&#xff0c;都是基于V4的 官方文档&#xff1a;https://reacttraining.com/react-router/web/guides/quick-start 核心组件和用法 <BrowserRouter/> <H…

机器学习之 weka学习(一)weka介绍,安装和配置环境变量

本部分详情可查看博客http://blog.csdn.net/u011067360/article/details/20844443 数据挖掘开源软件&#xff1a;WEKA基础教程 Weka简介&#xff1a; Weka是由新西兰怀卡托大学开发的智能分析系统&#xff08;Waikato Environment for Knowledge Analysis&#xff09; 。在怀…

第一章:线性空间和线性变换

转载于:https://www.cnblogs.com/invisible2/p/11514817.html

机器学习之 weka学习(二)算法说明

本文转自&#xff1a;http://blog.csdn.net/mm_bit/article/details/47405433 weka中的各算法说明 1) 数据输入和输出 WOW()&#xff1a;查看Weka函数的参数。 Weka_control()&#xff1a;设置Weka函数的参数。 read.arff()&#xff1a;读Weka Attribute-Relation File Forma…

TypeScript泛型

泛型的概念 指不预先确定的数据类型&#xff0c;具体的类型要在使用的时候才能确定。咋一听&#xff0c;是不是觉得JavaScript本身就是这样&#xff1f;这是由于理解有误。前面说“在使用的时候确定”&#xff0c;而非在程序执行的时候确定。 泛型函数 现在有个需求&#xff1a…

TypeScript类型检查机制

类型推断 指不需要指定变量的类型&#xff0c;TS编译器可以根据某些规则自动推断出类型。 什么时候会有类型推断&#xff1f; 声明变量时没有指定类型函数默认参数函数返回值......let a; // 这时自动推断为any类型 let b 1; // 推断为number类型 let c []; // 推断为由any类…

机器学习之 weka学习(三)

本文转自&#xff1a;http://blog.csdn.net/qiao1245/article/category/6115745 Weka教程笔记 http://blog.csdn.net/qiao1245/article/category/6115745 使用Weka进行数据挖掘&#xff08;Weka教程二&#xff09;Weka数据之ARFF与多文件格式转换 http://blog.csdn.net/qiao…

机器学习之 weka学习(四)

本文转自&#xff1a; http://blog.csdn.net/lantian0802/article/details/8875874 http://blog.csdn.net/lkj345/article/details/50152055 点击最上方的Classify按钮&#xff0c;选择Logistic&#xff08;逻辑回归&#xff09;分类方法&#xff0c;在Test options中选择…

TypeScript模块系统、命名空间、声明合并

命名空间 命名空间能有效避免全局污染。在ES6引入模块之后&#xff0c;命名空间就较少被提及了。如果使用了全局的类库&#xff0c;命名空间仍是一个好的解决方案。 namespace Shape{const pi Math.PI;// 使用export关键字导出&#xff0c;可以在全局空间内可见export functio…

机器学习之 weka学习(五)示例用法

WEKA 开发学习 &#xff1a;源码法分析 http://www.360doc.com/userhome.aspx?userid13256259&cid11# 用 WEKA 进行数据挖掘 http://www.ibm.com/developerworks/cn/opensource/os-weka1/WEKA使用教程 http://blog.csdn.net/yangliuy/article/details/7589306 初试w…

如何在TypeScript中使用JS类库

使用流程 1.首先要清除类库是什么类型&#xff0c;不同的类库有不同的使用方式 2.寻找声明文件 JS类库一般有三类&#xff1a;全局类库、模块类库、UMD库。例如&#xff0c;jQuery是一种UMD库&#xff0c;既可以通过全局方式来引用&#xff0c;也可以模块化引用。 声明文件 当我…

机器学习之 weka学习(六)最大内存

Weka 常见问题处理&#xff1a; weka如何安装支持向量机工具包 方法一、打开 weka&#xff0c;工具栏的Tools–>Package manager,可在里面添加需要的工具包。 方法二、下载 libsvm-**.jar 包&#xff0c;开源的。解压文件夹&#xff0c;里面……\libsvm-3.19\java ,下面有…

使用Jest进行单元测试

Jest是Facebook推出的一款单元测试工具。 安装 npm install --save-dev jest ts-jest types/jest 在package.json中添加脚本&#xff1a; “test”: "jest" 生成Jest配置文件&#xff08;生成jest.config.js&#xff09; npx ts-jest config:init 使用 先简单编写一个…

国外十大高校人工智能实验室及其代表性人物一览

本文转自&#xff1a; http://toutiao.com/a6293031494186107137/?tt_frommobile_qq&utm_campaignclient_share&appnews_article&utm_sourcemobile_qq&iid4325464459&utm_mediumtoutiao_android 高校建立的实验室与大公司有所不同&#xff0c;其研究项目…