高斯滤波的快速实现

2023-11-11

http://www.cnblogs.com/ImageVision/archive/2012/06/11/2545555.html

二維高斯函數具有旋轉對稱性,處理後不會對哪一個方向上的邊緣進行了過多的濾波,因此相對其他濾波器,具有無法比擬的優越性。但是傳統Gauss濾波隨著圖像尺寸的增加,運算復雜度呈平方上漲,因此需要對其優化改進。下面,分別介紹傳統型,分解型和遞歸迭代型三種實現方法。

  

1 傳統型

  Gauss濾波首先需要構建一個Gauss濾波核,公式為:

Matlab實現代碼:

?
dSigma =0.8;
fK1=1.0/(2*dSigma*dSigma);
fK2=fK1/pi;
iSize = 5;
step = floor (iSize/2 + 0.5);
for  i = 1 : iSize
     x=i-step;
     fTemp=fK2* exp (-x*x*fK1);
     for  j = 1 : iSize
         y=j-step;
         model(x+step,y+step)=fTemp* exp (-y*y*fK1);
     end
end
dSum = sum(sum(model));
model = model/dSum;                     %Gauss核數值歸一化

  

圖1 Gauss濾波核(5*5大小)

  接下來就是將輸入圖像和濾波核進行卷積操作。其實質就是對原始圖像進行加權求和,把這個「和」賦給中心像素。對於一個2048*2048的圖像,需要進行104734756次乘法運算,和104734756次加法運算,運算復雜度是很高的。

2 分解型

  

  我們可以把一個二維Gauss核分解為兩個一維高斯核,然後先對行做一次一維卷積,再對這個卷積結果做一次一維列卷積,得到的結果完全一模一樣,而開銷會小很多。

一維高斯核函數:

  Matlab代碼實現:

?
dSigma =0.8;
fK1=1.0/(2*dSigma*dSigma);
fK2=fK1/pi;
iSize = 5;
step = floor (iSize/2 + 0.5);
for  i = 1 : iSize
     x=i-step;
     fTemp=fK2* exp (-x*x*fK1);
     model(1,x+step) = fTemp;
end
dM = sum(model);
model = model / dM;

  

圖2 一維高斯濾波核(1*5大小)

  一維卷積原理和二維卷積一樣,只不過我們只需要將同一行或同一列上的數據,按位置一一加權求和,再把「和」賦給中心元素。

  對於一個2048*2048的圖像,需要進行41918464次乘法運算,和41918464次加法運算。相比傳統運算量,只是前者的1/2.4985。如果遇到頻繁計算Gauss濾波的算法,後者明顯比前者速度快很多。

3 遞歸迭代型

  第二種方法較第一種方法,雖然有了較大改善,但是任然復雜度較高。這裡再介紹一種更快速的逼近Gauss濾波方法。

     具體步驟分為兩步:首先對圖像做一次前向濾波,其次,對圖像再做一次後向濾波。

  Forward:

  Backward:

參考資料:Recursive implementation of the Gaussian filter。 Ian T. Young,1995

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高斯滤波的快速实现 的相关文章

  • 曲线拟合

    问题解决 给你一个二维的序列 你如何用多项式进行曲线拟合 一阶直线拟合 二阶抛物线拟合 并非阶次越高越好 看拟合情况而定 曲线拟合 clear clc syms s 声明一个符号变量 详细参考 https jingyan baidu com
  • C++ 模板函数、模板类:如果没有被使用就不会被实例化

    C 中如果一个模板函数没有使用过 那么其局部静态变量都不会被实例化 class A public A edward print A ctor template
  • C++类的定义要注意最后的分号不要丢了

    ifndef TEST H define TEST H class Test public 定义成内联的有两种方式 int add int a int b 假设我们要将该函数定义为内联的 声明的时候可以不给出inline关键字 可以在实现的
  • 在Java基础上对比学习C#基本语法

    文章目录 一 引包 二 构造函数 三 析构函数 四 C 数据类型 五 加框 boxing 和消框 unboxing 六 运算符 七 控制语句 八 类的继承 九 方法参数的种类 十 操作符重载 十一 this关键字 十二 类的多态 十三 抽象
  • c# 本机IP修改

    校园网总是要修改ip 去实验室也要修改ip 想着编一个IP修改的软件比较方便 我用的是 using System Management 报错的话记得在项目的引用中添加 右击 引用 添加引用 System Management private
  • MATLAB三维散点图的绘制(scatter3、plot3)

    1 函数scatter3 用法 scatter3 x y z c c 为颜色 需和x y z长度相同 例子 x 4229042 63 4230585 02 4231384 96 4231773 63 4233028 58 4233296 7
  • 【Matlab学习笔记】【函数学习】nargin 参数

    转自 http baike haosou com doc 6930505 7152746 html 在matlab中定义一个函数时 在函数体内部 nargin指出了输入参数的个数 特别是在利用了可变参数列表的函数中 用nargin获取输入参
  • 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)

    在启动定时器后 就需要添加定时器的消息处理函数 基本的步骤就是 在VS中 用户界面设计右击打开Class Wizard 切换到Message选项卡 然后找到WM TIMER这个message 双击右边的OnTimer句柄 然后进入回调函数的
  • 字符串旋转(C#)

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 请定义一个函数实现字符串左旋转操作的功能 比如 输入字符串 abcdefg 和数字2 该函数将返回左旋转两位得到的结果 cdefgab 来源 力扣 LeetCode 链接 ht
  • 【Matlab学习笔记】【函数学习】size参数

    size A 函数是用来求矩阵的大小的 你必须首先弄清楚A到底是什么 大小是多少 比如说一个A是一个3 4的二维矩阵 1 size A 直接显示出A大小 输出 ans 3 4 2 s size A 返回一个行向量s s的第一个元素是矩阵的行
  • 高内聚与低耦合实现小记

    总所周知 实际软件开发中要实现高内聚 低耦合的设计原则 c语言和c 不同 c语言面向过程 c 面向对象 真正的项目中 要对业务升级 原来的业务函数需要保留 要保证老的功能继续维持 不能直接删除 这时候 c语言面向过程 通常使用回调的方法 c
  • MFC(VS2010)编程实例之一(Edit Control控件)

    Edit Control是在MFC对话框中最频繁的使用的控件之一 获取Edit Control的值与赋值是常见的操作 Edit Control对应的MFC类为CEdit类 而CEdit是继承自CWnd类的 所以也继承了来自CWnd类的Get
  • matlab-lsqcurvefit函数

    lsqcurvefit函数 least squares curve fitting 用于最小二乘法求解非线性曲线拟合问题 即已知输入向量xdata和输出向量ydata 并且知道输入与输出的函数关系为ydata F x xdata 但不知道系
  • 推荐!国外程序员整理的 C++ 资源大全

    关于 C 框架 库和资源的一些汇总列表 由 fffaraz 发起和维护 内容包括 标准库 Web应用框架 人工智能 数据库 图片处理 机器学习 日志 代码分析等 标准库 C 标准库 包括了STL容器 算法和函数等 C Standard Li
  • C#比较运算符及解析

    文章目录 博主写作不容易 孩子需要您鼓励 万水千山总是情 先点个赞行不行 比较运算符得出的结果是逻辑型 bool 即 True 或 False 比较运算符又称关系运算符 我们可以把它理解为一种判断 判断的结果是真或者是假 关系表达式的返回值
  • 在VS2010进行MFC编程设置字符集的问题(使用多字节字符集引起错误)

    1 error C2664 WideCharToMultiByte 不能将参数 3 从 CString 转换为 LPC WSTR 参数3是m edit 2 error C2039 GetWindowTextW 不是 CComboBox 的成
  • 【VS2010学习笔记】【异常处理】general error c1010070: Failed to load and parse the manifest.

    在VS2010编程中 有时编译会遇到这样的错误 general error c1010070 Failed to load and parse the manifest 解决方法就是在解决方案中将后缀名为manifest的文件删除 再编译即
  • C++模板实参类型推导

    1 什么是模板 C 特性之一 批量生成代码的手段 2 模板有什么应用 1 泛型编程 例如 std vector 2 模板元编程 利用模板的特化等特性 在编译期计算出结果 例如 3 模板实参类型推导 虽然模板这么牛逼 但是今天我们不讲上述两个
  • 论文中图片加方框 matlab代码

    转自 http blog csdn net majinlei121 article details 52334171 加方框函数 cpp view plain copy function I rgb DrawRectangle I Left
  • 【C++编程技巧】根据字符串中的指定字符作为分界将字符串拆分

    在C 中可以用split 函数方便的实现字符串的拆分 在C 中没有类似的函数 用strtok函数进行完成字符串分割 原型 char strtok char str const char delim 功能 分解字符串为一组字符串 参数说明 s

随机推荐

  • union struct的内存分配方式及其sizeof大小

    经验 1 int main union zcl double i char k 15 char c struct date int cat 元类型4 zcl cow 元类型8 zcl里面的i double类型 struct dat char
  • 有各组方差怎么算组间平方和_讲讲统计科学里的方差分析

    上一篇讲了假设检验 这一篇讲讲方差分析 1 背景 假如你们现在针对用户提出了三种提高客单价的策略A B C 现在想看一下这三种策略最后对提高客单价的效果有什么不同 那我们怎么才能知道这三种策略效果有什么不同 最简单的方法就是做一个实验 我们
  • react 通过生命周期优化组件性能

    已经对React生命周期有了认识 那如何利用它提高组件的性能那 通过shouldComponentUpdate函数 改善React组件性能的例子 小姐姐组件存在性能问题 是的 小姐姐组件已经写的很熟悉了 但是它有一个性能问题 那就是子组件X
  • MySQL5.6主从复制的配置(CentOS-6.6+MySQL-5.6)(二)

    原文地址 http my oschina net wushuicheng blog 652680 MySQL5 6主从复制的配置 CentOS 6 6 MySQL 5 6 作者 吴水成 出自 龙果学院 基于Dubbo的分布式系统架构视频教程
  • Flume 报出异常org/apache/hadoop/io/SequenceFile$CompressionType

    异常 Failed to start agent because dependencies were not found in classpath Error follows java lang NoClassDefFoundError o
  • sse指令

    mm add ss mm add ps
  • HBase数据模型、RowKey、Column Family(列族)和qualifier(列)、Timestamp时间戳、Cell单元格、读写流程、HLog(WAL log)...

    目录 HBase数据模型 RowKey Column Family 列族 和qualifier 列 Timestamp时间戳 Cell单元格 读写流程 HLog WAL log HBase数据模型 HRegion是HBase中分布式存储和负
  • ADB调试--详细教程(附华为手机无法显示设备解决方法)

    终端打开开发者模式 用数据线连接电脑 然后按照下面的步骤操作 1 开启开发者选项 设置 gt 关于设备 gt 版本号 连续点击5次 2 打开USB调试 在开发者选项中 找到USB调试 将此打开 3 cmd进入命令行 进入含有adb exe的
  • zabbix 5系列之snmp监控详解

    更多精彩Zabbix文章 技术交流 免费技术培训加微号NateIT 免费获取zabbix安装 配置 优化技术培训视频 官网 http ywzs hanyunintel com 首先 谢谢原作者 此文为转载的文章 现将原地址贴出如下zabbi
  • 服务器查看不到集群信息,查看服务器集群资源

    查看服务器集群资源 内容精选 换一换 区块链服务状态为 异常 排查项一 区块链依赖的集群 服务器 存储等资源是否正常 排查项二 云服务器节点资源规格不足 排查项一 区块链依赖的集群 服务器 存储等资源是否正常 CCE集群状态排查 登录CCE
  • 10.4 a.m.小结

    T1 问题 A Prime Distance 题目描述 给定两个整数 L R 求闭区间 L R 中相邻两个质数差值最小的数对与差值最大的数对 当存在多个时 输出靠前的素数对 输入 多组数据 每行两个数 L R 输出 详见输出样例 样例输入
  • ubuntu查看内存占用和查看cpu使用情况的2种方法

    简易方法1 top法 并且摁下数字1 1 使用terminal 输入命令行 top 2 如果希望看到cpu核数 并且知道相关占用率等情况信息 此时按下数字 1 即可 3 摁下 q 退出 快捷方法2 使用htop 2 安装htop sudo
  • 代理IP的高匿名,匿名和透明的区别

    如果从隐藏使用代理用户的级别上划分 代理可以分为三种 即高度匿名代理 普通匿名代理和透明代理 1 高度匿名代理不改变客户机的请求 这样在服务器看来就像有个真正的客户浏览器在访问它 这时客户的真实IP是隐藏的 服务器端不会认为我们使用了代理
  • Latex 中插入 Matlab 代码

    这篇文章将介绍如何在 Latex 排版过程中添加 Matlab 代码 功能效果 主要有如下排版功能 语法高亮 自动添加边框 自动添加行号 先上图 大家感受一下效果 而实现这些只需要一行代码加一个包 插入代码块 usepackage list
  • Unity Hub导入项目“静夜思”报错error CS0619: ‘GUIText‘ is obsolete: ‘GUIText has been removed. Use UI.Text inst

    报错 问题 按照控制台报错位置 找到Assets Standard Assets Utility FPSCounter cs文件 根据提示 GUIText is obsolete GUIText has been removed Use U
  • RFID医药供应链管理系统解决方案——铨顺宏FUWIT

    1 社会背景 根据世界卫生组织的报告 全球假药比例已经超过10 中国医学会数据显示 我们每年至少有20万人死于假药与用药不当 国际上已经对医疗产品的跟踪十分重视 美国FDA已经通过立法 加强在药物运输 销售 访问 追溯体系的应用 目前医疗领
  • qt5+osg多线程的解决方案

    问题描述 Cannot make QOpenGLContext current in a different thread 解决思路 在主线程中将qt窗体中的QOpenglContext moveToThread到窗体线程中 这样窗体线程在
  • 知识存储-cypher查询语句基础(1)

    1 概述 我们在进行关系型数据库操作的时候使用sql 在使用其他数据库时使用sparsql 在操作neo4j时使用cypher语法 这是一种非常简单的查询语法 方便我们掌握 1 neo4j中的相关概念 节点 节点是图数据库中的一个基本元素
  • 安装neo4j出现的问题

    安装步骤 1 jdk安装 下载地址 https www oracle com java technologies javase downloads html jdk使用11以上版本 点击安装 设置环境变量 全部路径 bin 2 neo4j安
  • 高斯滤波的快速实现

    http www cnblogs com ImageVision archive 2012 06 11 2545555 html 二維高斯函數具有旋轉對稱性 處理後不會對哪一個方向上的邊緣進行了過多的濾波 因此相對其他濾波器 具有無法比擬的