OpenCV特征提取与检测之Shi-Tomasi角点检测器

 更新时间:2021年08月19日 11:23:03   作者:程序媛一枚~  
在角点检测的世界里哈瑞斯无疑是最重要的方法之一,但Shi-Tomasi作为改进的算法也有很大应用场景,尤其是动态跟踪用的还比较多,这篇文章主要给大家介绍了关于OpenCV特征提取与检测之Shi-Tomasi角点检测器的相关资料,需要的朋友可以参考下

前言

 角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detection)是计算机视觉系统中获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别等,也可称为特征点检测。

角点检测算法的基本思想:

使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。

目前,角点检测算法还不是十分完善,许多算法需要依赖大量的训练集和冗余数据来防止和减少错误的特征的出现。对于角点检测算法的重要评价标准是:其对多幅图像中相同或者相似特征的检测能力,并且能够应对光照变化、或者图像旋转等影响。

关于角点的具体描述可以有几种:

  • 一阶导数(即灰度的梯度)的局部最大所对应的像素点;
  • 两条及两条以上边缘的交点;
  • 图像中梯度值和梯度方向的变化速率都很高的点;
  • 角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向

上一篇博客介绍了Harris角点检测器,这篇博客将介绍另一个角点检测器:Shi-Tomasi角点检测器。

Shi-Tomasi角点检测器是Harris角点检测器的优化,效果更好;

cv2.goodFeaturesToTrack(),通过Shi-Tomasi方法(或者Harris角点检测)在图像中找到N个最强的角点。并且在跟踪对象方面性能很好。

1. 效果图

原图 VS Harris角点检测器效果如下:

原图 VS Shi-Tomasi角点检测效果图如下:

可以看出Shi-Tomasi确实效果要好一些,所有角点均被成功检测;

2. 源码

# Shi-Tomasi角点检测是Harris角点检测的优化,更准确,会检测出N个最强角点;

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('images/polygon.jpg')

plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title("origin")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray, 25, 0.01, 10)
corners = np.int0(corners)

for i in corners:
    x, y = i.ravel()
    cv2.circle(img, (x, y), 3, 255, -1)

plt.subplot(1,2,2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title("Shi-Tomasi res")
plt.show()

参考 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_shi_tomasi/py_shi_tomasi.html#shi-tomasi

总结

到此这篇关于OpenCV特征提取与检测之Shi-Tomasi角点检测器的文章就介绍到这了,更多相关OpenCV Shi-Tomasi角点检测器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python爬虫调度器用法及实例代码

    python爬虫调度器用法及实例代码

    在本篇文章里小编给各位整理了关于python爬虫调度器用法及实例代码,需要的朋友们可以参考学习下。
    2020-11-11
  • 在Django中动态地过滤查询集的实现

    在Django中动态地过滤查询集的实现

    本文主要介绍了Django中动态地过滤查询集的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python_opencv用线段画封闭矩形的实例

    python_opencv用线段画封闭矩形的实例

    今天小编就为大家分享一篇python_opencv用线段画封闭矩形的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python 实现数组相减示例

    Python 实现数组相减示例

    今天小编就为大家分享一篇Python 实现数组相减示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python在linux系统下获取系统内存使用情况的方法

    python在linux系统下获取系统内存使用情况的方法

    这篇文章主要介绍了python在linux系统下获取系统内存使用情况的方法,涉及Python在Linux平台下获取系统硬件信息的相关技巧,需要的朋友可以参考下
    2015-05-05
  • python 使用re.search()筛选后 选取部分结果的方法

    python 使用re.search()筛选后 选取部分结果的方法

    今天小编就为大家分享一篇python 使用re.search()筛选后 选取部分结果的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python实现批量翻译的示例代码

    Python实现批量翻译的示例代码

    这篇文章主要为大家详细介绍了如何利用Python语言实现批量翻译的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • python如何去除异常值和缺失值的插值

    python如何去除异常值和缺失值的插值

    大家好,本篇文章主要讲的是python如何去除异常值和缺失值的插值,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python列表推导式与生成器表达式用法示例

    Python列表推导式与生成器表达式用法示例

    这篇文章主要介绍了Python列表推导式与生成器表达式用法,简单描述了Python列表推导式与生成器表达式的概念、功能,并结合具体实例形式分析了Python列表推导式与生成器表达式简单使用技巧,需要的朋友可以参考下
    2018-02-02
  • python爬虫模拟浏览器访问-User-Agent过程解析

    python爬虫模拟浏览器访问-User-Agent过程解析

    这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论