今天的计算机视觉课老师讲了不少内容,不过都是大概讲了下,我先记录下,细讲等以后再补充。

SIFT特征:

尺度不变性:用不同参数的高斯函数作用于图像(相当于对图像进行模糊,得到不同尺度的图像),用得到的图像作差,找极值(相

当于穷举不同尺度空间的图像,找其特征点,在不同尺度下,都在极值范围之内,故能满足尺度不变性。

然后要找到极值点的位置,对其进行定位。

然后对极值进行描述。

旋转不变性:用梯度方向来表示极值点的方向,定义主方向能保证旋转不变性。

光照不变性

SIFT的特征点检测是在DOG图像上进行的,关于DOG可参考:http://blog.csdn.net/abcjennifer/article/details/7639488,解释得很清楚。

这篇博文http://www.zhizhihu.com/html/y2010/2146.html主要说了尺度空间和图像金字塔间的差别:尺度空间实际上就是平滑,像素不变;金字塔则是对图像进行降采样,像素降低。

int main(int argc, char* argv[])
{
Mat img_1 = imread("basketball.jpg", CV_LOAD_IMAGE_GRAYSCALE);//宏定义时CV_LOAD_IMAGE_GRAYSCALE=0,也就是读取灰度图像
Mat img_2 = imread("basketball2.jpg", CV_LOAD_IMAGE_GRAYSCALE);//一定要记得这里路径的斜线方向,这与Matlab里面是相反的
if (!img_1.data || !img_2.data)//如果数据为空
{
cout << "opencv error" << endl;
return -;
}
cout << "open right" << endl; //第一步,用SIFT算子检测关键点 SiftFeatureDetector detector;//构造函数采用内部默认的
std::vector<KeyPoint> keypoints_1, keypoints_2;//构造2个专门由点组成的点向量用来存储特征点 detector.detect(img_1, keypoints_1);//将img_1图像中检测到的特征点存储起来放在keypoints_1中
detector.detect(img_2, keypoints_2);//同理 //在图像中画出特征点
Mat img_keypoints_1, img_keypoints_2; drawKeypoints(img_1, keypoints_1, img_keypoints_1, Scalar::all(-), DrawMatchesFlags::DEFAULT);//在内存中画出特征点
drawKeypoints(img_2, keypoints_2, img_keypoints_2, Scalar::all(-), DrawMatchesFlags::DEFAULT); imshow("sift_keypoints_1", img_keypoints_1);//显示特征点
imshow("sift_keypoints_2", img_keypoints_2); //计算特征向量
SiftDescriptorExtractor extractor;//定义描述子对象 Mat descriptors_1, descriptors_2;//存放特征向量的矩阵 extractor.compute(img_1, keypoints_1, descriptors_1);//计算特征向量
extractor.compute(img_2, keypoints_2, descriptors_2); //用burte force进行匹配特征向量
BruteForceMatcher<L2<float>>matcher;//定义一个burte force matcher对象
vector<DMatch>matches;
matcher.match(descriptors_1, descriptors_2, matches); //绘制匹配线段
Mat img_matches;
drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);//将匹配出来的结果放入内存img_matches中 //显示匹配线段
imshow("sift_Matches", img_matches);//显示的标题为Matches waitKey();
return ;
}

SIFT Code

具体可参考:http://www.cnblogs.com/tornadomeet/archive/2012/08/16/2643168.html

HOG:梯度直方图。SIFT特征的前三步。

HOG与SIFT:

HOG可先参考这位博主:http://blog.csdn.net/abcjennifer/article/details/7365651,通俗的介绍了HOG:

通俗的讲:

HOG特征提取方法就是将一个image:

1.            灰度化(将图像看做一个x,y,z(灰度)的三维图像)

2.            划分成小cells(2*2)

3.            计算每个cell中每个pixel的gradient(即orientation)

4.            统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor

这篇博文以图解的形式介绍了opencv源码中的一些参数:http://blog.csdn.net/raodotcong/article/details/6239431

   HOG与SIFT的区别

    HOG和SIFT都是描述子,以及由于在具体操作上有很多相似的步骤,所以致使很多人误认为HOG是SIFT的一种,其实两者在使用目的和具体处理细节上是有很大的区别的。HOG与SIFT的主要区别如下:
(1)SIFT是基于关键点特征向量的描述。
(2)HOG是将图像均匀的分成相邻的小块,然后在所有的小块内统计梯度直方图。
(3)SIFT需要对图像尺度空间下对像素求极值点,而HOG中不需要。
(4)SIFT一般有两大步骤,第一个步骤对图像提取特征点,而HOG不会对图像提取特征点。
 HOG的优缺点

