17.OpenCV中的GFTTDetector类

这篇具有很好参考价值的文章主要介绍了17.OpenCV中的GFTTDetector类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


欢迎访问个人网络日志🌹🌹知行空间🌹🌹文章来源地址https://www.toymoban.com/news/detail-552729.html


这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类,其使用和goodFeaturesToTrack函数基本相似。

GFTTDetector功能

GFTTDetector类用来提取对线的角点特征,角点检测(Corner Detection)也称为特征点检测,是图像处理和计算机视觉中用来获取图像局部特征点的一类方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模以及目标识别等领域中。

最常用的角点检测算法有梯度直方图HOG,Haar特征和Haris角点检测,上面这三种在之前都介绍过,

1.Haar特征
2.梯度直方图HOG
3.HS角点检测

这些方法都是使用了图像中的局部信息提取了局部特征。

如同在HS角点检测中介绍的,图像灰度的变化可以分成3种情况:

  • 在两个方向上灰度变化剧烈,角点
  • 在单个方向上灰度变化剧烈,边
  • 在两个方向上灰度变化都不大,平坦区域

如下图:

17.OpenCV中的GFTTDetector类,OpenCV,opencv,人工智能,计算机视觉

对于给定图像 I ( x , y ) I(x, y) I(x,y)上一个宽高为 w × h w \times h w×hpatch窗口,计算该窗口平移一段微小距离时各个像素值差的平方和为:

E ( μ , v ) = ∑ x w ∑ y h ω ( x , y ) [ I ( x + μ , y + v ) − I ( x , y ) ] 2 E(\mu,v)=\sum_x^w\sum_y^h\omega(x,y)[I(x+\mu, y+v)-I(x,y)]^2 E(μ,v)=xwyhω(x,y)[I(x+μ,y+v)I(x,y)]2

omega(x,y)是窗口函数,可以使用窗口中的像素均值或者使用高斯函数。

根据泰勒公式展开上式:

I ( x + μ , y + v ) ≈ I ( x , y ) + I x ( x , y ) μ + I y ( x , y ) v I(x+\mu, y+v)\approx I(x,y)+I_x(x,y)\mu+I_y(x,y)v I(x+μ,y+v)I(x,y)+Ix(x,y)μ+Iy(x,y)v

故,

E ( μ , v ) ≈ [ u , v ] M ( x , y ) [ μ v ] E(\mu,v)\approx[u,v]M(x, y)\begin{bmatrix} \mu\\ v \end{bmatrix} E(μ,v)[u,v]M(x,y)[μv]

其中,

M ( x , y ) = [ I x 2 I x I y I x I y I y 2 ] = [ A C C B ] M(x, y)=\begin{bmatrix} I_x^2 & I_xI_y\\ I_xI_y &I_y^2 \end{bmatrix} = \begin{bmatrix} A & C\\ C & B \end{bmatrix} M(x,y)=[Ix2IxIyIxIyIy2]=[ACCB]

M ( x , y ) M(x, y) M(x,y)的定义可以看到,对于角点有左右边沿或上下边沿组成, I x I_x Ix I y I_y Iy总有一个近似于0,因此对于角点有,

M ( x , y ) = [ I x 2 0 0 I y 2 ] M(x, y)=\begin{bmatrix} I_x^2 & 0\\ 0 &I_y^2 \end{bmatrix} M(x,y)=[Ix200Iy2]

这里考虑的是左右上下边沿与图像高宽平行组成的角点,对于旋转和缩放的角点需要单独讨论。

在判断是否为角点时,为了减少运算量,通常并不会计算M的特征值,而使用M的行列式和迹来计算:

R = d e t ( M ) − α ( t r a c e ( M ) ) 2 R = det(M) - \alpha(trace(M))^2 R=det(M)α(trace(M))2

