Paper: Object Recognition from Scale-Invariant Features

Sorce: http://www.cs.ubc.ca/~lowe/papers/iccv99.pdf

SIFT 即Scale Invariant Feature Transfrom, 尺度不变变换,由David Lowe提出。是CV最著名也最常用的特征。在图像目标识别的应用中,常常要求图像的特征有很好的roboust即不容易受到平移,旋转,尺度缩放,光照,仿射的英雄。SIFT算子具有尺度,旋转不变性,并且具有部分光照,视角不变性。

一、SIFT算子概述

1.1 SIFT 算子的特征

1. 局部性:对occlusion 和 clutter 有较好的鲁棒性

2. 独特性:使用SIFT特征可以将独立的特征匹配到大量物体

3. 多量性:即使是小物体可以生成很多SIFT特征

4. 高效性:有很好的实时性

5. 可扩展性:可以和其他不同的特征结合,增强鲁棒性

1.2 SIFT算子检测步骤

1. 尺度空间和高斯金字塔的构建:尺度空间的构建是为了模拟图像的多尺度特征,就像人眼对不同远近的物体,有不同的大小。

2. 尺度空间的极值检测,确定关键点的位置:检索图像所有的空间,通过高斯微分函数的最大值或者最小值点来确定关键点的位置。

3. 去除不好的关键点:边缘和第对比度的区域都是不好的关键点,去除不好的描述子能够使得算法更加efficient和roboust。 可以使用Harris Corner Detector

4. 根据关键点领域内的梯度信息确定关键点的主方向,后续的计算都是针对这个方向进行的,确定关键点的方向,使得key points 具有 rotataion invariant特性。

5. 生成SIFT描述子:前面的的尺度空间的关键点方向使得keypoints 具有 scale and rotation invariant接下来就可以直接生成SIFT算子了。

二、 算法原理

1. 尺度空间和空间金字塔的构建

对于实际场景而言,物体都是以一定尺度呈现的,而图像汇总物体大小是固定的。尺度空间的构建就是为了在数字图像中呈现现实世界人对图像的多尺度感知——距离和模糊程度。这样可以提高算法对物体的识别准确度。为了实现这两个目的SIFT算法使用两个步骤:1)降采样构建高斯金字塔 2) 使用高斯核构建多尺度空间。Lindeberg证明了高斯及其微分核是尺度空间分析中唯一线性的平滑核。我们先使用高斯函数:$G(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-x^2/2\sigma^2}$来构建尺度空间。对于二维图像其对应二维高斯核函数可以定义为$G(x,y,\sigma)  =  \frac{1}{\sqrt{2\pi}\sigma}e^{-(x^2+y^2)/2\sigma^2}$.

一幅图像$I(x,y)$和高斯核函数卷积可以得到:

$$L(x,y,\sigma) =  G(x,y,\sigma)*I(x,y) $$

参数$\sigma$决定图像的分辨率,$\sigma$越大图像越模糊。这便是原图像的尺度空间表示。

这一步仅仅是实现了不同图像的模糊程度模拟,我们还需要实现对不同大小图像的表示。这个可以直接通过对图像进行降采样得到。这样对于原图像我们使用高斯函数卷积达到不同模糊程度(不同$\sigma$)关键点,这对应的是一个octave。然后我们对原图像降采样(比如将图像变为原来大小的一半)然后对新得到图像再次使用高斯函数卷积得到下一个octave,这样一直重复我们就可以得到多个octave,每个octave中有多个不同尺度模糊图像,所有的octave构成高斯金字塔。下面是其示意图:

2. 尺度空间极值检测

建立好高斯金字塔之后我们开始检测兴趣点(interest points),我们可以使用LOG(Laplacian of Gaussian)来检测图像中我们需要的兴趣点(边缘,角点)。然而LOG 很容易受到噪声的干扰,这也是我们之前对图像做Blur模糊的原因之一。LOG计算公式如下:

$$\Delta^2 = \frac{\partial^2}{\Delta_x^2}+\frac{\partial^2}{\Delta_y^2}$$

但是二阶倒数计算起来太困难,于是我们选取了一个替代方案来近似LOG:使用DOG(Difference of Gaussian)计算公式如下:

