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()


相关文章
|
5月前
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
91 0
|
5月前
|
机器学习/深度学习 存储 数据可视化
MambaOut:状态空间模型并不适合图像的分类任务
该论文研究了Mamba架构(含状态空间模型SSM)在视觉任务(图像分类、目标检测、语义分割)中的必要性。实验表明,Mamba在这些任务中效果不如传统卷积和注意力模型。论文提出,SSM更适合长序列和自回归任务,而非视觉任务。MambaOut(不带SSM的门控CNN块)在图像分类上优于视觉Mamba,但在检测和分割任务中略逊一筹,暗示SSM在这类任务中可能仍有价值。研究还探讨了Mamba在处理长序列任务时的效率和局部信息整合能力。尽管整体表现一般,但论文为优化不同视觉任务的模型架构提供了新视角。
85 2
|
4月前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——MeanShift算法和图像矢量量化
机器学习之聚类——MeanShift算法和图像矢量量化
38 0
|
11月前
|
存储 传感器 数据可视化
3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)
本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、3D框可视化、点云转图像、画BEV鸟瞰图等,并配有实现代码。
1201 1
|
机器学习/深度学习 算法 计算机视觉
人证比对+图片相似度+MTCNN+FACENET+CNN
人证比对+图片相似度+MTCNN+FACENET+CNN
155 1
|
存储 机器学习/深度学习 编解码
使用训练分类网络预处理多分辨率图像
说明如何准备用于读取和预处理可能不适合内存的多分辨率全玻片图像 (WSI) 的数据存储。肿瘤分类的深度学习方法依赖于数字病理学,其中整个组织切片被成像和数字化。生成的 WSI 具有高分辨率,大约为 200,000 x 100,000 像素。WSI 通常以多分辨率格式存储,以促进图像的高效显示、导航和处理。 读取和处理WSI数据。这些对象有助于使用多个分辨率级别,并且不需要将图像加载到核心内存中。此示例演示如何使用较低分辨率的图像数据从较精细的级别有效地准备数据。可以使用处理后的数据来训练分类深度学习网络。
223 0
|
存储 机器学习/深度学习 传感器
【图像隐藏】基于DWT与SVD算法实现数字水印嵌入提取附matlab代码
【图像隐藏】基于DWT与SVD算法实现数字水印嵌入提取附matlab代码
|
资源调度 算法 机器人
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。
193 0
|
机器学习/深度学习 PyTorch 算法框架/工具
【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)
【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)
205 0
|
算法 数据可视化 索引
ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化
ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化
ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化
下一篇
无影云桌面