α \alpha α是一个经验常数,用来控制检测到角点的数量, α \alpha α值越小检测到的角点越多,相应的质量也会下降。

  • I x I_x Ix I y I_y Iy都很大时, R R R取较大正值,说明是角点
  • I x I_x Ix I y I_y Iy一大一小时, R R R取较大负值,说明是边
  • I x I_x Ix I y I_y Iy都很小时, R R R绝对值较小,说明是平坦区域

GFTTDetector中使用的是Shi-Tomasi 角点检测器,其直接使用 R = m i n ( I x , I y ) R=min(I_x, I_y) R=min(Ix,Iy)作为角点的度量,减少了超参数和运算量。

OpenCV中GFTTDetector类

调用GFTTDetector类中的静态函数create可以创建cv::Ptr<GFTTDetector>

create函数参数为:


static Ptr<GFTTDetector> cv::GFTTDetector::create	(	
    int 	maxCorners = 1000,
    double 	qualityLevel = 0.01,
    double 	minDistance = 1,
    int 	blockSize = 3,
    bool 	useHarrisDetector = false,
    double 	k = 0.04 
)		
  • maxCorners控制最多检测到的角点数量
  • qualityLevel控制角的质量水平,例如最好的是1500, qualityLevel0.01,则quality measure小于1500*0.01的将被舍弃
  • minDistance角点之间的最小距离
  • blockSize计算梯度相关矩阵时使用的邻域大小
  • useHarrisDetector是否使用Harris角点检测
  • k,Harris角点检测的超参数

代码示例:

#include <memory>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/features2d.hpp>

class TestGFTTDetector
{
    public:
        typedef std::shared_ptr<TestGFTTDetector> Ptr;
        TestGFTTDetector();
        ~TestGFTTDetector() = default;
        void compute(cv::Mat &image);

    private:
        cv::Ptr<cv::GFTTDetector> gftt_ptr_;
        std::vector<cv::KeyPoint> keypoints_;
};

TestGFTTDetector::TestGFTTDetector()
{
    gftt_ptr_ = cv::GFTTDetector::create(1000, 0.1, 10);
}


void TestGFTTDetector::compute(cv::Mat &image)
{   
    cv::Mat mask(image.size(), CV_8UC1, 255);
    gftt_ptr_->detect(image, keypoints_, mask);
    for(auto &kp : keypoints_) {
        cv::circle(image, kp.pt, 3, cv::Scalar(255, 0, 0));
    }
    std::cout << "keypoints_.size: " << keypoints_.size() << std::endl;
    cv::imshow("gftt_detector_result", image);
    cv::waitKey(0);

    cv::goodFeaturesToTrack()
}

int main(int argc, char **argv)
{
    TestGFTTDetector::Ptr gftt = std::make_shared<TestGFTTDetector>();
    cv::Mat image = cv::imread(argv[1]);
    gftt->compute(image);
    return 0;
}

检测结果如下:

17.OpenCV中的GFTTDetector类,OpenCV,opencv,人工智能,计算机视觉

可以看到检测的结果还是很好的,不过中间大六边形上面的两个角点还是没有检测到,感兴趣可以改小 k k k的值试一下。

使用的图片在OpenCV代码仓库中opencv-4.5.5/samples/data/blox.jpg


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


reference

  • 1.https://senitco.github.io/2017/06/18/image-feature-harris/
  • 2.https://docs.opencv.org/4.5.5/df/d21/classcv_1_1GFTTDetector.html

