9.霍夫变换:圆——介绍、用Hough检测圆、圆的Hough变换_1

2024-02-29 07:08

本文主要是介绍9.霍夫变换:圆——介绍、用Hough检测圆、圆的Hough变换_1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

介绍

用Hough检测圆

圆的Hough变换


介绍

画好直线之后,记住,线是参数模型最简单的形式,现在我们来看看更复杂的东西,也就是圆。

这是圆的方程,其中 a 和 b 是中心,r 是半径:

现在我们假设半径已知。我们只需要找到这些点的位置。

这里有一个圆,在这个圆上有三个点,这里的蓝点:

那么,霍夫空间是什么呢?

因为通常有三个未知数,a b r,但是我告诉过你们半径,霍夫空间就是 a 和 b :

对,中心位置 x 和 y 方向。现在我们考虑第一点,比如说,x0 y0,这一点就在下面图片那里:

所以这个点必须在圆上,我们知道它的半径 r。

一种思考方法是:圆的半径是这个点的半径 r,它的作用是为一组点投票,这就是这条绿线所代表的。

这一组点在ab空间的这个位置附近,对吧?

对于图像空间中的一个点,我们在霍夫空间中得到半径为r的圆:

让我们进入下一点:

是一样的,所以它的半径是r。

在霍夫空间中,我们会沿着这个圈投票:

下一点:

如果图像中的每个点都投了一个圈,我们就会得到所有的选票:

就像之前一样,我们在这里得到了大多数的选票这对应于中间点,这就是画在这里的点:

所以它的作用就像之前我们选直线一样,只是现在我们不用正弦曲线,而是在一个ab Hough的空间里画一个圆。

用Hough检测圆

事实上,这里有一个很好的运行例子:

这是一张非常古老的照片,但是你可以在这里看到,有一个保龄球,这是画十字的地方:

就像。。。给你们展示一些其他方法来找到这个移动的球,你可以想象寻找移动的东西。

毕竟,它还没有击中要害。但是当你寻找移动的物体时,他们会找到这个边界框。

我们怎么能找到比球更多的东西呢?

实际上,如果你仔细看,你会发现这条小巷很亮:

Okay,事实上,过一会儿我们会讨论反射函数和镜面反射函数,你们会讨论为什么在这条球道上你会看到球的图像。

因为这个,这里也有运动,所以你得到了这个边界框(如图)。但没关系,我们说的基本上就是它能找到那个圆。

这是另一个例子:

实际上,如果你输入Hough变换圆或者类似的东西到谷歌,在谷歌中,你寻找图像,你会得到这个图像。

这张照片是由Vivek Kwatra拍摄的,当时他还是个研究生,我班上的助教,大概是在1811年。

我们所做的就是把这些硬币放在有纹理的背景上然后拍张照片。

他这么做是因为他不得不这么做,因为他是我的助教。他现在是一个非常有名的人在做很酷的研究工作。

基本上,你可以用这个来计算边缘,这是它的边缘图像(如图),然后我们可以寻找圆。

现在,我们要用已知的半径方法。假设我们从一便士的半径开始。你可能会看到硬币中间有一个很好的亮点:

现在你可能还会注意到,有一些区域是膨胀的:

这里就没那么多了:

那是因为你可以在硬币的圆里面再装一个圆,

绕着圆的边缘,中心绕着圆的中间旋转:

这就是这个小圆的中心:

但在真正的硬币上,它们会对齐,所以你会得到一个更亮的点:

那么我们如何找到25美分硬币呢?

我们用一个更大的半径,我们再次投票,你会看到这些点在这里,这里,这里:

现在这个便士的边缘(如图),他们再次投票给这个圆,但不像25美分硬币那样结实。

这是原始的图像:

这些是组合探测:

这很酷,你知道,你可以找到圆圈。

圆的Hough变换

假设你真的不知道半径。

那么我们该怎么办呢? 让我们一起来思考这个问题。

现在我们的霍夫空间有三个维度,a b r(如图),因为我们不知道半径是多少。

如果我有一个点(如图),会发生什么?

现在,如果我们假设这个点的半径是7,那么它会是一个围绕这个点的圆,就像我们之前做的那样。

如果半径是3,它会是另一个围绕同一个点的圆,但会小一些:

所以,我希望你们能开始看到我们在这里得到的实际上是一个圆锥。

所以,在未知半径的情况下,每个点在这个三维空间里都为一个完整的圆锥进行投票。

这就是这个圆锥的外观, 不是一个填充的圆锥,而是一个曲面。

我们继续取圆的下一点,看它的作用是什么?

它会投票给另一个锥体,你可以把这些加起来:

现在我要告诉你们这是很痛苦的一件事情。

事实上,如果你们中有人做了一个类似于这个的随机课程的习题集,我们会告诉你们关于寻找圆的问题。

如果你试着在一个巨大的3D空间里投票,它不会工作得很好。

在后面的很多文章中,我们会讲到ransack,它会克服这个维度。

但现在,只要知道我们有一个小问题,那就是不断增大的投票空间。

虽然这个问题是可以解决的,但处理的过程有点痛苦。

还记得我们去掉投票数的方法之一就是使用梯度方向吗?

因为如果我已有一个点 和 我已经知道了该点的梯度,而它可能只有一条可能的线。

我们可以对圆做同样的事情。

现在我们有一个未知的半径,但是我们有一个梯度,我们的霍夫空间是a b r:

但这一次,这里的一个点会有对应的梯度:

现在,如果我们知道半径,我们就会得到一个可能的圆。

所以,如果现在你告诉我这是一个点(如图),这是我知道半径的梯度,那就是中心唯一的位置。

但是如果半径是它的一半,那么圆心就在这里:

或者中心,我猜它也可能在另一边:

所以,只有当你有梯度的时候,这样的单条线路的投票才会发生:

所以在霍夫空间中,即使它是一个三维的霍夫空间,你只会沿着一条线投票:

这样稍微好一点,至少让投票更容易。

当你有这个三维的霍夫空间时,你仍然有这个问题。


——学会编写自己的代码,才能练出真功夫。

这篇关于9.霍夫变换:圆——介绍、用Hough检测圆、圆的Hough变换_1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757953

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G