OpenCV——图像角点检测应用记录

  • 图像特征
    • Harris角点检测
    • Shi-Tomasi 角点检测
    • SIFT (尺度不变特征变换)原理
    • SURF (加速鲁棒性特征)原理
    • FAST角点检测
    • BRIEF 特征描述子

图像特征

Harris角点检测

Harris Corner Detection: https://docs.opencv.org/master/dc/d0d/tutorial_py_features_harris.html

Harris角点检测的结果是一个带着这些分数的灰度图。图像角点检测需要一个合适的阈值

gray = np.float32(gray)
dst = cv.cornerHarris(gray,2,3,0.04)
#result is dilated for marking the corners, not important
dst = cv.dilate(dst,None)
# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]

稍微使用一点图像锐化

Shi-Tomasi 角点检测

Shi-Tomasi Corner Detector & Good Features to Track:
https://docs.opencv.org/master/d4/d8c/tutorial_py_shi_tomasi.html
https://blog.csdn.net/xiaowei_cqu/article/details/7805206

Shi-Tomasi 算法是Harris 算法的改进。Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较。后来Shi 和Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
corners = cv.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)
for i in corners:x,y = i.ravel()cv.circle(img,(x,y),3,255,-1)

SIFT (尺度不变特征变换)原理

Introduction to SIFT (Scale-Invariant Feature Transform)
https://docs.opencv.org/master/da/df5/tutorial_py_sift_intro.html
https://www.jianshu.com/p/95c4890c486b?utm_source=oschina-app

SIFT特征以其对旋转、尺度缩放、亮度等保持不变性,是一种非常稳定的局部特征,在图像处理和计算机视觉领域有着很重要的作用,其本身也是非常复杂的,下面对其计算过程做一个粗略总结。

  1. DoG尺度空间的极值检测。 首先是构造DoG尺度空间,在SIFT中使用不同参数的高斯模糊来表示不同的尺度空间。而构造尺度空间是为了检测在不同尺度下都存在的特征点,特征点的检测比较常用的方法是Δ2G(高斯拉普拉斯LoG),但是LoG的运算量是比较大的,Marr和Hidreth曾指出,可以使用DoG(差分高斯)来近似计算LoG,所以在DoG的尺度空间下检测极值点。
  2. 删除不稳定的极值点。 主要删除两类:低对比度的极值点以及不稳定的边缘响应点。
  3. 确定特征点的主方向。以特征点的为中心、以3×1.5σ为半径的领域内计算各个像素点的梯度的幅角和幅值,然后使用直方图对梯度的幅角进行统计。直方图的横轴是梯度的方向,纵轴为梯度方向对应梯度幅值的累加值,直方图中最高峰所对应的方向即为特征点的方向。
  4. 生成特征点的描述子。 首先将坐标轴旋转为特征点的方向,以特征点为中心的16×16的窗口的像素的梯度幅值和方向,将窗口内的像素分成16块,每块是其像素内8个方向的直方图统计,共可形成128维的特征向量。
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
# kp, des = sift.detectAndCompute(gray,None)
img=cv.drawKeypoints(gray,kp,img)

SURF (加速鲁棒性特征)原理

Introduction to SURF (Speeded-Up Robust Features)

https://docs.opencv.org/master/df/dd2/tutorial_py_surf_intro.html

https://blog.csdn.net/qq_37764129/article/details/80969515

SURF是SIFT的加速版,它善于处理具有模糊和旋转的图像,但是不善于处理视角变化和光照变化。在SIFT中使用DoG对LoG进行近似,而在SURF中使用盒子滤波器对LoG进行近似,这样就可以使用积分图像了(计算图像中某个窗口内所有像素和时,计算量的大小与窗口大小无关)。总之,SURF最大的特点在于采用了Haar特征以及积分图像的概念,大大加快了程序的运行效率。

#参数为hessian矩阵的阈值
surf = cv2.xfeatures2d.SURF_create(400)
#找到关键点和描述符
key_query,desc_query = surf.detectAndCompute(img,None)
#把特征点标记到图片上
img=cv2.drawKeypoints(img,key_query,img)

FAST角点检测

FAST Algorithm for Corner Detection (Features from Accelerated Segment Test)

FAST 全称 Features from accelerated segment test,一种用于角点检测的算法,该算法的原理是取图像中检测点,以该点为圆心的周围的16个像素点判断检测点是否为角点,通俗的讲就是中心的的像素值比大部分周围的像素值要亮一个阈值或者暗一个阈值则为角点。

# Initiate FAST object with default values
fast = cv.FastFeatureDetector_create()
# find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))# Disable nonmaxSuppression
fast.setNonmaxSuppression(0)
kp = fast.detect(img,None)
print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))

