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

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

目录

FLANN算法

1、建立索引

2、进行搜索

输出结果

实现代码


 

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返回搜索半径内所有点(即可能不存在符合条件的点,则返回空的)。

 

输出结果

 

实现代码

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

1.     sift = cv2.xfeatures2d.SIFT_create()   
2. # 查找监测点和匹配符
3.     kp1, des1 = sift.detectAndCompute(img1, None)
4.     kp2, des2 = sift.detectAndCompute(img2, None)
5. print(len(kp1), len(des1) )   # 1402, 1402
6. 
7. 
8.     FLANN_INDEX_KDTREE = 0
9.     indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
10.     searchParams = dict(checks=50)
11.     flann = cv2.FlannBasedMatcher(indexParams, searchParams)
12. # 进行匹配
13.     matches = flann.knnMatch(des1, des2, k=2)
14. # 准备空的掩膜 画好的匹配项
15.     matchesMask = [[0, 0] for i in range(len(matches))]
16. 
17. for i, (m, n) in enumerate(matches):
18. if m.distance < 0.7*n.distance:
19.             matchesMask[i] = [1, 0]
20. 
21.     drawPrams = dict(matchColor=(0, 255, 0),
22.                      singlePointColor=(255, 0, 0),
23.                      matchesMask=matchesMask,
24.                      flags=0)
25.     img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, matches, None, **drawPrams)
26.     img_PutText = cv2.putText(img3, "SIFT+kNNMatch: Image Similarity Comparisonn", (40, 40),cv2.FONT_HERSHEY_COMPLEX, 1.5, (0, 0, 255), 3,)
27.     img4 = cv2.resize(img_PutText, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_NEAREST)  #缩小1/2
28. 
29.     cv2.imshow("matches", img4)
30.     cv2.waitKey(7000)
31.     cv2.destroyAllWindows()

 

相关文章
|
7月前
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
111 0
|
24天前
|
机器学习/深度学习 计算机视觉 Python
图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术
本文深入探讨了图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术(如颜色、纹理、形状特征)及预处理步骤(如图像增强、去噪、分割)。同时介绍了Python中常用的OpenCV和Scikit-image库,并提供了代码示例,强调了预处理的重要性及其在提升模型性能中的作用。
93 5
|
存储 传感器 数据可视化
3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)
本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、3D框可视化、点云转图像、画BEV鸟瞰图等,并配有实现代码。
1775 1
|
6月前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——MeanShift算法和图像矢量量化
机器学习之聚类——MeanShift算法和图像矢量量化
65 0
|
7月前
|
机器学习/深度学习 文字识别 算法
[Halcon&图像] 基于多层神经网络MLP分类器的思想提取颜色区域
[Halcon&图像] 基于多层神经网络MLP分类器的思想提取颜色区域
167 0
|
机器学习/深度学习 传感器 算法
【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
|
机器学习/深度学习 算法 计算机视觉
人证比对+图片相似度+MTCNN+FACENET+CNN
人证比对+图片相似度+MTCNN+FACENET+CNN
171 1
|
存储 机器学习/深度学习 编解码
使用训练分类网络预处理多分辨率图像
说明如何准备用于读取和预处理可能不适合内存的多分辨率全玻片图像 (WSI) 的数据存储。肿瘤分类的深度学习方法依赖于数字病理学,其中整个组织切片被成像和数字化。生成的 WSI 具有高分辨率,大约为 200,000 x 100,000 像素。WSI 通常以多分辨率格式存储,以促进图像的高效显示、导航和处理。 读取和处理WSI数据。这些对象有助于使用多个分辨率级别,并且不需要将图像加载到核心内存中。此示例演示如何使用较低分辨率的图像数据从较精细的级别有效地准备数据。可以使用处理后的数据来训练分类深度学习网络。
346 0
|
机器学习/深度学习 传感器 算法
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别
ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别
ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别