【局部特征】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 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
随机推荐
- 如何解决loadrunner回放日志中的乱码问题
在Loadrunner回放脚本时,会看到replay log区会展示脚本回放时的信息.有时候选中了打印服务器返回具体信息后,服务器返回的中文字符为乱码.怎么破? 原来Loadrunner的replay ...
- KnockoutJS 3.X API 第一章 简介
本文纯正翻译自官网API文档.其中包含一下个人理解. 官网API地址:http://knockoutjs.com/documentation/introduction.html 简介 Knockout ...
- KnockoutJS 3.X API 第四章 数据绑定(5) 控制流component绑定
本节目录: 一个例子 API 备注1:仅模板式的component 备注2:component虚拟绑定 备注3:传递标记到component绑定 内存管理 一个例子 First instance, w ...
- CAS原子锁 高效自旋无锁的正确用法
"atomic_lock.h" #pragma once #ifndef _atomic_lock_h_include_ #define _atomic_lock_h_includ ...
- angularJS之事件处理
angularJS的事件不像js一样,会默认有冒泡和捕获,还有angularJS之间的同名控制器之间,也只是同名, 不会让他们关联起来,就是这个名字的控制器的数据的改变不会影响到另一个同名的控制器. ...
- iOS $299刀企业证书申请的过程以及细节补充
最近申请了iOS的 299刀企业证书,相关过程有些问题,分享出来,以便后来人参考. 申请的过程我主要参考了别人以前的文章,链接如下: 1.https://developer.apple.com/cn/ ...
- .NET程序集强命名删除与再签名技术 源代码剖析
如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径 1 反编译为IL代码,删除签名部分,再编译为程序集 2 应用Re-Sign程序,直接对一个程序集再签名 生成和读取 ...
- Jquery实现AJAX拦截
前几天项目需要实现一个AJAX拦截,于是就用jquery写了一个,这里分享一下. 需求是这样的,ajax不是我来写,所有说我是不能动ajax的,并且我也不知道什么时候它会发生,为了方便项目经理让我把它 ...
- Android悬浮窗口的实现
效果图:(悬浮框可拖动) 在项目开发中有一个需求:弹出悬浮窗后,响应悬浮窗的事件再弹出对话框,但是对话框怎么也不显示.也就是说在弹出悬浮框的同时,不能再弹出对话框,可能的原因: 1.悬浮框的焦点在最前 ...
- 分享一个Jquery 分页插件 Jquery Pagination
分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也挺简单明了的,也助于自己写个小插件. 不过我比较懒,一般直接 ...