Threshold: 10
nonmaxSuppression:True
neighborhood: 2
Total Keypoints with nonmaxSuppression: 528
Total Keypoints without nonmaxSuppression: 2607

BRIEF 特征描述子

Binary Robust Independent Elementary Features
https://docs.opencv.org/master/dc/d7d/tutorial_py_brief.html

# Initiate FAST detector
star = cv.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img,None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)

ORB 特征提取

Oriented FAST and Rotated BRIEF
https://docs.opencv.org/master/d1/d89/tutorial_py_orb.html

orb = cv.ORB_create()
# find the keypoints with ORB
kp = orb.detect(img,None)
# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

【OpenCV应用】python处理行李图像匹配项目——图像特征点相关推荐

  1. 【OpenCV应用】python处理行李图像匹配项目——图像直方图应用与明暗变换

    OpenCV--图像直方图与明暗变换应用记录 图像直方图应用与明暗变换 简单伽马变换与直方图显示 MASK特定区域直方图显示 OPENCV: 直方图均衡化 有限对比度自适应直方图均衡 二维直方图 直方 ...

  2. 【OpenCV应用】python处理行李图像匹配项目——图像(简单)清晰化

    OpenCV--图像清晰化应用记录 图像清晰化尝试 1.图像锐化--自定义卷积核滤波 2.图像边缘检测--自定义卷积核 3.图像边缘检测--skimage包 sobel.roberts.scharr. ...

  3. 【OpenCV应用】python处理行李图像匹配项目——sift函数

    OpenCV--sift算法应用记录 应用OpenCV和Python进行SIFT算法的实现 0.SIFT相关 1. 基于BFmatcher(Brute-Force Matching)的SIFT实现 2 ...

  4. python opencv 录制视频_如何使用OpenCV、Python和深度学习在图像和视频中实现面部识别?...

    Face ID 的兴起带动了一波面部识别技术热潮.本文将介绍如何使用 OpenCV.Python 和深度学习在图像和视频中实现面部识别,以基于深度识别的面部嵌入,实时执行且达到高准确度. 以下内容由 ...

  5. OpenCV + CPP 系列(卌二)图像特征匹配( KAZE/AKAZE)

    文章目录 一.KAZE简介 二.代码演示 特征检测效果对比 演示匹配 一.KAZE简介 ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE ([1]).KAZE的取名是为了纪念尺度空间 ...

  6. OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)

    文章目录 一.FLANN简介 演示SURF--Flann 二.单应性矩阵 一.FLANN简介 FLANN库全称是Fast Library for Approximate Nearest Neighbo ...

  7. 如何用 OpenCV、Python 和深度学习实现面部识别?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 Face ID 的兴起带动了一波面部识别技术热 ...

  8. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  9. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测面部标记

    使用 dlib.OpenCV 和 Python 检测面部标记 今天,我们将使用dlib和OpenCV来检测图像中的面部标记.dlib的安装教程: https://wanghao.blog.csdn.n ...

最新文章

  1. STL的红与黑--rb_tree红黑树
  2. 字符输出流写文本文件【Writer、FileWriter 、BufferedReader 】
  3. 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截
  4. Google要回归国内,百度李彦宏居然不怕?我想笑
  5. python算法学习代码_python 算法学习部分代码记录篇章1
  6. 剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)
  7. 固定资产中计算机软件类型,国税局固定资产的分类
  8. 2018美赛B题总结
  9. PDF417二维条码详解
  10. 为了物尽其用报废的涉密计算机的硬盘,检测不到硬盘不能轻易将其定为报废
  11. jxbrowser保存文件打开的上次目录,支持单文件,多文件,多窗口
  12. XML Essential Training XML基本培训 Lynda课程中文字幕
  13. 如何删除顽固文件或文件夹?
  14. ps切图教程 android,PS怎么切图 PS最新版本切图教程
  15. 100000以内的水仙花数C语言,找出1000000内的水仙花数
  16. 网易蜗牛读书产品分析报告
  17. 虚拟贝司拓展音源-Toontrack Acoustic EBX
  18. 把这一群人称为“知识分子”,实在有一点勉强
  19. 文件的下载与保存,以及mp3文件的播放
  20. 天翼云从业认证(4.4)异构双活云灾备实例

热门文章

  1. (第八章)左右外连接
  2. php android 图片上传,android上传图片到PHP的过程详解
  3. 手机安装python3.5_CentOS 7安装Python3.5
  4. php 如何打乱数组顺序,【PHP打乱数组顺序的方法有哪些,这样的程序你真的会写吗】- 环球网校...
  5. 华为MDC调试工具使用介绍
  6. 蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线
  7. 计算机导论知识点整理笔记(一.数据结构)
  8. Android studio 去除软件运行时顶部原有的蓝色/绿色框
  9. 【PAT】1002 写出这个数
  10. Python之lambda表达式