SIFT算法

介绍这个算法的网上的博客很多,这个百度一下就有很多篇,我写一下我的认识。

前面考虑的一个图像的特征点是角点,这边提出了,图像的特征点可以是一个斑点,就像

sf

明显的就是部分向日葵的原型就是一个特征,而这样的特征就是斑点。不过在谈这个斑点检测的时候,我们先说一下边缘检测,边缘检测中比较有名的是Canny算法,这个这边不说,主要引出斑点检测。我们看下面一副图

image

我们可以知道的对于一维的(我们画一条线),边缘点是横坐标为线的长度,纵坐标为,线上的每个点对应的像素值,则边缘点也就是像素突兀最大的那个点,也就是一阶导数的极大值点。

好,我们首先要给图像作一个预处理,高斯平滑,然后求一阶导数。

image

image

σ指的是当前尺度,这边就涉及到尺度的概念。而很多人都证明了高斯核是实现尺度变换的唯一核,这边证明没有看懂

一阶导数的极大值点:

image

其中,图像梯度向量:

image

梯度幅值表示边缘的强弱

image

梯度方向代表灰度变化最快的方向

image

我们再看一看一维的图,image

image

对于二阶求导使用拉普拉斯算子,这个就有点不太懂了,为什么它只是对x的二阶导+对y的二阶导,而没有其他项呢?

二阶导数的过零点:

image

拉普拉斯算子:

image

图如下:

image

而对于斑点,可以认为是两个相邻的边缘组成。然后采用高斯的二阶导数跟图像进行卷积。即

图像先进行高斯卷积(即高斯平滑)然后进行二阶求导

image

我们再看一下一维斑点的情况

image

斑点信号与高斯二阶导数卷积1的响应

image

发现尺寸为2的斑点,在卷积后响应值取得最大,且斑点尺寸正好等于高斯函数方差的2倍大小

但是发现高斯二阶导数随着方差的增大呈阶梯衰减现象,然后为了去除方差导致的衰减现象,对其进行了尺度规范化处理

image

为什么规范化处理就是这个样子,是实验得到的呢,还是证明得到,怎么个证明法?这边不是太懂

Lindeberg在文献《Scale-space theory: A basic tool for analysing structures at different scales》也指出尺度规范化的LoG算子具有真正的尺度不变性。没看得懂

LoG算子即(Laplacion of Gaussian)

image

尺度规范化的LoG算子

image

然后呢David G. Lowe 发现

image

根据差分公式

image

移项发现

image

由于常数k-1并不会影响极值点的位置,即关键点中心的位置。

于是David G. Lowe 引入了一种新的算子DoG(Difference of Gaussians)高斯差分算子。

因此对斑点检测不要用规范化的LoG算子进行计算,而是通过相邻尺度高斯平滑后图像相减,因此简化了计算。

转载于:https://www.cnblogs.com/fengbing/archive/2013/05/13/3075507.html

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

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

相关文章

(JAVA)超大整数运算

