【局部特征】ASIFT
由于相机正面白摄物体时,相机的光轴方向可能发生变化,带来扭曲。而SIFT算法虽具有完全的尺度不变性,但不具有完全的仿射不变性,对拍摄角度发生大角度空间变化的图像特征提取有一定的局限性。ASift通过模拟经度与纬度实现完全的仿射不变,然后用SIFT算法把模拟图像进行比较,最后实现特征匹配。
ASIFT算法的具体步骤如下:
1.选取采样参数,模拟不同经度与纬度的图像。
2.计算模拟图像的特征。
3.结合所有的模拟图像的特征,进行特征匹配。
注意:ASIFT提供的一种框架,其核心思想是模拟不同的经度与纬度的图像,具体模拟图像的特征提取和匹配,可选择SIFT、SURF等特征。
ASIFT算法代码资源:
http://www.ipol.im/pub/art/2011/my-asift/
https://github.com/Itseez/opencv/blob/master/samples/python2/asift.py
OpenCV只提供python实现的asift,如果需要在C++中使用asift,主要有两种方法可参考。
1.利用作者提供的C++代码,具体使用方法可参考作者提供的文档。
2.将asift.py翻译成C++代码。
asift.py代码相对清晰,转换成基于OpenCV的C++代码比较容易,我主要参用方法2,实现ASIFT算法。
遇到的问题:
1.处理分辨率较大图片时,出现OpenCV Error: Insufficient memory的错误。
经分析,计算过程需要保存多张模拟图片的特征点和特征描述子,需要大量内存,导致OpenCV分配内存时,没有连续可用的内存块,从而出现OpenCV Error: Insufficient memory的错误。
解决方法:降低待处理图片的分辨率,并计算高分辨率到低分辨率转换的单应性矩阵scaleH。利用ASift算法计算低分辨率图片的匹配的单应性矩阵matchH。最终待处理图片的单应矩阵H=matchH*scaleH。
2.计算复杂度问题。
由于需要处理多幅模拟图片的特征点检测,计算复杂度高。目前,主要有两种思路:1).降低分辨率,减少计算量。2).利用硬件特性进行硬件计算。
ASift作者在文中提到的Two-Resolution Procedure.
(1).采用系数K*K二次采样查询图片u和待搜索图片v。u = SkGku,v=SkGkv,Gk是反走样高斯离散滤波器,SK为K*K二次采样。
(2).低分辨率下的ASIFT算法:对查询图片u和搜索图片应用ASIFT算法;
(3).确定u和v中可能产最多匹配对的M种仿射变换;
(4).高分辨率下的ASIFT算法:在原始图像u和v上使用ASIFT算法,但模拟倾科时只使用这M种仿射变换。
经实验测试,发现Two-Resolution Procedure虽然可以在一定降低复杂度,但其对匹配精度会有一定的影响,对于匹配精度要求高的应用不太合适。
Asift.py中,利用线程池加速多幅图像的特征点检测,使得多幅图像的特征点检测同时进行。
结合多线程的思想,我利用每个线程,计算每幅图像的特征点的检测,结果遇到内存不足的问题。
主要原因:特征点检测过程需要内存空间存储部分中间结果,当多线程同时计算时,所需内存增大,出现内存不足的问题。
解决方法:可以根据待处理图片的分辨率大小和系统提供内存资源的多少,自适应确定多线程的数目。
利用GPU加速ASIFT计算,具体步骤如下:
(1).将待处理图片传输到GPU端。
(2).将待处理图片模拟变换,得到模拟图片,AffineImage_Kernel。
(3).计算模拟图片的特征点,KeyPointsDetect_Kernel。
(4).将计算所得的特征点数据传输到CPU端。
(5).循环处理(2)、(3)、(4)步骤,直到所有模拟变换处理完。
(6).在CPU端完成特征点匹配计算。
注意:(4)与(5)可以异步执行,重叠计算与特征点数据传输的时间。
基于GPU特征点计算主要参考:
SiftGPU: http://cs.unc.edu/~ccwu/siftgpu/
CudaSift: https://github.com/Celebrandil/CudaSift
注意:经测试,发现SiftGPU和CudaSift检测出的特征点数目与OpenCV的SiftFeatureDetector检测出特征点数目差异较大。
【局部特征】ASIFT的更多相关文章
- 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)
摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...
- BRIEF特征简介
引言 该文是由EPFL的Calonder在ECCV2010上提出了一种可以快速计算且表达方式为二进制编码的描述子.主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串 ...
- LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一)
关于局部敏感哈希算法.之前用R语言实现过,可是由于在R中效能太低.于是放弃用LSH来做类似性检索.学了python发现非常多模块都能实现,并且通过随机投影森林让查询数据更快.觉得能够试试大规模应用在数 ...
- Computer Vision_33_SIFT:SAR-SIFT: A SIFT-LIKE ALGORITHM FOR SAR IMAGES——2015
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- Image Processing and Computer Vision_Review:Recent Advances in Features Extraction and Description Algorithms: A Comprehensive Survey——2017.03
翻译 特征提取和描述算法的最新进展:全面的调查 摘要 - 计算机视觉是当今信息技术中最活跃的研究领域之一.让机器和机器人能够以视线的速度看到和理解周围的世界,创造出无穷无尽的潜在应用和机会.特征检测和 ...
- 阿里巴巴直播内容风险防控中的AI力量
直播作为近来新兴的互动形态和今年阿里巴巴双十一的一大亮点,其内容风险监控是一个全新的课题,技术的挑战非常大,管控难点主要包括业界缺乏成熟方案和标准.主播行为.直播内容不可控.峰值期间数千路高并发处理. ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- 【NLP】基于自然语言处理角度谈谈CRF(二)
基于自然语言处理角度谈谈CRF 作者:白宁超 2016年8月2日21:25:35 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
- 【NLP】基于统计学习方法角度谈谈CRF(四)
基于统计学习方法角度谈谈CRF 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
随机推荐
- python中paramiko模块的使用
paramiko是python一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.可以远程操作服务器文件 例如: df:查看磁盘使用情况 mkdir:创建目录 mv/cp/mk ...
- 菜鸟级别的WCF入门学习
这两天学习WCF,看了MSDN上的入门教程,和查找了一些网上给的例子,简单的实现了一下,感觉应该很适合我这种菜鸟级的选手看了. 1.新建一个项目--WCF--WCF服务应用程序 用的是MSDN上的加减 ...
- struts2 OGNL表达式
一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...
- Spring3 整合 Hibernate4实现数据库操作(1)
Hibernate知识学习:http://justsee.iteye.com/blog/1061576 注意Hibernate4在开发当中的一些改变 :http://snake-hand.iteye ...
- java中匿名类的注意细节
abstract class Outer{ int num; public Outer(int x){ num = x; } public abstract void show1(); public ...
- Request 接收参数乱码原理解析三:实例分析
通过前面两篇<Request 接收参数乱码原理解析一:服务器端解码原理>和<Request 接收参数乱码原理解析二:浏览器端编码原理>,了解了服务器和浏览器编码解码的原理,接下 ...
- Foundation 5 发布!最先进的响应式前端框架
数以百万计的设计师和工程师采用 Foundation 作为他们的产品和网站设计的前端框架.Foundation 是第一个响应式.语义化和移动优先的开源框架.最新发布的 Foundation 5 是最先 ...
- [Linux] LD_LIBRARY_PATH
该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径(该路径在默认路径之前查找).若共享库不在缺省路径/lib或者/usr/lib下,就需要指定其他路径.实践中的一种解决方案是, ...
- [工具]Serv-U配置教程
引言 最近项目中需要用到ftp服务器,将文件放在ftp服务器上,就在网上查了一下,学习了一下Serv-u的配置及使用,这里也将如何配置的做一记录. Serv-u简介 Serv-U 是目前众多的FTP ...
- .net后台模拟浏览器get/post请求
#region 后台模拟浏览器get/post请求 /// <summary> /// 发送请求方式 /// </summary> /// <param name=&qu ...