SIFT+HOG+鲁棒统计+RANSAC
今天的计算机视觉课老师讲了不少内容,不过都是大概讲了下,我先记录下,细讲等以后再补充。
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的区别
鲁棒统计
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的更多相关文章
- CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL)
CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL) PointASNL: Robust Point Clouds Processing Using Nonlocal N ...
- 基于2D-RNN的鲁棒行人跟踪
基于2D-RNN的鲁棒行人跟踪 Recurrent Neural Networks RNN 行人跟踪 读"G.L. Masala, et.al., 2D Recurrent Neural N ...
- Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现
鲁棒局部加权回归 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 算法参考文献: (1) Robust L ...
- 鲁棒图(Robustness Diagram)
鲁棒图与系统需求分析 鲁棒图(Robustness Diagram)是由Ivar Jacobson于1991年发明的,用以回答“每个用例需要哪些对象”的问题.后来的UML并没有将鲁棒图列入UML标准, ...
- H∞一般控制问题的鲁棒叙述性说明
Robust Control System:反馈控制有承受一定类不确定能力的影响,这一直保持在这种不确定的条件(制)稳定.动态特性(灵敏度)和稳态特性(逐步调整)的能力. 非结构不确定性(Unstru ...
- 如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/sd2oX0Z_cMY8_GvFg8pO4Q作者:杨昆 上篇<如何编写高质量的 JS 函数 ...
- python练习 英文字符的鲁棒输入+数字的鲁棒输入
鲁棒 = Robust 健壮 英文字符的鲁棒输入 描述 获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误. ...
- 【论文阅读】Beyond OCR + VQA: 将OCR融入TextVQA的执行流程中形成更鲁棒更准确的模型
论文题目:Beyond OCR + VQA: Involving OCR into the Flow for Robust and Accurate TextVQA 论文链接:https://dl.a ...
- 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法
摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...
随机推荐
- Newtonsoft.Json之JArray, JObject, JPropertyJValue
JObject staff = new JObject(); staff.Add(new JProperty("Name", "Jack")); staff.A ...
- Linux各目录作用
- [C#]exchange发送,收件箱操作类
最近项目中需要用到exchange的操作,就参照msdn弄了一个简单的操作类.目前先实现了,发送邮件和拉取收件箱的功能,其他的以后在慢慢的添加. using Microsoft.Exchange.We ...
- [工具类]泛型集合转换为DataTable
写在前面 在实际项目中,用到了将集合转换为DataTable,就试着封装了一个方法,记录一下. 代码 using System; using System.Collections.Generic; u ...
- 年前辞职-WCF入门学习(1,2)
前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再 ...
- [设计模式] Javascript 之 外观模式
外观模式说明 说明:外观模式是用于由于子系统或程序组成较复杂而提供的一个高层界面接口,使用客户端更容易访问底层的程序或系统接口; 外观模式是我们经常使用遇到的模式,我们经常涉及到的功能,可能需要涉及到 ...
- jquery事件的区别
1. mouseenter 和 mouseover (mouseleave 和 mouseout) 前者鼠标进入当前元素触发,内部的子元素不会触发事件. 而后者是进入当前元素后,当前元素和内部的子元 ...
- hdu4081 次小生成树
题意:有n个点,n-1条边.现在徐福可以让一条边无消耗建立,即魔法边.B表示除魔法边之外的的其他边的消耗值和,A表示这条魔法边相连的2个集合中都选一点,这两点的最大值,现在要求A/B最大. 方法:因为 ...
- hdu4287 字典树
#include<stdio.h> #include<string.h> #include<stdlib.h> #define maxn 10 struct tri ...
- href的参数含有中文在IE下乱码的解决
这是在使用kendo grid的自定义链接时遇到的一个坑,链接如下: var TempStr = "<a href='" + Url.Action("EditUse ...