码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • OpenCV 实现 SIFT→SURF 算法关键点检测实现


    目录

    1,SIFT算法原理

    1.1,基本流程

    1.1.1   尺度空间极值检测

    1.1.2 关键点定位

    1.1.3  关键点方向确定

    1.1.4  关键点描述

    1.1.5   总结

    1.2   SURF原理

    2  代码实现

    3  结果展示

    4,你肯定会遇到报错

    cv2.error: OpenCV(3.4.8) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cp


    SIFT(Scale-Invariant Feature Transform)和SURF(Speeded Up Robust Features)是两种常用的图像特征点检测算法,可以实现在不同尺度下对图像中的关键点进行检测。OpenCV是一个流行的计算机视觉库,提供了实现SIFT和SURF算法的函数和方法。

    SIFT算法是一种基于尺度空间的特征检测与描述算法。它首先通过高斯差分金字塔生成尺度空间,然后在每个尺度上使用DoG(Difference of Gaussians)算子来检测关键点。关键点的位置和尺度信息通过极值点检测和插值得到。接着,使用方向梯度直方图(Histogram of Oriented Gradients)描述关键点的方向,最后生成关键点的特征描述符。

    SURF算法是一种基于积分图像的快速特征检测算法。它通过使用盒子滤波器在多个尺度下计算积分图像,然后通过Hessian矩阵的行列式来检测关键点。SURF算法还引入了一种加速方式——快速Hessian矩阵特征点检测,通过减少计算量来提高检测速度。关键点的定位和尺度信息由Hessian矩阵计算得到,然后使用Haar小波描述关键点的方向,最后生成关键点的特征描述符。

    在OpenCV中,可以使用cv2.xfeatures2d.SIFT_create()函数创建SIFT算法对象,并使用detectAndCompute()方法检测图像中的SIFT关键点和描述符。类似地,可以使用cv2.xfeatures2d.SURF_create()函数创建SURF算法对象,通过调用detectAndCompute()方法实现SURF关键点和描述符的检测。

    SIFT和SURF算法都具有较好的尺度不变性和鲁棒性,适用于许多计算机视觉应用,如图像匹配、目标跟踪和三维重建等。然而,需要注意的是,由于SIFT和SURF算法的专利限制,OpenCV中的默认编译版本可能不包含这些算法。如果需要使用SIFT和SURF算法,可以选择使用非默认的编译版本或者其他开源库实现。

    总之,OpenCV提供了实现SIFT和SURF算法的函数和方法,可以方便地进行图像关键点的检测和描述。这些算法在计算机视觉领域具有广泛的应用,为图像处理、目标识别和模式匹配等提供了重要的工具和技术支持。

    1,SIFT算法原理

    1.1,基本流程

    1.1.1   尺度空间极值检测

    1.1.2 关键点定位

    1.1.3  关键点方向确定

    、

    1.1.4  关键点描述

    1.1.5   总结

    1.2   SURF原理

    2  代码实现

    1. import cv2 as cv
    2. import matplotlib.pyplot as plt
    3. import numpy as np
    4. from pylab import mpl
    5. mpl.rcParams['font.sans-serif'] = ['SimHei']
    6. #读取图像
    7. img = cv.imread('aa.jpg')
    8. gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    9. #2 sift关键点检测
    10. #2.1 实例化sift对象
    11. sift = cv.xfeatures2d.SIFT_create()
    12. #2.2 关键点检测 : kp关键点信息包括 方向、尺度、位置信息,des是关键点的描述符
    13. kp , des = sift.detectAndCompute(gray , None)
    14. #2.3 在图像上绘制关键点的检测结果
    15. cv.drawKeypoints(img , kp , img , flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
    16. #图像的显示
    17. plt.figure(figsize=(5,4),dpi=100)
    18. plt.imshow(img[:,:,:-1]),plt.title("sift 关键点检测")
    19. plt.xticks([]),plt.yticks([])
    20. plt.show()

    3  结果展示

    4,你肯定会遇到报错

    cv2.error: OpenCV(3.4.8) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cp

    解决办法(点击):

    解决办法地址

  • 相关阅读:
    Elasticsearch-通过分析器进行分词
    Vue 官方文档2.x教程学习笔记 1 基础 1.3 Vue 实例 1.3.1 创建一个Vue 实例 & 1.3.2 数据与方法
    LeetCode 0304. 二维区域和检索 - 矩阵不可变
    MySQL主从复制原理和使用
    NSE脚本使用
    实验:验证mysql索引失效场景
    【深度学习实验】线性模型(二):使用NumPy实现线性模型:梯度下降法
    (C)一些错题
    Grafana+Prometheus+Pushgateway三剑客安装
    SpringBoot多模块项目中无法注入其他模块中bean
  • 原文地址:https://blog.csdn.net/qq_53545309/article/details/133306998
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号