优点:
(1)HOG表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;
(2)位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;
(3)采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响;
(4)由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据的维度降低了;
(5)而且由于这种分块分单元的处理方法,也使得图像局部像素点之间的关系可以很好得到表征。
缺点:
(1)描述子生成过程冗长,导致速度慢,实时性差;
(2)很难处理遮挡问题;
(3)由于梯度的性质,该描述子对噪点相当敏感。
具体可参考:http://www.cnblogs.com/zhazhiqiang/p/3595266.html
 

鲁棒统计

Hough变换:举例说明吧。怎么用一系列点来确定一条直线。

每两个点确定k,b(斜率和截距),然后统计k,b的数量。相当于用每两个点进行投票,谁的票多,最后就能确定k,b

这个解释通俗易懂 http://www.cnblogs.com/smartvessel/archive/2011/10/20/2218654.html

RANSAC:

说下大致算法吧,同样举例说明。

随机选两个点作出模型,计算内点到此模型的距离之和。

重复上述过程,选出距离最小的那个模型。

参考:http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html

SIFT+HOG+鲁棒统计+RANSAC的更多相关文章

  1. CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL)

    CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL) PointASNL: Robust Point Clouds Processing Using Nonlocal N ...

  2. 基于2D-RNN的鲁棒行人跟踪

    基于2D-RNN的鲁棒行人跟踪 Recurrent Neural Networks RNN 行人跟踪 读"G.L. Masala, et.al., 2D Recurrent Neural N ...

  3. Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现

    鲁棒局部加权回归 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 算法参考文献: (1) Robust L ...

  4. 鲁棒图(Robustness Diagram)

    鲁棒图与系统需求分析 鲁棒图(Robustness Diagram)是由Ivar Jacobson于1991年发明的,用以回答“每个用例需要哪些对象”的问题.后来的UML并没有将鲁棒图列入UML标准, ...

  5. H∞一般控制问题的鲁棒叙述性说明

    Robust Control System:反馈控制有承受一定类不确定能力的影响,这一直保持在这种不确定的条件(制)稳定.动态特性(灵敏度)和稳态特性(逐步调整)的能力. 非结构不确定性(Unstru ...

  6. 如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/sd2oX0Z_cMY8_GvFg8pO4Q作者:杨昆 上篇<如何编写高质量的 JS 函数 ...

  7. python练习 英文字符的鲁棒输入+数字的鲁棒输入

    鲁棒 = Robust 健壮 英文字符的鲁棒输入 描述 获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪ ...

  8. 【论文阅读】Beyond OCR + VQA: 将OCR融入TextVQA的执行流程中形成更鲁棒更准确的模型

    论文题目:Beyond OCR + VQA: Involving OCR into the Flow for Robust and Accurate TextVQA 论文链接:https://dl.a ...

  9. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

随机推荐

  1. Webbench网站压力测试

      Webbench是有名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.webBech的标准测试可以向我们展示服务器的 两项 内容:每秒钟相应请求数和每秒 ...

  2. Moqui学习Day4

    添加一个新建表单 添加一个按钮来弹出新建表单,并创建一个转换来处理输入数据操作. 在FindTutorial.xml文件中添加一个转换. <!--新增 列表 --> <transit ...

  3. 超市管理系统—NABCD模型

    1) N (Need 需求) 需求分析: 超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生.依靠现代化的计算机信息处理技术 ...

  4. [转]Java总结篇系列:Java泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...

  5. Java-EnumSet

    如下 package 集合类.Set类; /** * Set不允许重复数据 */ /** * 这个类是1.5开始有的, * 目前个人使用量几乎为零,很少使用 * 其使用方式和普通的Set没有区别,只是 ...

  6. 【前端学习】git命令行界面

    学习目标:掌握git命令行界面的操作.掌握最基本的clone add commit push pull操作. 先下载客户端:http://github-windows.s3.amazonaws.com ...

  7. Yii2提示信息设置方法

    显示信息提示用户时,可以用setFlash,hasFlash,getFlash function actionOk() { Yii::app()->user->setFlash('succ ...

  8. BZOJ4196 软件包管理器

    Description Linux用户和OSX用户一定对软件包管理器不会陌生. 通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖 ...

  9. CCNET配置文件配置工具

    当我们在使用CruiseControl.NET进行配置的时候,你会发现配置文件是个非常头痛的事,无从下手,下面我在google找了一个09年的工具,主要是针对CruiseControl.NET进行配置 ...

  10. 洛谷P2024 食物链

    挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...