OpenCV特征检测(6)对初步检测到的角点位置进行亚像素级别的精炼函数cornerSubPix()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

细化角点的位置。
该函数迭代以找到角点或径向鞍点的亚像素级准确位置,如 93中所述,并如下图所示。
在这里插入图片描述
亚像素级准确的角点定位器基于这样一个观察:从中心点 q 到位于 q 的邻域内的某个点 p 的每一个向量都垂直于 p 处的图像梯度,前提是图像和测量噪声的影响。考虑以下表达式:
ϵ i = D I p i T ⋅ ( q − p i ) \epsilon _i = {DI_{p_i}}^T \cdot (q - p_i) ϵi=DIpiT(qpi)
其中 D I p i {DI_{p_i}} DIpi 是邻域中某一点 p i p_i pi处的图像梯度。需要找到 q 的值,使得 ϵ i \epsilon_i ϵi 最小化。可以建立一个方程组,将 ϵ i \epsilon_i ϵi设为零:

∑ i ( D I p i ⋅ D I p i T ) ⋅ q − ∑ i ( D I p i ⋅ D I p i T ⋅ p i ) \sum _i(DI_{p_i} \cdot {DI_{p_i}}^T) \cdot q - \sum _i(DI_{p_i} \cdot {DI_{p_i}}^T \cdot p_i) i(DIpiDIpiT)qi(DIpiDIpiTpi)
其中梯度是在 q 的邻域(“搜索窗口”)内求和。称第一个梯度项为 G,第二个梯度项为 b,则有:
q = G − 1 ⋅ b q = G^{-1} \cdot b q=G1b
算法将邻域窗口的中心设置在这个新的中心 q 上,然后迭代直到中心保持在一个设定的阈值内。

函数原型

void cv::cornerSubPix	
(InputArray 	image,InputOutputArray 	corners,Size 	winSize,Size 	zeroZone,TermCriteria 	criteria 
)		

参数

  • 参数image 输入单通道 8 位或浮点图像。

  • 参数corners 输入角点的初始坐标,并提供输出精炼后的坐标。

  • 参数winSize 搜索窗口边长的一半。例如,如果 winSize = Size(5, 5),则使用 (52+1)×(52+1) = 11×11 的搜索窗口。

  • 参数zeroZone 搜索区域内中间死区大小的一半,在该区域内公式下的求和不做。有时用于避免自相关矩阵可能的奇异情况。值 (-1, -1) 表示没有这样的大小。

  • 参数criteria 迭代过程角点精炼的终止标准。也就是说,角点位置精炼的过程在达到 criteria.maxCount 次迭代或在某次迭代中角点位置移动小于 criteria.epsilon 时停止。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cout << "Error opening image" << std::endl;return -1;}// 检测角点std::vector< cv::Point2f > corners;cv::goodFeaturesToTrack( img, corners, 100, 0.01, 10, cv::Mat() );// 设置搜索窗口大小cv::Size win( 5, 5 );// 设置零区间大小cv::Size zeroZone( -1, -1 );// 设置终止标准cv::TermCriteria criteria( cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.01 );// 对角点进行亚像素级别的精炼cv::cornerSubPix( img, corners, win, zeroZone, criteria );// 在原始图像上标记精炼后的角点cv::Mat imgColor;cv::cvtColor( img, imgColor, cv::COLOR_GRAY2BGR );for ( const auto& corner : corners ){cv::circle( imgColor, corner, 2, cv::Scalar( 0, 0, 255 ), 2 );  // 画红色圆圈}// 显示标记角点的图像cv::imshow( "Original Image", img );cv::imshow( "Refined Corners", imgColor );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145910.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Unsupervised Deep Representation Learning for Real-Time Tracking

摘要 我们的无监督学习的动机是稳健的跟踪器应该在双向跟踪中有效。具体来说&#xff0c;跟踪器能够在连续帧中前向定位目标对象&#xff0c;并回溯到其在第一帧中的初始位置。基于这样的动机&#xff0c;在训练过程中&#xff0c;我们测量前向和后向轨迹之间的一致性&#xf…

AIGC实战之如何构建出更好的大模型RAG系统

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

zabbix“专家坐诊”第256期问答

原作者&#xff1a;乐维社区 原文链接&#xff1a;https://forum.lwops.cn/questions 问题一 Q&#xff1a;zabbix 6.4.18版本的&#xff0c;使用zabbix_agentd2监控mysql数据库&#xff0c;只能在界面配置mysql的相关信息吗&#xff1f;这个在zabbix表里面是明文存储的&#x…

VUE面试题(单页应用及其首屏加载速度慢的问题)

目录 一、单页应用 1.概念 2.单页面应用的优缺点 二、多页面应用&#xff1a; 1.概念 2.区别 三、SPA的实现 1.原理 2.方式&#xff1a; 3.Hash与History模式有什么区别 四、首屏加载速度慢如何优化 1.什么是首屏加载&#xff1f; 2.首屏加载慢的原因 3.如何解决…

