【局部特征】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 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
随机推荐
- SQLServer查看死锁
SQLServer查看死锁 if exists ( select * from sys.procedures where name like '%USP_ShowLocks%' ) drop proc ...
- KnockoutJS 3.X API 第四章(13) template绑定
目的 template绑定(模板绑定)使用渲染模板的结果填充关联的DOM元素. 模板是一种简单方便的方式来构建复杂的UI结构 . 下面介绍两种使用模板绑定的方法: 本地模板是支持foreach,if, ...
- AJAX文件上传实践与分析,带HTML5文件上传API。
对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...
- SQL Server 2014新特性-原生备份加密
注:本篇文章是IT68找我的约稿,原文地址:http://tech.it168.com/a2014/0610/1633/000001633147.shtml SQL Server 2014 ...
- sys.dm_db_wait_stats
sys.dm_db_wait_stats 返回在操作期间执行的线程所遇到的所有等待的相关信息. 可以使用此聚合视图来诊断 Azure SQL Database 以及特定查询和批处理的性能问题. 执行查 ...
- UVAoj 348 - Optimal Array Multiplication Sequence
/* 题意:矩阵相乘的最少的步数 dp[i][j]=min(dp[i][j], dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]); 表示的是第i个矩阵到第j个矩阵 ...
- [UWP]涨姿势UWP源码——Unit Test
之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...
- Canvas 示例:4种超炫的网站动画背景效果
今天,我们想分享一些动画背景的灵感.全屏背景图片的网站头部是最新的网页设计趋势,已经持续了一段时间.最近人们一直在转向动画添加更多的视觉兴趣到他们的网站中,在这里我们想向您分享几个使用 JavaSc ...
- Jeet – 先进,直观,灵活的 CSS 网格系统
Jeet 是一个先进的,直观的 CSS 网格系统.通过使用预处理器的强大功能,我们现在可以通过实际分数(或者浮点数)来生成一个基于百分比宽度和间隔的网格.让你用更少的代码,更快的速度构建页面布局. 您 ...
- java实现将汉字转为拼音
有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测 ...