package com.book.lite;import java.math.BigInteger;/*** author zhangyu* date 2021年08月21日 4:27 下午* Biginterger类,超大数的四则运算*/ public class BigIntegerDemo {public static void main(String[] args) {methon_3();}public static BigInteger meth…

PHP中过滤数组中的元素

演示使用自定义函数删除数组中的偶数元素。 <?php function myfunc(&$arr){//自定义一个过滤函数$jcount($arr);for($i0;$i<$j;$i){if($arr[$i]%20)unset($arr[$i]);} }$arrarray(23,14,37,263,244,379,100,153,150);//定义一个数组 echo 数组进行过滤之前的信息&am…

(JAVA)超大小数运算

package com.book.lite;import java.math.BigDecimal;/*** author zhangyu* date 2021年08月21日 4:56* 双精度大数据运算* divide()除法运算。* public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) (被除数&#xff0c;保留位数&#xff0c;舍入方法…

(JAVA)格式化输出日期

1.使用子类SimpleDateFormet() 2.使用父类DateFormet package com.book.lite;import javafx.scene.input.DataFormat;import java.text.*; import java.util.Date;/*** author zhangyu* date 2021年08月21日 5:23 下午* Date 类&#xff1a;输出系统日期* 1.空参构造器* 2.传…

windows下使用MinGW+msys编译ffmpeg

本文参考了网络上的不少文章&#xff0c;但由于版本环境的问题参考文章并不能直接指导编译&#xff0c;本文吸收多方经验&#xff0c;并在自己多次编译实验的基础上写成&#xff0c;欢迎转载&#xff0c;请注名出处。 FFmpeg是在Linux平台下开发的&#xff0c;但它同样可以在…

(JAVA)Calender类

package com.book.lite;import sun.misc.ClassFileTransformer;import java.util.Calendar;/*** author zhangyu* date 2021年08月22日 4:22 下午* java.util.Calender类&#xff0c; 生活中的日历进行对象封装* 1.abstract Calender类* 2.使用子类GregorianCalendar类 数据类…

Schema evolution in Avro, Protocol Buffers and Thrift

http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html 当想要数据, 比如对象或其他类型的, 存到文件或是通过网络传输, 需要面对的问题是序列化问题 对于序列化, 当然各个语言都提供相应的包, 比如, Java serialization, Ruby’s ma…

(JAVA)获取对象

Student.java package cn.book.objectarr;/*** author zhangyu* date 2021年08月22日 6:57 下午*/ public class Student {private String name;private int age;public Student(){}public Student(String name,int age){this.age age;this.name name;}public String getName…

JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

转&#xff1a;http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码&#xff0c;也不会对这些 ASCII 标点符号进行编码&#xff1a; - _ . ! ~ * ( ) 。 //其他字符&#xff08;比如 &#xff1a;;/?:&$,# v…

(JAVA)CollectionDemo1

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月22日 10:19 下午* 使用集合添加add()* 使用集合移除&#xff0c;返回boolean值*/ public class CollectionDemo {public static void main(String[]…

林俊卿咽音练声法八个步骤(纯净版视频加图文)(转)

原文链接&#xff1a;http://zgwhyyj.blog.sohu.com/81794726.html 读原著一直是研究者提倡的正确获得原创资料及其精神方法的一种最佳方式!观察了“土豆”和“我乐”、“新浪”等网站中关于“林俊卿咽音练声法八个步骤”的视频&#xff0c;内容中穿插的“经历、荣誉、传人”等…

(JAVA)CollectionDemo2

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月23日 11:02 下午* Collection接口中&#xff0c;带有All的方法* removeAll,containsAll,addAll,retainAll* 返回值&#xff1a;调用者集合发生改变返…

(JAVA)CollectionDemo3

package cn.cast.collection;import com.sun.tools.jdi.EventSetImpl;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;/*** author zhangyu* date 2021年08月24日 11:40 下午* 获取Collectuon 接口有一个方法* Iterator iterator()* 返回…

VS 2012 找回消失的“创建单元测试”

日前&#xff0c;看到91哥的分享&#xff0c;聽說&#xff0c;建立單元測試的選單回來了!!! 得知這消息真的又驚又喜&#xff0c;馬上就照著以下步驟實作一次。 http://serena-yeoh.blogspot.tw/2013/02/visual-studio-2012-create-unit-test.html 不過在動手實作的時候&#x…

(JAVA)集合Collection3

package cn.cast.collection;/*** author zhangyu* date 2021年08月28日 4:12 下午* 使用集合存储自定义对象&#xff0c;并迭代* 在迭代器中&#xff0c;next()在运行中&#xff0c;不能添加对象&#xff0c;且不能多次使用*/ import cn.book.objectarr.Student;import java.u…

状态目标bfs+哈希表 + 三杯水

本篇文章是一篇关于状态目标的帖子 给出三个水杯&#xff0c;大小不一&#xff0c;并且只有最大的水杯的水是装满的&#xff0c;其余两个为空杯子。三个水杯之间互相倒水&#xff0c;并且水杯没有标识&#xff0c;只能根据给出的水杯体积来计算。当初要求你写出一个程序&#x…