乐鱼电竞

  • 教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    Shi-Tomasi角点检测原理和实现代码

    更新时间:2021年06月03日18时05分 来源:乐鱼电竞 浏览次数:

    1 原理

    Shi-Tomasi算法是对Harris角点检测算法的改进,一般会比Harris算法得到更好的角点。Harris 算法的角点响应函数是将矩阵 M 的行列式值与 M 的迹相减,利用差值判断是否为角点。后来Shi 和Tomasi 提出改进的方法是,若矩阵M的两个特征值中较小的一个大于阈值,则认为他是角点,即: R=min(λ1,λ2) R= min(\lambda_1,\lambda_2) 如下图所示:

     Shi-Tomasi角点检测01

    从这幅图中,可以看出来只有当 λ1 和 λ 2 都大于最小值时,才被认为是角点。

    2 实现

    在OpenCV中实现Shi-Tomasi角点检测使用API:

    corners = cv2.goodFeaturesToTrack ( image, maxcorners, qualityLevel, minDistance )
    

    参数:

    • Image: 输入灰度图像
    • maxCorners : 获取角点数的数目。
    • qualityLevel:该参数指出最低可接受的角点质量水平,在0-1之间。
    • minDistance:角点之间最小的欧式距离,避免得到相邻特征点。

    返回:

    • Corners: 搜索到的角点,在这里所有低于质量水平的角点被排除掉,然后把合格的角点按质量排序,然后将质量较好的角点附近(小于最小欧式距离)的角点删掉,最后找到maxCorners个角点返回。

    示例:

    import numpy as np 
    import cv2 as cv
    import matplotlib.pyplot as plt
    # 1 读取图像
    img = cv.imread('./image/tv.jpg') 
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    # 2 角点检测
    corners = cv.goodFeaturesToTrack(gray,1000,0.01,10)  
    # 3 绘制角点
    for i in corners:
        x,y = i.ravel()
        cv.circle(img,(x,y),2,(0,0,255),-1)
    # 4 图像展示
    plt.figure(figsize=(10,8),dpi=100)
    plt.imshow(img[:,:,::-1]),plt.title('shi-tomasi角点检测')
    plt.xticks([]), plt.yticks([])
    plt.show()

    结果如下:

     Shi-Tomasi角点检测02


    总结

    1. Harris算法

      思想:通过图像的局部的小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化。

      API: cv.cornerHarris()

    2. Shi-Tomasi算法

      对Harris算法的改进,能够更好地检测角点

      API: cv2.goodFeatureToTrack()



    猜你喜欢:

    人工智能之个性化推荐之路

    深度相机是什么?深度相机常见技术

    如何解决分类中解决类别不平衡问题?

    语言模型-BERT:bert算法介绍

    乐鱼电竞人工智能培训课程

    0 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】