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

 

相关文章
|
1月前
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
34 0
|
4月前
|
存储 人工智能 测试技术
图像相似度比较之 CLIP or DINOv2
图像相似度比较之 CLIP or DINOv2
|
11天前
|
机器学习/深度学习 自动驾驶 算法
图像识别中的scikit-learn:从像素到分类
【4月更文挑战第17天】本文介绍了如何使用Python的scikit-learn进行图像识别,包括图像预处理、特征提取(如HOG、SIFT)和分类器训练(如SVM、决策树)。通过一个示例展示了从像素数据到图像分类的完整流程,强调了预处理和特征提取的重要性。虽然scikit-learn在图像识别中有应用,但随着深度学习的发展,卷积神经网络在该领域展现出更强的性能,暗示了未来结合深度学习与scikit-learn的研究趋势。
|
5月前
|
存储 传感器 数据可视化
3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)
本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、3D框可视化、点云转图像、画BEV鸟瞰图等,并配有实现代码。
452 0
|
4月前
|
机器学习/深度学习 文字识别 算法
[Halcon&图像] 基于多层神经网络MLP分类器的思想提取颜色区域
[Halcon&图像] 基于多层神经网络MLP分类器的思想提取颜色区域
53 0
|
4月前
|
机器学习/深度学习 算法 PyTorch
实战图像softmax分类模型
本文是学习softmax图像分类模型的总结,主要分享softmax图像分类模型的技术原理,以及用代码实现验证,供大家参考。
92 3
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【图像聚类】基于K-means聚类算法路标识别与提取附Matlab代码
【图像聚类】基于K-means聚类算法路标识别与提取附Matlab代码
|
9月前
|
存储 机器学习/深度学习 编解码
使用训练分类网络预处理多分辨率图像
说明如何准备用于读取和预处理可能不适合内存的多分辨率全玻片图像 (WSI) 的数据存储。肿瘤分类的深度学习方法依赖于数字病理学,其中整个组织切片被成像和数字化。生成的 WSI 具有高分辨率,大约为 200,000 x 100,000 像素。WSI 通常以多分辨率格式存储,以促进图像的高效显示、导航和处理。 读取和处理WSI数据。这些对象有助于使用多个分辨率级别,并且不需要将图像加载到核心内存中。此示例演示如何使用较低分辨率的图像数据从较精细的级别有效地准备数据。可以使用处理后的数据来训练分类深度学习网络。
123 0
|
9月前
|
机器学习/深度学习 算法 计算机视觉
人证比对+图片相似度+MTCNN+FACENET+CNN
人证比对+图片相似度+MTCNN+FACENET+CNN
122 1
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)
【Pytorch神经网络实战案例】09 使用卷积提取图片的轮廓信息(手动模拟Sobel算子)
139 0