到了这里,关于17.OpenCV中的GFTTDetector类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Call for papers】NeurIPS-2023(CCF-A/人工智能/2023年5月17日截稿)

    The conference was founded in 1987 and is now a multi-track interdisciplinary annual meeting that includes invited talks, demonstrations, symposia, and oral and poster presentations of refereed papers. Along with the conference is a professional exposition focusing on machine learning in practice, a series of tutorials, and topical workshops that provide a l

    2024年02月04日
    浏览(51)
  • 《花雕学AI》17:关注提示工程—本世纪最重要的技能可能就是与AI人工智能对话

    本文目录与主要结构 引言:介绍提示工程的概念和背景,说明为什么它是本世纪最重要的技能之一。 正文: 一、提示工程的基本原理和方法:介绍什么是提示、如何设计和优化提示、如何使用提示与语言模型进行交互。 二、提示工程的应用和案例:介绍提示工程在不同领域

    2023年04月13日
    浏览(42)
  • python在人工智能中的应用,python人工智能100例子

    大家好,小编为大家解答python语言在人工智能领域的重要性的问题。很多人还不知道python在人工智能领域究竟做什么,现在让我们一起来看看吧! Source code download: 本文相关源码 本篇文章给大家谈谈python语言在人工智能领域的重要性,以及python在人工智能领域究竟做什么,希

    2024年02月21日
    浏览(54)
  • 人工智能:让生活更便捷、更智能——探讨人工智能在生活中的作用与挑战

    人工智能相关的领域,随着计算机的诞生就逐步在不断发展。然而受到计算力和数据存储的限制,21世纪以前其发展经历坎坷,在人们的反复不断的质疑声中曲折前进。而随着近年来人工智能领域的发展,其中如机器学习和深度学习技术的发展和应用,人工智能的热潮又通过

    2024年02月05日
    浏览(58)
  • 人工智能隐私保护中的人工智能安全与隐私保护标准

    作者:禅与计算机程序设计艺术 在传统信息安全的基础上,近年来人工智能领域也越来越重视隐私保护。但是由于当前人工智能模型普遍存在缺陷,在实际应用中也会产生隐私泄露等严重问题。所以,对于人工智能系统、服务的安全性和隐私保护要求更高。 随着人工智能技

    2024年02月14日
    浏览(46)
  • 人工智能在物流数据分析中的应用:基于人工智能的物流智能监控与分析

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着全球经济的快速发展和物流行业的不断壮大,对物流管理的效率与质量的要求也越来越高。传统的物流管理手段已经难以满足现代物流行业的需要,人工智能技术在物流管理中的应用显得尤为重要。 1.2. 文章目的 本文旨

    2024年02月08日
    浏览(55)
  • 人工智能在法律智能搜索中的应用

    作者:禅与计算机程序设计艺术 《人工智能在法律智能搜索中的应用》 1.1. 背景介绍 随着人工智能技术的快速发展,自然语言处理、机器学习、深度学习等技术已经在人们的生活中发挥了越来越重要的作用。在法律领域,人工智能技术可以高效地帮助律师和法律从业人员进

    2024年02月09日
    浏览(65)
  • 人工智能中的顶会

    本片主要是对人工智能领域下的一些顶会进行梳理,对顶会进行了解,以后会对了解到的顶会做一个梳理,拓宽自己对顶刊顶会的认知。 如果大家有什么新的想法,非常欢迎大家一起探讨和讨论。目前只是对这些顶级会议做一个简单的说明,后续了解深入后,还会继续不断更

    2023年04月15日
    浏览(34)
  • 智能数据应用在人工智能伦理中的应用

    人工智能伦理是人工智能技术在现实世界中的应用,它涉及到人工智能系统的设计、开发、部署和使用的道德、法律、社会和道德方面的问题。智能数据应用在人工智能伦理中的应用,是一种利用数据驱动的人工智能技术,为解决人工智能伦理问题提供支持和解决方案。 随着

    2024年02月20日
    浏览(42)
  • Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛

    Hadoop的核心就是HDFS和MapReduce HDFS为海量数据提供了 存储 而MapReduce为海量数据提供了 计算框架 一.HDFS 整个HDFS有三个重要角色: NameNode (名称节点)、 DataNode (数据节点)和 Client (客户机) NameNode :是Master节点(主节点) DataNode : 是Slave节点(从节点),是文件存储的基本

    2024年02月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包