SIFT算法 特征匹配

这篇具有很好参考价值的文章主要介绍了SIFT算法 特征匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SIFT算法

参考链接 【OpenCV】SIFT原理与源码分析

DOG尺度空间构造(Difference of Gaussian)

首先是对原特征图下采样可以得到金字塔形状的多分辨率空间,作为特征金字塔,该特征金字塔可以方便提取出不同尺度的特征(感觉这里也可以叫多尺度空间)
SIFT算法 特征匹配
多尺度空间:利用高斯核对图像进行卷积操作,不同的高斯核参数 σ \sigma σ对应不同的形状,相当于多尺度空间。利用高斯核对图像做卷积操作就是高斯模糊,卷积和形状越矮越扁,模糊程度就越大。关键特征在不断模糊的过程中相对其他位置应该是更容易保留下来的,因此在后面对特征图做差时可以形成极值点。
SIFT算法 特征匹配

分别对每层特征金字塔中的特征图,用不同的高斯核进行卷积操作,就得到了高斯特征金字塔,再对相邻的两层作差,进一步得到DOG金字塔
SIFT算法 特征匹配
SIFT算法 特征匹配

关键点搜索与定位

关键特征在不同的高斯模糊下更容易保留,在DOG特征图中表现为极值点。
关键点搜索:也比较复杂
SIFT算法 特征匹配
提高定位精度:曲线拟合
SIFT算法 特征匹配

方向赋值、关键点描述

SIFT算法 特征匹配

方向赋值与与关键点描述,与HOG特征类似,需要计算每个点的梯度,计算梯度直方图,最后得到的特征向量。

二、特征匹配

Feature Matching + Homography to find Objects
SIFT图像匹配及其python实现

对两个简单图像进行特征匹配,并利用随机抽样一致(RANSAC)滤除错误匹配
SIFT算法 特征匹配
SIFT算法 特征匹配
Python 代码文章来源地址https://www.toymoban.com/news/detail-444978.html

