sift算法研究
A. 怎么验证sift算法对亮度的不变性
2、高斯模糊
SIFT算法是在不同的尺度空间上查找关键点,而尺度空间的获取需要使用高斯模糊来实现,Lindeberg等人已证明高斯卷积核是实现尺度变换的唯一变换核,并且是唯一的线性核。本节先介绍高斯模糊算法。
2.1二维高斯函数
高斯模糊是一种图像滤波器,它使用正态分布(高斯函数)计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。
N维空间正态分布方程为:
(1-1)
其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为m*n,则模板上的元素(x,y)对应的高斯计算公式为:
(1-2)
在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆,如图2.1所示。分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。
B. 如何比较SIFT,SURF,Harris-SIFT图像匹配算法性能
SIFT匹配(Scale-invariant feature transform,尺度不变特征转换)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe 在1999年所发表,2004年完善总结。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显着而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
2、SIFT特征的主要特点
从理论上说,SIFT是一种相似不变量,即对图像尺度变化和旋转是不变量。然而,由于构造SIFT特征时,在很多细节上进行了特殊处理,使得SIFT对图像的复杂变形和光照变化具有了较强的适应性,同时运算速度比较快,定位精度比较高。如:
在多尺度空间采用DOG算子检测关键点,相比传统的基于LOG算子的检测方法,运算速度大大加快;
关键点的精确定位不仅提高了精度,而且大大提高了关键点的稳定性;
在构造描述子时,以子区域的统计特性,而不是以单个像素作为研究对象,提高了对图像局部变形的适应能力;
C. SIFT绠楁硶
SIFT绠楁硶锛氢竴绉嶉潻锻芥х殑灞閮ㄧ壒寰佹弿杩版妧链
镊1999骞碊avid Lowe镄勯潻鏂颁箣浣滆癁鐢熶互𨱒ワ纴SIFT绠楁硶锲犲叾灏哄害鍜屾棆杞涓嶅彉镐у湪锲惧儚澶勭悊棰嗗烟镫镙戜竴甯溿傜洿镊2020骞寸殑涓揿埄链熸弧锛岃繖涓寮哄ぇ镄勫伐鍏峰备粖宸叉垚涓哄紑婧愮殑瀹濊吹璧勬簮锛岃骞挎硾搴旂敤浜庡叏鏅𨰾嶆惮銆佸浘镀忓尮閰岖瓑浼楀氩満鏅銆傝╂垜浠娣卞叆鎺㈣⊿IFT绠楁硶镄勫伐浣滃师鐞嗭纴棰嗙暐鍏跺湪锲惧儚涓栫晫镄勯瓟锷涖
1.2 SIFT绠楁硶镄勬牳蹇冨师鐞
棣栧厛锛孲IFT璧锋簮浜庡浘镀忕殑灏哄害绌洪棿姒傚康锛岄氲繃鍒涘缓楂樻柉閲戝瓧濉旀潵妯℃嫙浜虹溂瀵硅繙杩戝拰娓呮榈搴︾殑镒熺煡銆傝繖涓杩囩▼阃氲繃閲囨牱娉曟ā𨰾熷浘镀忕殑缂╂斁锛岄珮鏂镙稿钩婊戝勭悊鍒欐ā𨰾熺粏鑺傜殑灞傛″彉鍖栥
1.2.1 锲惧儚楂樻柉閲戝瓧濉旂殑鏋勫缓
鏋勫缓楂樻柉閲戝瓧濉旂殑鍏抽敭鍦ㄤ簬璁$畻铡熷嫔浘镀忕殑灏哄搞侀噾瀛楀旂殑灞傜骇鍜岄珮鏂妯$硦绯绘暟銆傛疮灞傚浘镀忛氲繃涓娄竴灞傜殑涓嬮噰镙锋潵瀹炵幇锛屽舰鎴愪竴缁勬ā𨰾熶笉钖屽昂搴︾殑锲惧儚銆傚湪瀵绘垒鏋佸肩偣镞讹纴鎴戜滑鍒╃敤楂樻柉宸鍒嗛噾瀛楀旓纴鍏舵疮灞备箣闂寸殑宸寮傛湁锷╀簬妫娴嫔叧阌镣广傛瀬鍊肩偣瀹氢綅娑夊强阒埚煎勭悊锛堜緥濡傦纴T=0.04锛屼笌锲惧儚鏁伴噺鐩稿叧锛屼互鍙婂儚绱犲肩殑缁濆瑰硷级锛屽苟鍦ㄤ笁涓鏂瑰悜锛坸銆乱鍜屉冿级涓婅繘琛屾悳绱銆备负浜嗘彁楂樼簿搴︼纴鏋佸肩偣杩橀渶缁忚繃娉板嫆灞曞紑淇姝o纴钖屾椂鍓旈櫎浣庡规瘆搴﹀尯锘熷拰杈圭紭鏁埚簲镄勫奖鍝嶃
鍏抽敭镣规弿杩扮殑鏋勫缓
鍏抽敭镣圭殑鏂瑰悜淇℃伅鐢辨搴︾粺璁℃彁渚涳纴鎺ョ潃阃氲繃鍒掑垎锲惧儚鍖哄烟銆佹墽琛屽潗镙囧彉鎹锛屼互鍙婄粺璁128缁寸洿鏂瑰浘𨱒ユ瀯阃犺︾粏镄勬弿杩扮︺傝繖涓杩囩▼纭淇濅简鍏抽敭镣瑰湪涓嶅悓灏哄害鍜屾棆杞涓嬬殑绋冲畾琛ㄧず锛屼娇寰桽IFT鍦ㄥ浘镀忓尮閰嶅拰璇嗗埆浠诲姟涓琛ㄧ幇鍑鸿壊銆
娣卞叆浜呜ВSIFT绠楁硶镄勬疮涓涓缁呜妭锛屼綘灏嗘洿鑳芥h祻鍒板畠鍦ㄥ浘镀忓勭悊棰嗗烟涓镄勫箍娉涘簲鐢ㄥ拰鍗撹秺镐ц兘銆傛棤璁烘槸澶勭悊澶嶆潅鍦烘櫙涓镄勮呜夋悳绱锛岃缮鏄鍦ㄥ叏鏅𨰾嶆惮涓瀹炵幇镞犵绅𨰾兼帴锛孲IFT閮芥槸涓嶅彲鎴栫己镄勫伐鍏枫傛帰绱㈡洿澶氩叧浜岙IFT鐗瑰緛鎻愬彇鍜屽昂搴︾┖闂村浘镀忛噾瀛楀旂殑娣卞叆鏂囩珷锛岃繘涓姝ユ彁鍗囦綘镄勫浘镀忓勭悊鎶鑳藉惂锛
D. HartSift: 一种基于GPU的高准确性和实时SIFT
尺度不变特征变换 (SIFT) 是最流行和最强大的特征提取算法之一,因为它对尺度、旋转和光照保持不变。它已被广泛应用于视频跟踪、图像拼接、同时定位和映射(SLAM)、运动结构(SFM)等领域。然而,高计算复杂度限制了其在实时系统中的进一步应用。这些系统必须在准确性和性能之间进行权衡以实现实时特征提取。他们采用其他更快但精度较低的算法,如 SURF 和 PCA-SIFT。为了解决这个问题,本文提出了一种使用 CUDA 的 GPU 加速 SIFT,命名为 HartSift,充分利用单机CPU和GPU的计算资源,实现高精度、实时的特征提取。实验表明,在 NIVDIA GTX TITAN Black GPU 上,HartSift 可以根据图像的大小在 3.14-10.57ms (94.61-318.47fps) 内处理图像。此外,HartSift 分别比 OpenCV-SIFT(CPU 版本)和 SiftGPU(GPU 版本)快 59.34-75.96 倍和 4.01-6.49 倍。同时,HartSift 的性能和 CudaSIFT(迄今为止最快的 GPU 版本)的性能几乎相同,而 HartSift 的准确度远高于 CudaSIFT。
SIFT算法可以提取大量显着特征,这些特征在缩放、旋转、光照和3D视点保持不变,还提供了跨越噪声和仿射失真的稳健匹配。但SIFT的高计算复杂度限制了其在大规模数据和实时系统中的进一步应用。而复杂度较低的算法,如SURF、PCA-SIFT的准确性又不太高。因此,在主流计算平台上实现高精度、实时的SIFT是一个重要而有意义的研究课题。
而SIFT算法具有很好的并行性,可以正确移植到GPU上。因此,在配备GPU的异构计算系统上实现高性能的SIFT具有重要的实用价值。
SIFT 算法包含三个阶段,包括高斯差分(DoG)金字塔的构建、精确的关键点定位和 128 维描述符生成。由于每个阶段都有自己的并行特性,因此必须使用不同的并行粒度和优化来实现高性能。尤其是后两个阶段,负载不平衡不利于GPU优化,会导致性能下降。
本文的主要贡献和创新可以概括如下:
有许多工作尝试在GPU上使用SIFT算法。
然而,为了实现高性能,他们省略了 SIFT 算法的一些重要步骤,例如将输入图像加倍、保持尺度变化的连续性和拟合二次函数以定位准确的关键点信息。作者的实验表明,这些遗漏会导致 SIFT 丢失很多关键点和准确性。
Lowe将输入图像尺寸加倍作为高斯金字塔 的最底层,每个尺度 通过高斯卷积产生:
高斯金字塔确定之后,利用相同Octave的层级相减,得到差分金字塔:
其中 ,在本文中, .
检测尺度空间极值
将DoG金字塔每个像素与相邻像素比较,同层8个,上下层9个,若像素是局部最大值或局部最小值,将其视为关键点候选。
去除无效关键点
去除较低对比度和不稳定边缘响应的候选关键点,通过将3D二次函数拟合到附近数据执行子像素插值,以获取精确的位置、比例和主曲率比。
方向分配
将候选关键点周围的梯度累积到36 bins的直方图中,根据每层的尺度计算搜索半径。每个紧邻像素由一个高斯加权窗口加权,梯度方向累计到36 bins的方向直方图中。峰值为主要梯度方向,同时超过峰值80%的局部峰值bin也被视为关键点方向。
对关键点周围像素计算梯度直方图,搜索半径比上一步骤大得多,同样用一个高斯加权函数用于为每个邻居的梯度值分配权重。
根据梯度方向将最终的梯度值累积到一个 360-bin 的圆形方向直方图。最后,直方图将被归一化、平滑并转换为 128D 描述符。
构建金字塔应该保持顺序,以保证尺度空间变化连续性。Acharya和Bjorkman为加快这一过程,牺牲准确性打破构建顺序。考虑到不能使准确性降低,构建顺序在HartSift中保留。
分离卷积核
对于 大小的卷积核处理 大小的图像需要进行 次运算,如果将2D卷积核拆解为两个1D的卷积核,计算量减少至 . 通过使用共享内存和向量化方法,更容易实现合并全局内存访问并减少一维卷积的冗余访问。
Uber 内核
Uber内核将多个不同任务放到一个物理内核中,在一个内核中并行处理任务,而不需要在内核之间切换。差分金字塔第 层由高斯金字塔第 和第 层决定。将高斯差分金字塔和高斯卷积核封装在单个核中,可以充分挖掘并行性。
线程不需要重复读取高斯金字塔第 层的值,这是由于第 层的值计算完后,结果会放在寄存器内而不是全局内存中。借助Uber内核的优势,我们可以节省 的空间和 的内核运行时间
异构并行
HartSift 采用异构并行方法来加速这一阶段。CPU 和 GPU 将并行协作,构建 DoG 金字塔。
由于GPU处理小图像没有优势,作者将 以下的图像放到CPU处理,大图像放到GPU处理。用户也可以自行设置分离点,确保CPU和GPU负载平衡。
存在两个问题:
负载均衡
Warp是GPU最小并行执行单元,即以锁步方式执行的 32 个线程的集合。若负载不均衡,则warp执行时间取决于最后一个线程完成的时间,warp负载不均衡会导致GPU效率降低。
由于候选关键点分布的随机性,几乎所有经线都包含不同数量的空闲线程。如果这些warp继续处理以下部分,就会出现两个级别的负载不平衡.
在去除无效的候选关键点部分时,线程将进行亚像素插值以获得准确的候选关键点信息,从而去除具有低对比度或不稳定边缘响应的关键点候选。换句话说,一些线程会比其他线程更早返回一次。负载不平衡会变得更加严重。
为了突破性能瓶颈,HartSift 引入了重新平衡工作负载和多粒度并行优化。
重新平衡工作负载
当检测到负载不平衡时,HartSift 将通过启动具有适当粒度的新内核并分派每个具有 32 个活动线程的新经线来重新平衡工作负载。
此外,启动三个内核分别处理这三个部分,不仅可以重新平衡工作量,还可以根据不同部分的并行特性提供多粒度的并行。
多粒度并行
重新平衡工作负载优化保证每个内核中的线程和经线被完全加载,多粒度并行优化保证工作负载将平均分配到线程和经线。此外,不同内核的并行粒度取决于工作负载的特性。
HartSift通过将一个线程映射到一个或多个像素,采用与关键点候选检测部分和无效关键点去除部分并行的线程粒度。然而,线程粒度并行会导致方向分配部分的负载不平衡,因为不同关键点的相邻区域半径不同。线程粒度并行会为单个线程分配过多的工作,这在某些情况下限制了硬件资源的利用率。所以在这部分应用混合粒度并行:扭曲粒度构建直方图,线程粒度找出并将主导方向分配给相应的关键点。
基于扭曲的直方图算法
作者针对每个关键点提出了一种基于扭曲粒度和原子操作的高性能直方图算法,以充分利用局部性。
该阶段关键点的邻域半径远大于前一阶段。需要为每个关键点累积数千个邻居到一个 360-bin 直方图。如果采用前一阶段的基于原子扭曲的直方图算法,会对这一阶段的性能产生不同的影响。
HartSift引入了一种atomic-free的直方图算法,进一步提升了这一阶段的性能。
该算法包含三个步骤:
为了消除线程间的负载不平衡,实现全局合并访问,HartSift 使用一个warp 来处理一个keypoint 的所有邻居。当线程计算出它们的方向 bin 时,它们需要根据bin变量的值将梯度值累加到局部直方图。考虑到有如此多的邻居并且一个经线的一些线程可能具有相同的 bin,算法1引入了一种无原子的多键约简方法来累积每个经线的部分和。这种方法可以利用warp级shuffle和vote指令完全消除原子操作和本地同步。它根据bin对经纱的线程进行分组并指定每组具有最低车道的线程作为队长线程。队长线程将保存他们自己的 bin 的部分总和,并将它们并行地累积到驻留在共享内存中的本地直方图,而不会发生 bank 冲突和同步。在遍历所有邻居后,HartSift 将最终的局部直方图复制到驻留在全局内存中的全局直方图。
本文提出了一种GPU上的并行SIFT,命名为Hart-Sift,它可以在单机内同时使用CPU和GPU来实现高精度和实时的特征提取。HartSift根据每个阶段的不同特点,通过适当采用不同的优化策略来提升性能,例如负载均衡、基于warp的直方图算法和不同尺度样本的atomic-free直方图算法等。在NVIDIA GTX TITAN Black GPU上,HartSift可以在3.14 ~ 10.57ms(94.61 ~ 318.47fps)内提取高精度特征,轻松满足高精度和实时性的苛刻要求。另外,与OpenCV-SIFT和SiftGPU相比,HartSift获得了59.34 ~ 75.96倍和4.01 ~ 6.49倍加速分别。同时,HartSift 和 CudaSIFT 的性能几乎相同,但 HartSift 远比 CudaSIFT 准确。
E. sift算法是什么
Sift算法是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善。Sift特征匹配算法可以处理两幅图像之间发生平移、旋转、仿射变换情况下的匹配问题,具有很强的匹配能力。
这一算法的灵感也十分的直观,人眼观测两张图片是否匹配时会注意到其中的典型区域(特征点部分),如果我们能够实现这一特征点区域提取过程,再对所提取到的区域进行描述就可以实现特征匹配了。
sift算法的应用
SIFT算法目前在军事、工业和民用方面都得到了不同程度的应用,其应用已经渗透了很多领域,典型的应用如下:物体识别;机器人定位与导航;图像拼接;三维建模;手势识别;视频跟踪;笔记鉴定;指纹与人脸识别;犯罪现场特征提取。