| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> C++OpenCV系统学习(9)——霍夫变换 -> 正文阅读 |
|
[人工智能]C++OpenCV系统学习(9)——霍夫变换 |
1.霍夫直线变换?1.1概述Hough Line Transform用来做直线检测,前提条件是边缘检测已经完成(Canny边缘检测),它是由平面空间到极坐标空间转换。 1.2霍夫直线变换原理? ? ? ?他是通过把图像上的所有像素点都变成极坐标空间,然后形成一条一条的曲线,如果所有的曲线都相交在一个点,那么这个点对应的和r值就表示直线的角度。这就说明在屏幕坐标上的直线,在极坐标空间找到了,我们拿到了和r重新反算到平面空间。 1.3补充? ? ? ? ?对于任意一条直线上的所有点来说,变换到极坐标中,从[0,360]空间,可以得到r的大小,属于同一条直线上点在极坐标空(r,theta)必然在一个点上有最强的信号出现,跟几乎此反算到屏幕坐标中就可以得到直线上个点的像素坐标,从而得到直线。 ?1.4 相关的API
下面的API不建议使用: ?建议使用的API: ?1.5 霍夫直线检测案例
结果如下所示: 上图分别是输入图像、边缘检测结果、以及霍夫直线检测的结果? ?2.霍夫圆检测?2.1霍夫圆检测原理? ????????从平面坐标圆上的点到极坐标转换的三个参数C(x0,y0,r)其中x0,y0是圆心,r 取一固定值时theta扫描360度,x y 跟着变化, 若多个边缘点对应的三维空间曲线交于一点,则他们在共同圆上,在圆心处有累积最大值,也可以用同样的阈值的方法来判断一个圆是否被检测到。 ?注: ????????因为霍夫圆检测对噪声比较敏感,所以首先要对图像做滤波(模糊降噪)。(比如椒盐噪声用中值滤波,其他的也可以用高斯模糊) ????????基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度(霍夫梯度法, 也叫2-1霍夫变换(21HT))的实现,分为两步(已封装到HoughCircles): ? ? ? ? 第一步:?Canny检测边缘,发现可能的圆心。圆心一定是在圆上的每个点的模向量上, 这些圆上点模向量的交点就是圆心, 霍夫梯度法的第一步就是找到这些圆心, 这样三维的累加平面就又转化为二维累加平面。 ????????第二步:基于第一步的基础上从候选圆心开始计算最佳半径大小。第二步根据所有候选中心的边缘非0像素对其的支持程度来确定半径。
2.2案例分析
?原始图像和输出结果如上图所示,圆形被检测出来 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 18:23:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |