特征提取算法(4)——LoG特征提取算法
目录
1、介绍
2、LoG原理
3、数学原理
4、模板性质
1、介绍
LoG(DoG是一阶边缘提取)是二阶拉普拉斯-高斯边缘提取算法,先高斯滤波然后拉普拉斯边缘提取。
Laplace算子对通过图像进行操作实现边缘检测的时,对离散点和噪声比较敏感。于是,首先对图像进行高斯卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测,就可以提高算子对噪声抗干扰能力, 这一个过程中高斯-拉普拉斯(Laplacian of Gaussian(LOG))边缘检测算子就诞生了。
2、LoG原理
底层是二阶微分算子,就是对原始图像求二次微分的边缘定位算法,使用二阶微分算子的时候,其边缘对应的响应是一个零交叉,而且能够判断出高灰度方向,但二阶微分对噪声的敏感度过高,需要先平滑预处理。
Marr和Hildreth【Marr和Hildreth,1980】证明了以下两个观点:
(1)灰度变化与图像尺寸没有关系,因此检测需要不同尺度的算子
(2)灰度的突然变化会在一阶导数中引起波峰和波谷,或者二阶导数中一起零交叉
所以可以提出一种能变换尺寸的(当时用的是标准Sobel等那些,固定尺寸的,当时Sobel还没有扩展),在各种大小的图像上都能起作用的,可以检测模糊的相对较大的边缘,也可以检测细小的锐度集中的精细细节,当然这种算子也必须对全图所有像素点其作用。Marr和Hildreth证明LoG算子是满足上述条件的最满意的算子。
3、数学原理
LoG算子∇2G就是对一个标准高斯函数(未归一化)进行二次偏微分:


LoG算子: ∇2G
标准高斯函数:G(x,y)
标准差:δ
零交叉出现在x2+y2=2δ2处LoG函数形状如图,也被叫做墨西哥草帽算子:
基于零交叉的方法找到由图像得到的二阶导数的零交叉点来定位边缘。




剖面图:

4、模板性质
(1)该模板对平坦区域应该无响应,所以算子内系数和应该为0,使用公式计算出来的结果不为零,需要整体上下平移模板
(2)LoG可以使用laplace算子和高斯模板进行卷积后求得,其等效于使用LoG大小和标准差的高斯平滑后得到laplace结果
(3)得到的结果要检测零交叉来定位边缘,因为噪声等原因,这里进行判断时可以使用阈值,也就是当出现零交叉的时候还要判断下正负值的差的绝对值是否满足阈值要求。
(4)LoG模板的大小和标准差的选择关系,遵循高斯分布的3δ原则,也就是当位置超过均值正负3δ以外的值很小,也就是说,LoG模板应该选择大于6δ的最小奇数作为模板大小,过大效果不会有提高反而增加计算量,过小会造成截断,无法得到正确结果。
特征提取算法(4)——LoG特征提取算法的更多相关文章
- 个性化排序算法实践(五)——DCN算法
wide&deep在个性化排序算法中是影响力比较大的工作了.wide部分是手动特征交叉(负责memorization),deep部分利用mlp来实现高阶特征交叉(负责generalizatio ...
- 底层算法系列:Paxos算法
关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Pax ...
- 总结下js排序算法和乱序算法
其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...
- 查找最小生成树:克鲁斯克尔算法(Kruskal)算法
一.算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.用来解决同样问题的还有Prim算法和Boruvka算法等.三种算法都是贪心算法的应用.和 ...
- 算法:Astar寻路算法改进,双向A*寻路算法
早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢 ...
- Atitit.软件中见算法 程序设计五大种类算法
Atitit.软件中见算法 程序设计五大种类算法 1. 算法的定义1 2. 算法的复杂度1 2.1. Algo cate2 3. 分治法2 4. 动态规划法2 5. 贪心算法3 6. 回溯法3 7. ...
- JVM内存管理------GC算法精解(复制算法与标记/整理算法)
本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算 ...
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO.LFU 1.FIFO算法 FIFO(First in First ...
- opencv3中的机器学习算法之:EM算法
不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注.相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计.也能得到每个样本对应的标注值,类似于kmea ...
- Floyd-Warshall算法,简称Floyd算法
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3). 使用条件&范围通常可以在任何图中使用,包括有向图.带负权边的图. Floyd-W ...
随机推荐
- 使用cython库对python代码进行动态编译达到加速效果及python第三方包的制作安装
1.测试代码:新建 fib.pyx # coding:utf-8 import matplotlib.pyplot as plt import numpy as np from sklearn.cl ...
- 关于Goroutine与Channel
关于Goroutine的原理 原理上的内容比较多,比如goroutine启动的时候要执行哪些相关的操作,一点一点的补充一下. channel的基本原理 channel是go语言中的特殊的机制,既可以同 ...
- 软技能-代码外的生存指南PDF下载
编程只是我们职业生涯中的一部分,我们还需要更多的其他技能 链接:https://pan.baidu.com/s/1d7z_7NCEFT2lsSWO1n-OuA 提取码:zj32 链接失效请留言
- [转帖]K8s集群安装--最新版 Kubernetes 1.14.1
K8s集群安装--最新版 Kubernetes 1.14.1 http://www.cnblogs.com/jieky/p/10679998.html 原作者写的比较简单 大略流程和跳转的多一些 改天 ...
- CentOS 7.6 RPM 方式安装Oracle19c 后 使用 systemd 的方式设置开机自动启动Oracle数据库
1. 方法简介: 使用systemd 来进行 oracle数据库的启动和关闭操作. 使用的脚本为 lsnrctl和dbstart 2. 修改事项. 需要先修改一下 oracle 的启动脚本配置: vi ...
- ES6生成器与迭代器
ES6迭代器的一个例子 function run(taskDef) { var task = taskDef(); var result = task.next(); // 递归执行迭代 functi ...
- phpStudy配置sql、oracle---博主摘录
引用 :https://www.cnblogs.com/myBlogInWork/p/8657125.html 由于工作需要,要用到php+oracle写个项目,故而有了以下内容: 本来以为php有默 ...
- idea 代码部分格式化
效果: 处理Idea使用ctrl+alt+L进行代码格式化时部分代码可以被忽略,不执行格式化功能(webstorm,phpstorm同理) 原因: 有时希望自己写的一些代码不被格式化,或者发现格式化后 ...
- nginx重新编译安装upload模块
由于php处理上传会出现超时,并且显示上传进度官方php不支持nginx+php,所以决定让nginx自己处理上传,我本地环境是mac上已经安装过nginx1.8.0,安装方式为brew,所以需要重新 ...
- Springboot 打jar包项目无法访问jsp问题解决方案
maven编译插件,请选择1.4.2.RELEASE版本,1.5.x的版本已经不再支持 pom.xml重要部分如下: <build> <resources> <resou ...