$$D(x,y,\sigma) = \left(G(x,y,k\sigma)-G(x,y,\sigma) \right)*I(x,y)$$

使用DOG 我们计算得到稳定的keypoints。我们可以使用前面够贱的高斯金字塔,相邻高斯金字塔相减得到DOG空间。

3. 去除不好的关键点

4. 给关键点赋方向

5. 生成SIFT features

【Paper Reading】Object Recognition from Scale-Invariant Features的更多相关文章

  1. 【Paper Reading】Learning while Reading

    Learning while Reading 不限于具体的书,只限于知识的宽度 这个系列集合了一周所学所看的精华,它们往往来自不只一本书 我们之所以将自然界分类,组织成各种概念,并按其分类,主要是因为 ...

  2. 【Paper Reading】Deep Supervised Hashing for fast Image Retrieval

    what has been done: This paper proposed a novel Deep Supervised Hashing method to learn a compact si ...

  3. 【Paper Reading】Bayesian Face Sketch Synthesis

    Contribution: 1) Systematic interpretation to existing face sketch synthesis methods. 2) Bayesian fa ...

  4. 【Paper Reading】Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture Synthesis

    Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture ...

  5. Computer Vision_33_SIFT:Object recognition from local scale-invariant features——1999

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  6. 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读

    前言 本来想按照惯例来一个overview的,结果看到1篇十分不错而且详细的介绍,因此copy过来,自己在前面大体总结一下论文,细节不做赘述,引用文章讲得很详细,另外这篇paper引用十分详细,如果做 ...

  7. 【论文笔记】Zero-shot Recognition via semantic embeddings and knowledege graphs

    Zero-shot Recognition via semantic embeddings and knowledege graphs   2018-03-31  15:38:39  [Abstrac ...

  8. 【面试 JDK】【第一篇】Object类面试详解

    1.Object类有哪些方法 1>clone()方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异 ...

  9. 【Java】【常用类】Object 基类 源码学习

    源码总览: 有好些都是native本地方法,背后是C++写的 没有关于构造器的描述,默认编译器提供的无参构造 https://blog.csdn.net/dmw412724/article/detai ...

随机推荐

  1. ZBrush通过遮罩得到子物体

    ZBrush 中通过遮罩为模型添加子物体的方法简单且方便,我们可以通过按住Ctrl键绘制遮罩结合相关命令创建具有抽出厚度的模型提取出作为子物体附在模型表面.本文将详细介绍在Zbrush中如何通过遮罩得 ...

  2. Codeforces Round #493 (Div. 2) B. Cutting 前缀和优化_动归水题

    不解释,题目过水 Code: #include<cstdio> #include<cmath> #include<algorithm> using namespac ...

  3. SQL中Group By的使用(转)

    1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...

  4. PAT 天梯赛练习集 L2-022. 重排链表

    题目链接:https://www.patest.cn/contests/gplt/L2-022 给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L ...

  5. 如何设置,获取,删除cookie?

    cookie : 存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据 1.不同的浏览器存放的cookie位置不一样,也是不能通用的 2.cookie的存储 ...

  6. 使用yum方式安装mysql5.6

    1.新开的云服务器,需要检测系统是否自带安装mysql # yum list installed | grep mysql 2.如果发现有系统自带mysql,果断这么干 # yum -y remove ...

  7. linux日常指令、概念

    指令 cal 查看日历date 查看日期bc 计算器ls 查看文件ls -l 查看具体信息(权限,时间等)ls -a 查看所有的文件包括隐藏文件ll 作用同上d* 开头的都是文件夹,- 开头的都是文件 ...

  8. 归档 SCP SFTP RSYNC(数据同步)

    tar 选项  目标文件  源文件(1 2 3) tar cf **.tar file1 file2 file3 (默认情况下 cf选项只有归档没有压缩) tar xf 从归档中提取 创建tar的存档 ...

  9. Eclipse项目启动不了

    当你的Eclipse项目启动不了多半是[eclipse工程jdk版本]的问题 在eclipse中项目jdk版本不匹配的时候需要修改项目工程的jdk版本,但是网上的一些版本修改不是很完全,经过一些摸索之 ...

  10. multiple definition of

    总结了解决multiple definition of的方法: 问题原因:    当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译#ifndef TEST_H#define TEST_H ...