主页 > 知识库 > OpenCV特征提取与检测之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角点检测器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • OpenCV特征提取与检测之Harris角点检测
  • python opencv角点检测连线功能的实现代码
  • OpenCV哈里斯(Harris)角点检测的实现
  • OpenCV半小时掌握基本操作之角点检测

标签:河南 长治 沈阳 沧州 上海 乐山 红河 新疆

巨人网络通讯声明:本文标题《OpenCV特征提取与检测之Shi-Tomasi角点检测器》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266