img = cv2.imread('./rl2_s.png')
img2 = cv2.imread('./rl_s.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# # SURF或SIFT特征
# sift = cv2.xfeatures2d.SIFT_create()
surf = cv2.xfeatures2d.SURF_create(400)
# surf.setExtended(True)
kp1, des1 = surf.detectAndCompute(gray, mask=None)
kp2, des2 = surf.detectAndCompute(gray2, mask=None)

anot1 = cv2.drawKeypoints(gray, kp1, None)
anot2 = cv2.drawKeypoints(gray2, kp2, None)
plt.subplot(121)
plt.imshow(anot1)
plt.subplot(122)
plt.imshow(anot2)

# # MATCH
matcher = cv2.BFMatcher()
raw_matches = matcher.knnMatch(des1, des2, k=2)
good_matches = []
for m1, m2 in raw_matches:
    #  如果最接近和次接近的比值大于一个既定的值,那么我们保留这个最接近的值,认为它和其匹配的点为good_match
    if m1.distance < 0.85 * m2.distance:
        good_matches.append([m1])
# good_matches = sorted(raw_matches, key=lambda x: x[0].distance)[:300]

# # RANSAC
assert len(good_matches) > 4, "Too few matches."
kp1_array = np.float32([kp1[m[0].queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
kp2_array = np.float32([kp2[m[0].trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
H, status = cv2.findHomography(kp1_array, kp2_array, cv2.RANSAC, ransacReprojThreshold=4)
good_matches = [good_matches[i] for i in range(len(good_matches)) if status[i] == 1]
imgOut = cv2.warpPerspective(gray2, H, (gray.shape[1], gray.shape[0]), flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)
print(H)  # 变换矩阵H,透视变换?
# plt.figure()
# plt.imshow(imgOut)
# cv2.findFundamentalMat()  # 用于3D

matches = cv2.drawMatchesKnn(anot1, kp1, anot2, kp2, good_matches, None, flags = 2)

plt.figure()
plt.imshow(matches)

plt.show()

到了这里,关于SIFT算法 特征匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 特征点的检测与匹配(ORB,SIFT,SURFT比较)[opencv-python]

    本文旨在总结opencv-python上特征点的检测和匹配。 1、特征点的检测(包括:ORB,SIFT,SURFT) 2、特侦点匹配方法 (包括:暴力法,FLANN,以及随机抽样一致性优化RANSAC算法) 注:由于SURF专利问题,所以opencv官方包目前不支持SURF但支持ORB和SIFT,安装opencv-contrib-python包就可以解决 一

    2024年02月06日
    浏览(50)
  • 学习笔记:Opencv实现图像特征提取算法SIFT

    2023.8.19 为了在暑假内实现深度学习的进阶学习,特意学习一下传统算法,分享学习心得,记录学习日常 SIFT的百科: SIFT = Scale Invariant Feature Transform, 尺度不变特征转换 全网最详细SIFT算法原理实现_ssift算法_Tc.小浩的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-c

    2024年02月12日
    浏览(47)
  • 【教程】Autojs使用OpenCV进行SIFT/BRISK等算法进行图像匹配

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]         此代码可以替代内置的images.findImage函数使用,但可能会误匹配,如果是对匹配结果要求比较高的,还是得谨慎使用。

    2024年02月07日
    浏览(49)
  • Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

    学习目标 理解 S I F T / S U R F SIFT/SURF S I FT / S U RF 算法的原理, 能够使用 S I F T / S U R F SIFT/SURF S I FT / S U RF 进行关键点的检测 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris H a rr i s 和 S h i − T o m a s i Shi-Tomasi S hi − T o ma s i 角点检测算法,这两种算法具有旋转不变性,但不具

    2024年02月09日
    浏览(52)
  • 基于SIFT图像特征识别的匹配方法比较与实现

    目前常用的匹配器有 BFMatcher and FlannBasedMatcher 1.1 BFMatcher BFMatcher 全称是 Brute-Force Matcher (直译即为暴力匹配器) 大致原理: 对于 img1 中的每个描述符, BFMatcher 将其与 img2 中的所有描述符进行比较;它计算两个描述符之间的距离度量(例如,欧几里得距离或汉明距离,默认使

    2024年02月09日
    浏览(47)
  • Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

    讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时,最近邻匹配与Ransac匹配的不同之处 另外,Ransac也被用于椭圆拟合、变换矩阵求解等 1.1 原理 RANSAC(RANdom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的

    2024年02月05日
    浏览(40)
  • 机器学习图像特征提取—SIFT特征提取原理及代码实现

    目录 1 SIFT简介 2 SIFT原理及特点 2.1 SIFT算法特点 2.2 SIFT特征检测 3 SIFT代码实现        SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。       SIF

    2024年02月06日
    浏览(44)
  • OpenCV 入门教程:SIFT和SURF特征描述

    SIFT (尺度不变特征变换)和 SURF (加速稳健特征)是图像处理中常用的特征描述算法,用于提取图像中的关键点和生成对应的特征描述子。这些算法具有尺度不变性、旋转不变性和光照不变性等特点,适用于图像匹配、目标识别和三维重建等应用。本文将以 SIFT 和 SURF 特征

    2024年02月15日
    浏览(59)
  • openCV实战-系列教程7:轮廓检测2与模板匹配(轮廓检测/轮廓特征/轮廓近似/轮廓边界矩阵/轮廓边界圆/模版匹配)、原理解析、源码解读

    打印一个图片可以做出一个函数: 前面我们计算了这个图片的轮廓:  它的轮廓信息保存在了contours中,取出第一个轮廓,计算相关参数: 打印结果: 8500.5  437.9482651948929 这是分别求出了周长和面积,这里的True表示的是否是闭合的。    如图,第一个图是原图,如果将它的

    2024年02月10日
    浏览(40)
  • 【图像处理】SIFT角点特征提取原理

            提起在OpenCV中的特征点提取,可以列出Harris,可以使用SIFT算法或SURF算法来检测图像中的角特征点。本篇围绕sift的特征点提取,只是管中窥豹,而更多的特征点算法有: Harris Stephens / Shi–Tomasi 角点检测算法 Förstner角点检测器; 多尺度 Harris 算子 水平曲线曲率法

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包