ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化

简介: ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化

FLANN算法


         FLANN库全称是Fast Library for Approximate Nearest Neighbors,它是目前最完整的(近似)最近邻开源库。不但实现了一系列查找算法,还包含了一种自动选取最快算法的机制。

         使用flann的搜索,整体来说分为两步,一是建立索引,二是搜索。


使用SIFT特征提取关键点;

计算SIFT特征描述子;

使用FLANN匹配器进行描述子向量匹配。


1、建立索引


       其实就是要两部分参数,一是数据也就是mat矩阵,二是一些具体参数,这个参数要根据建立的索引类型来设置。而有哪些索引类型呢?  共有:线性索引、KD-Tree索引、K均值索引、复合索引、LSH方法索引、自动索引 六种。



2、进行搜索


有两种搜索方式 :knnSearch //搜索k邻近 、radiusSearch //搜索半径最近

从返回结果考虑两者的不同之处在于:

knnSearch返回最近邻的点(具体点的个数由用户设定,设n个就一定返回n个);

radiusSearch返回搜索半径内所有点(即可能不存在符合条件的点,则返回空的)。



输出结果


image.png

实现代码


ML之SIFT:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化


   sift = cv2.xfeatures2d.SIFT_create()  

   # 查找监测点和匹配符

   kp1, des1 = sift.detectAndCompute(img1, None)

   kp2, des2 = sift.detectAndCompute(img2, None)

   print(len(kp1), len(des1) )   # 1402, 1402

   FLANN_INDEX_KDTREE = 0

   indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)

   searchParams = dict(checks=50)

   flann = cv2.FlannBasedMatcher(indexParams, searchParams)

   # 进行匹配

   matches = flann.knnMatch(des1, des2, k=2)

   # 准备空的掩膜 画好的匹配项

   matchesMask = [[0, 0] for i in range(len(matches))]

 

   for i, (m, n) in enumerate(matches):

       if m.distance < 0.7*n.distance:

           matchesMask[i] = [1, 0]

 

   drawPrams = dict(matchColor=(0, 255, 0),

                    singlePointColor=(255, 0, 0),

                    matchesMask=matchesMask,

                    flags=0)

   img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, matches, None, **drawPrams)

   img_PutText = cv2.putText(img3, "SIFT+kNNMatch: Image Similarity Comparisonn", (40, 40),cv2.FONT_HERSHEY_COMPLEX, 1.5, (0, 0, 255), 3,)

   img4 = cv2.resize(img_PutText, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_NEAREST)  #缩小1/2

 

   cv2.imshow("matches", img4)

   cv2.waitKey(7000)

   cv2.destroyAllWindows()


相关文章
Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version
Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version
Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version
|
Python Windows
PyCharm证书过期:Your license has expired
pycharm激活码,由于那台服务器不维护了,不好使了,你可以关注宏哥的公众号发送:激活码,Ctrl+A,Ctrl+C,然后Ctrl+V,就可以了。
5435 0
PyCharm证书过期:Your license has expired
|
移动开发 缓存 JavaScript
2021最新阿里代码规范(前端篇)
2021最新阿里代码规范(前端篇)
57539 11
2021最新阿里代码规范(前端篇)
|
存储 PyTorch 算法框架/工具
Tensor to img && imge to tensor (pytorch的tensor转换)
Tensor to img && imge to tensor (pytorch的tensor转换)
|
8月前
|
缓存 PyTorch 算法框架/工具
AI Infra之模型显存管理分析
本文围绕某线上客户部署DeepSeek-R1满血版模型时进行多次压测后,发现显存占用一直上升,从未下降的现象,记录了排查过程。
858 41
AI Infra之模型显存管理分析
|
8月前
|
人工智能 物联网 Android开发
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
【04】优雅草星云物联网AI智控系统从0开发鸿蒙端适配-deveco studio-自定义一个设置输入小部件组件-完成所有设置setting相关的页面-优雅草卓伊凡
444 92
|
10月前
|
机器学习/深度学习 数据采集 PyTorch
用PyTorch从零开始编写DeepSeek-V2
本文详细介绍了如何使用PyTorch从零开始实现DeepSeek-V2,包括数据准备、模型构建、训练和测试等各个环节。掌握这些内容后,您可以根据自己的需求对模型进行扩展和优化,应用于更广泛的图像分析任务中。希望本指南能帮助您在深度学习领域更进一步。
826 9
|
机器学习/深度学习 算法 异构计算
挑战Transformer的Mamba是什么来头?
【5月更文挑战第4天】Mamba是一种新型序列建模架构,由Albert Gu和Tri Dao提出,旨在解决Transformer在处理长序列数据时的效率问题。该模型采用选择性状态空间,允许动态调整状态以关注重要信息,忽略冗余。Mamba通过硬件感知的并行算法实现线性时间复杂度,提高计算效率,并简化架构,融合状态空间模型与Transformer的MLP块。在语言建模等任务中,Mamba表现优越,甚至超越更大规模的Transformer模型。然而,对于某些连续信号如音频,其性能可能不及传统LTI模型。
464 9
|
数据可视化 数据挖掘 Go
GOplot|宝藏R包,拯救你的GO富集结果,杜绝平庸的条形图
`GOplot`是R中的一个宝藏包,用于GO富集分析的创新可视化。它提供多种图表类型,如GOBar、GOBubble、GOCircle、GOChord、GOHeat和GOCluster,以及GOVenn。通过调整参数,用户可自定义颜色、大小和排序。例如,GOBar和GOBubble展示富集条形和气泡,GOCircle以环形图表示,GOChord描绘基因和过程间关系,而GOHeat和GOCluster提供热图和聚类视图。此外,还有GOVenn用于绘制Venn图。包简化了数据准备和绘图过程,适合快速高效地展示复杂分析结果。别忘了引用创始人Walter等人的工作。
1519 1
|
机器学习/深度学习 数据采集 算法
一个 python + 数据预处理+随机森林模型 (案列)
本文介绍了一个使用Python进行数据预处理和构建随机森林模型的实际案例。首先,作者通过删除不必要的列和特征编码对数据进行了预处理,然后应用随机森林算法进行模型训练,通过GridSearchCV优化参数,最后展示了模型的评估结果。
463 0