【计算机视觉】SIFT中LoG和DoG比较

在实际计算时,三种方法计算的金字塔组数noctaves,尺度空间坐标σ,以及每组金字塔内的层数S是一样的。同时,假设图像为640*480的标准图像。

金字塔层数:

其中o_min = 0,对于分辨率为640*480的图像N=5。

每组金字塔内图像数:
S=3,即在做极值检测时使用金子塔内中间3张图像。
对于LoG每组金字塔内有S+2张图像(S=-1,0,1,2,3),需要做S+1次高斯模糊操作(后一张图像由前一张做高斯模糊得到);而DoG每组金字塔有S+3张高斯图像,得到S+2张DoG图像。
尺度空间系数:

其中,S表示每组金字塔内图像层数,n为当前高斯层数,取0-4。DoG需要5个尺度系数得到6张GSS图像,而LoG只需要前4个尺度系数得到5张图像。

LoG

高斯核使用正太分布(高斯函数)计算模糊模版,N维空间正太分布方程为:

于是,二维高斯模板上的距离中心点为(x,y)的元素对应高斯计算公式为:

 

规范化的高斯拉普拉斯图像为

 

最终构造LoG金字塔有5层,每层有S+2=5张图像,每层金字塔内每张图像尺度是前一张的k倍,即构成的连续尺度序列:

其中o为当前金字塔层数,n为在当前金字塔层中图像张数。
由于卷积计算性质:

在计算时,通过对前一张图像做尺度系数为的卷积操作,可以减少卷积计算次数。故在金字塔每层内的S+2张图像,需要S+1次卷积操作,每次LoG核的尺度系数为:

图1. LoG金字塔示意图。 左侧为图像尺度空间系数,红色矩形框为实际参与比较的空间系数,右侧为在上一张图像做LoG卷积操作的尺度系数

DoG

由于LoG与Gauss核具有如下关系:

即,

因此,LoG算子可以用高斯差分算子DoG(Difference of Guassians)表示。

 

于是通过高斯金字塔每层内相邻两张图像相减可以得到DoG金字塔。对于最后需要S张图像寻找极值点,需要S+2张DoG图像,S+3张高斯图像。具体关系如图2.所示。

图 2. 由高斯金字塔得到DoG金字塔及其对应的尺度空间系数示意图。

LoG & DoG

一个直观的比较结果,使用分别计算LoG和DoG,得到:

可以看到,LoG比DoG明显需要更多的加法运算和乘法运算。虽然DoG需要在每层金字塔多做一次高斯操作(即为了得到S+2张DoG图需要S+3张高斯模糊图),但通过减法取代LoG核的计算过程,显著减少了运算次数,大大节省了运算时间。

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

【计算机视觉】SIFT中LoG和DoG比较,布布扣,bubuko.com

时间: 2024-12-22 20:19:48

【计算机视觉】SIFT中LoG和DoG比较的相关文章

LoadRunner中log的使用总结

LoadRunner中log的使用总结 1.log的设置方式. 在 runtime setting中可以设置log的生成方式: 默认的log方式: Enable logging选中,log option是Send messages only when an error occurs. 可以修改日志的方式: Always send messages(这种方式会一直打印输出日志,不仅在错误时) standard log——记录所有的请求反馈的日志,包括successful和fail的日志. Exte

mysql中log

mysql的主从模式配置 1.改主库配置文件: [mysqld] log=c:/a.log log-bin=mysql-bin server-id=1 2.授权,导数据: grant replication slave on *.* TO 'replication'@'192.168.234.123' identified by 'replication'; mysqldump --master-data=2 --single-transaction -uroot -p --all-databa

linux中log文件夹各个log文件内容

/var/log/messages - 包括整体系统信息,其中也包含系统启动期间的日志.此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中. /var/log/dmesg - 包含内核缓冲信息(kernel ring buffer).在系统启动时,会在屏幕上显示许多与硬件有关的信息.可以用dmesg查看它们. /var/log/auth.log - 包含系统授权信息,包括用户登录和使用的权限机制等. /var/log/boot.log

Android中log使用方法

private static final String ACTIVITY_TAG="MainActivity"; Log.v(MainActivity.ACTIVITY_TAG, "This is Verbose.%d");        Log.d(MainActivity.ACTIVITY_TAG, "This is Debug.");        Log.i(MainActivity.ACTIVITY_TAG, "This is

android 项目中log信息的正确处理

我们在做项目中,调试程序的时候一般是debug或者打log,特别是看一些json数据之类的,都喜欢打log看看,但是在项目上线时log信息一定不能被打印出来,大家可以平时下载一些做的烂的app,连接eclipse有时候都可以看到一些请求的url或者返回的数据,这要是碰到一些技术好的人,是吧 干些啥事,你懂的,下面写一个log类,平时在项目中用到的,就是一个工具类, public class LogUitl { private static final boolean IS_OPEN = true

openstack 中 log模块分析

1 . 所在模块,一般在openstack/common/log.py,其实最主要的还是调用了python中的logging模块: 入口函数在 def setup(product_name, version='unknown'):     """Setup logging."""     if CONF.log_config_append:         _load_log_config(CONF.log_config_append)    

IIS中Log无法生成解析

1. 来源: 最近,给客户作了一次服务器更新. 随后一周,客户因操作失误,需要调查不当操作,因此得检查系统的Log文件,发现自从发布后,再也没有看到新生成的Log文件. 2. 分析过程: 2.1 第一时间,对Log文件的属性进行了调查.简单右键点击属性,将读取专用属性的Check栏取消,并确认.然后进行调试执行.发现没有任何实际变化. 2.2 问题再现:随后,在本地环境中测试,没有任何问题,Log顺利生成.开发环境中发布测试(开发环境内(同一台系统)测试),也没有问题. 2.3 再编译:再往后,

android 中Log - 简单使用

例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 LogCat,通过'Add a new logcat filter'创建一个过滤器,filter-name为任意,'by log tag'的值与在java代码中的Log.d(String tag, String message)的参数中的tag一致.运行即可看到message信息.

DPDK中Log的使用方法

本文谢绝转载,如有需要,请以链接的方式引用. 注:本文中的代码为git库中的dpdk-2.0.0-rc1,对应Linux平台. 1 log简介 dpdk中通过log系统记录相关的日志信息,每一条日志除日志内容外,还有两个附加信息,log级别和log类型.开发人员可根据级别和类型对日志信息进行过滤,只记录 必要的日志. 1.1 log级别 根据日志信息的优先级高低,dpdk将日志信息分为8个级别,其中RTE_LOG_DEBUG的值为8,这是日志的最高级别,也就是说记录的日志信息最多:相应的,RTE