滑动窗口(8)_最小覆盖字串

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(8)_最小覆盖字串 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题…

【C++指南】inline内联函数详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…

Why is OpenAI image generation Api returning 400 bad request in Unity?

题意&#xff1a;为什么 OpenAI 图像生成 API 在 Unity 中返回 400 Bad Request 错误&#xff1f; 问题背景&#xff1a; Im testing out dynamically generating images using OpenAI API in Unity. Amusingly, I actually generated most of this code from chatGPT. 我正在…

选择优质代理IP建议分享

“在互联网的广阔世界中&#xff0c;代理IP作为一种重要的网络工具&#xff0c;扮演着连接用户与目标服务器之间的桥梁角色。不同类型的代理IP适用于不同的场景和需求&#xff0c;因此选择合适的代理IP类型对于提高网络访问效率、保护用户隐私至关重要。” 一、代理IP类型概述 …

感谢老美苦苦相逼,逼出华为鸿蒙PC

文&#xff5c;琥珀食酒社 作者 | 随风 哎&#xff0c;告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…

MySQL高阶1873-计算特殊奖金

目录 题目 准备数据 分析数据 总结 题目 编写解决方案&#xff0c;计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 M 开头&#xff0c;那么他的奖金是他工资的 100% &#xff0c;否则奖金为 0 。 返回的结果按照 employee_id 排序。 准备数据 Crea…

Java设计模式——简单工厂模式(完整详解,附有代码+案例)

文章目录 5.2简单工厂模式5.2.1 概述5.2.2 结构5.2.3 实现5.2.4 优缺点5.2.5 扩展—静态工厂 5.2简单工厂模式 5.2.1 概述 简单工厂不是一种设计模式&#xff0c;反而比较像是一种编程习惯。 不属于GOF的23种经典设计模式 5.2.2 结构 简单工厂包含下角色&#xff1a; 抽象…

ISSTA 2024现场精彩:“杰出论文奖”超半数属于中国学者

ISSTA会议是软件工程领域中最具影响力的国际会议之一&#xff0c;也是中国计算机学会&#xff08;CCF&#xff09;推荐的A类会议。 第33届ISSTA会议已于奥地利维也纳圆满结束&#xff0c;这场盛会已经吸引了众多来自学术界和工业界的软件测试专家、研究人员和工程师&#xff0c…

doris数据库的坑:第二弹

上一篇文章《doris数据库操作数字遇到的问题》是第一弹&#xff0c;文章结尾提到过doris不支持with语句&#xff0c;其实是因为我自己没找到正确使用的方式导致的。昨天因为客户现场有一个解析SQL的接口提示异常&#xff0c;所以就开始了长路漫漫的排查之旅。不过首先承认及纠正…

英飞凌 PSoC6 RT-Thread 评估板硬件概览

PSoC™ 62 with CAPSENSE™ evaluation kit 开发板&#xff08;以下简称 PSoC 6 RTT 开发板&#xff09;是英飞凌&#xff08;Infineon&#xff09;联合 RT-Thread 发布一款面向物联网开发者的 32 位双核 MCU 开发套件&#xff0c;其默认内置 RT-Thread 物联网操作系统。本文主…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

C#基础(15)选择排序

前言 上一节中我们已经学习了第一个算法&#xff1a;冒泡算法&#xff0c;相信你也有足够的自信继续学习更多的算法。 今天我们就来讲解又一个排序相关的算法&#xff1a;选择排序。 时间复杂度 在进行今天的排序算法讲解之前&#xff0c;我们先补充一个知识点&#xff1a…

单链表(c语言简单实现)

单链表是一种常见的数据结构 一、结构特点 1. 由一系列节点组成&#xff0c;每个节点包含数据域和指向下一个节点的指针域。 2. 最后一个节点的指针域为 null&#xff0c;表示链表的结尾。 二、主要操作 1. 插入节点&#xff1a;可以在链表的头部、尾部或特定位置插入新节点。…

Docker安装rabbitmq并配置延迟队列

下载rabbitmq镜像 docker pull rabbitmq:management 运行rabbitmq镜像 docker run -id --namerabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -e RABBITMQ_DEFAULT_USERtom -e RABBITMQ_DEFAULT_PASStom rabbitmq:management …

windows环境下MySQL启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步&#xff0c;在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志&#xff0c;记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

电子束光刻过程中的场拼接精度

以下内容如有错误&#xff0c;请不吝指教&#xff0c;感谢&#xff01; 1、EBL为什么会出现场拼接误差&#xff0c;如何解决&#xff1f; ChatGPT 说&#xff1a; 在电子束光刻&#xff08;EBL&#xff09;过程中&#xff0c;SOI&#xff08;硅绝缘体&#xff09;芯片上出现*…