Hough变换检测直线与圆的原理

article/2025/9/29 5:28:02

霍夫变换的基本原理

霍夫变换(Hough Transform)可以理解为图像处理中的一种特征提取技术,通过投票算法检测具有特定形状的物体。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间中的一个点形成峰值,从而把检测任意形状的问题转化为统计峰值问题。(把这句话背下来吧)

毕设项目演示地址: 链接

毕业项目设计代做项目方向涵盖:

目标检测、语义分割、深度估计、超分辨率、3D目标检测、CNN、GAN、目标跟踪、竞赛解决方案、人脸识别、数据增广、人脸检测、数据集、NAS、AutoML、图像分割、SLAM、实例分割、人体姿态估计、视频目标分割、Re-ID、医学图像分割、显著性目标检测、自动驾驶、人群密度估计、PyTorch、人脸、车道线检测、去雾 、全景分割、行人检测、文本检测、OCR、6D姿态估计、 边缘检测、场景文本检测、视频实例分割、3D点云、模型压缩、人脸对齐、超分辨、去噪、强化学习、行为识别、OpenCV、场景文本识别、去雨、机器学习、风格迁移、视频目标检测、去模糊、显著性检测、剪枝、活体检测、人脸关键点检测、3D目标跟踪、视频修复、人脸表情识别、时序动作检测、图像检索、异常检测等

直线检测

背景知识

高中的时候我们都学过笛卡尔坐标系 (x, y) 也就是直角坐标系,在这个坐标系中可以有很多种方法来表示一条直线,例如点斜式 y − b = k ∗ ( x − a ) y - b = k*(x - a) yb=k(xa) 或者两点式 y − y 2 = y 1 − y 2 x 1 − x 2 ∗ ( x − x 2 ) y - y_2 = \frac{y_1 - y_2}{x_1 - x_2}*(x - x_2) yy2=x1x2y1y2(xx2) ,但是在霍夫变换中我们使用的是另外一种表示方法即极坐标系,使用两个变量 ( r , θ ) (r, \theta) (r,θ) 来表示一条直线,具体地 r r r 为一条直线到原点的距离, θ \theta θ 为该直线的垂线与 x 轴的夹角。

img img img

hough变换检测直线的流程

怎么来检测一条直线呢?我们可以取需要检测的图像上的 N 个点,为每个点假设 n 个方向的直线(空间中经过一个点的直线有无数条),通常 n = 180 ,分别计算这 n 条直线的 ( r , θ ) (r, \theta) (r,θ) 坐标,既可以得到 n 个坐标,N 个点就是 N*n 个 ( r , θ ) (r, \theta) (r,θ) 坐标。

那么如果有多个点在一条直线上,那么这几个点在 θ \theta θ 的某个取值 θ i \theta_i θi 处的 r i r_i ri 相等,如果图中只有这条直线的话,那么 θ = θ i \theta = \theta_i θ=θi 时的 $r_i $ 的统计量是最多的,找到这个 θ i \theta_i θi 就意味着找到了这条直线。

拓展到一张图中有多条直线的情况,我们可以设置一个阈值来选择前 k 个统计量的 ( r i , θ i ) (r_i, \theta_i) (ri,θi) 来检测 k 条直线。当然还有相邻两条直线的拼接或者长度要超过某个阈值的直线才需要输出的问题,这些就要看怎么去实现了,不是我们这篇文章的要点,这些功能在 opencv 中都有实现,需要的可以去了解。

下面拿一个博客中的例子来说明:

img

如果空间中有3个点,如何判断这三个点在不在一个直线上?这个例子中,对于每个点均求过该点的6条直线的 ( r , θ ) (r,\theta) (r,θ) 坐标,共求了3*6个 ( r , θ ) (r,\theta) (r,θ) 坐标。可以发现在 θ = 60 \theta = 60 θ=60 时,三个点的 r 都近似为80.7,由此可判定这三个点都在直线(80.7,60)上。

通过 ( r , θ ) (r, \theta) (r,θ) 坐标系可以更直观表示这种关系,如果对于一个给定点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ,我们在极坐标系下画出经过该点的所有直线的极坐标表示,将得到一条正弦曲线。下图是直角坐标系下的三个点在极坐标系下绘出的图:图中三个点的 ( r , θ ) (r, \theta) (r,θ) 曲线汇集在一起,该交点就是同时经过这三个点的直线。

img

hough变换检测圆的流程

检测直线的时候我们使用 ( r , θ ) (r, \theta) (r,θ) 来表示一条直线,在检测圆时我们是使用 ( a , b , r ) (a,b,r) (a,b,r) 来表示确定一个圆心为 ( a , b ) (a,b) (a,b) 半径为 r r r 的圆。

当某个圆过点 ( x , y ) (x,y) (x,y) 时,满足 ( x − a ) 2 + ( y − b ) = r 2 (x - a)^2 + (y - b) = r^2 (xa)2+(yb)=r2 ,所以过点 ( x , y ) (x,y) (x,y) 的所有圆可以表示为 ( a ( i ) , b ( i ) , r ( i ) ) (a^{(i)},b^{(i)}, r^{(i)}) (a(i),b(i),r(i)) 。与上面检测直线的原理一样,要检测三个点是否在同一个圆上,首先计算过第一个点的所有圆表示为 ( a 1 ( i ) , b 1 ( i ) , r 1 ( i ) ) (a_1^{(i)},b_1^{(i)}, r_1^{(i)}) (a1(i),b1(i),r1(i)) ,过第二个点的所有圆表示为 ( a 2 ( i ) , b 2 ( i ) , r 2 ( i ) ) (a_2^{(i)},b_2^{(i)}, r_2^{(i)}) (a2(i),b2(i),r2(i)) ,过第三个点的所有圆表示为 ( a 3 ( i ) , b 3 ( i ) , r 3 ( i ) ) (a_3^{(i)},b_3^{(i)}, r_3^{(i)}) (a3(i),b3(i),r3(i)) ,如果这三个点在同一个圆上,那么存在一个值 ( a k , b k , r k ) (a_k, b_k, r_k) (ak,bk,rk) 是三个点的所有圆表示中都存在的,也就是说这三个点同时在圆 ( a k , b k , r k ) (a_k, b_k, r_k) (ak,bk,rk) 上。

下面借助这张图来形象理解:

先说说怎么表示过点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 的所有圆的表示。当 r 1 r_1 r1 确定时,根据 $(x_1 - a_1)^2 + (y_1 - b_1) = r_1^2 $ ,即 ( a 1 , b 1 ) (a_1,b_1) (a1,b1) 的轨迹则变成了以 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 为圆心 r 1 r_1 r1 为半径的圆,取完所有的 r 1 i r_1^i r1i ( a 1 ( i ) , b 1 ( i ) , r 1 ( i ) ) (a_1^{(i)},b_1^{(i)}, r_1^{(i)}) (a1(i),b1(i),r1(i)) 的轨迹便如图中的一个圆锥,三个点的所有圆表示形成的圆锥的交点 A 所对应的那个 ( a k , b k , r k ) (a_k, b_k, r_k) (ak,bk,rk) 便是经过这三个点的圆。img

椭圆或者其他形状同理,只要找到一种表示即可将在一个空间中的形状问题变换到另一个空间的点统计问题。

拓展

图像处理中,在使用霍夫线变换之前,要首先对图像进行边缘检测,即霍夫线变换的直接输入只能是边缘二值图像。


http://chatgpt.dhexx.cn/article/4bK8ex3C.shtml

相关文章

Hough变换圆检测定位

Hough变换基本原理 Hough变换是由Paul Hough于1962年提出的一种检测圆的算法,它的基本思想是将图像从原图像空间变换到参数空间,在参数空间中,使用大多数边界点都满足的某种参数形式作为图像中的曲线的描述,它通过设置累加器对参…

【图像处理——hough变换那些事】

#老板的每一次点赞,都是对小编精神上的支持,愿各位老板一路长虹,学习进步。 点赞点赞!!!! #author:yyt time:2023.5.5 #机器学习—图像处理 #本文为小编第一次写文章&#…

基于Hough变换的直线检测(Matlab)

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 作者丨无敌三脚猫 来源丨 古月居 1、引言 该程序实现了一些基本的图像处理算法,并将它们组合在一起,构建了一个基于霍夫变换的直线检测器。该程序能够在图像中找到直线段的起始点和结束…

Hough变换原理

霍夫变换在识别方程式已知的曲线是常用的一种方法,本文通过识别直线方程为向导,说明霍夫变换的原理。 话不多说,开始今天的主题,我们处理的对象是二值黑白图像,如下图: 上图是我自绘的五个点,考…

图像处理算法 之 Hough变换

Hough变换 一、标准Hough线变换(SHT)1.1 原理1.2 SHT步骤1.3 缺点 二、渐进概率Hough变换(PPHT)2.1 原理及步骤2.2 缺点 三、Hough圆变换3.1 原理及步骤3.2 缺点 四、实验代码 一、标准Hough线变换(SHT) 1.1 原理 标准Hough变换(standard hough transform&#xf…

MATLAB中的Hough变换

下面来介绍一下关于Hough变换的原理及其如何在MATLAB中实现。 Hough变换:Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。国内外对Hough变换的研究及…

智能图像分析——Hough变换

一、原理 引用 hough变换利用点、线对偶的思想,把提取图像空间中直线的问题转换成在参数空间/hough空间中计算点的峰值的问题。 在x − y坐标系中,假设有一条直线过点( x0 , y0 ),那么我们可以把这条直线的方程记为 ymxb(1&#…

霍夫Hough变换

参考: https://blog.csdn.net/qq_15971883/article/details/80583364 MATLAB帮助文档 Hough变换是一种使用表决方式的参数估计技术,其原理是利用图像空间和Hough参数空间的线-点对偶性,把图像空间中的检测问题转换到参数空间中进行。 利用Hough变换检测直线 记住:直角坐标…

Hough变换及MATLAB示例

前言 在车道线检测中,最小二乘法,Hough变换是车道线模型拟合的传统方法之一,通过一系列离散的点拟合出车道直线,也就是得到基于像素平面坐标系的左车道和右车道直线方程。 Hough变换 Hough变换的基本思想 我们先来看看如何表达…

hough变换算法

VoteNet网络中会用Deep Hough Voting,所以先来学习一下Hough Voting。 正文开始 hough变换算法 1、算法思想 霍夫变换于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推广使用,经典霍夫变换用来检测图像中的直线&…

Hough 变换

Hough 变换是图像处理中,检测直线最基本,也是应用最广泛的一种传统方法。虽然现在是深度学习大行其道的时代,但是很多传统的算法,依然有其参考的价值所在,至少从数学表达上来看,是更加的简洁,有…

Hough transform(霍夫变换)

主要内容: 1、Hough变换的算法思想 2、直线检测 3、圆、椭圆检测 4、程序实现 一、Hough变换简介 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变…

Hough变换

目录 一、Hough变换简介 二、Hough变换的数学理解 1.x-y变量空间至k-b参数空间的变换 2.x-y变量空间至-空间的变换 三、Hough变换应用于线检测(MATLAB实现) 1.检测步骤 2.使用MATLAB工具箱中的Hough变换函数进行边缘检测 一、Hough变换简介 霍夫变…

图像处理:Hough变换原理分析

目录 一、前言 二、直线函数的形式化表示 2.1 直线被方程表示 2.2 直线被图表表示 2.3 直线的表格表示 三、hough变换的提出 3.1 极坐标表示点和线 四、 hough变换的原理 4.1 极坐标的​编辑表格 4.2 用​编辑平面表示:过任意点P(x,y)做所有射线&#xff0…

Hough变换原理-直线检测

目录 一、简介 二、原理 三、Python代码实现 一、简介 Hough(霍夫)变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换是将图像坐标空间变换到参数空间,利用点与线的对偶性,将原始图像空间的给定的曲线&#xff08…

YUV444、YUV422、YUV420、YUV420P、YUV420SP、YV12、YU12、NV12、NV21

前言 各种YUV格式多如牛毛啊,刚开始学起来确实很费劲,网上搜索的文章讲的并不是很明白。 各种不同的YUV格式其实只是采样方式和存储方式不同,就这两点,不同的采样方式是为了实现节省内存,不同的存储方式暂时不了解有…

2023-02-24:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,采用YUV420P转YUV420SP的方式。

2023-02-24:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,采用YUV420P转YUV420SP的方式。 答案2023-02-24: 使用 github.com/moonfdd/ffmpeg-go 库。 解码后就是yuv420p,然后用SwsScale函数转换成yuv…

ffmpeg处理YUV422和YUV420P相互转换

YUV422空间大小计算 YUV422封包width*heightwidth/2*height*2YUYV Y分量width*heightYUYV U分量width/2*heightYUYV V分量width/2*height YUV420空间大小计算 YUV420封包width*heightwidth/2*height/2*2Y分量width*heightU分量width/2*height/2V分量width/2*height/2 extern &…

Android Camera2 YUV420_888 格式详解

Camera2 YUV420_888 官网文档介绍 Android PAI 对 YUV420_888的介绍 ,大致意思如下: 它是YCbCr的泛化格式,能够表示任何4:2:0的平面和半平面格式,每个分量用8 bits 表示。带有这种格式的图像使用3个独立的Buffer表示,每…

【音视频数据数据处理 2】【YUV篇】将YUV420P_I420数据旋转90°-180°-270°-镜像旋转

【音视频数据数据处理 2】【YUV篇】将YUV420P_I420数据旋转90 一、理论分析(以yuv420p_i420格式为例)二、顺时针旋转90 代码实现三、顺时针旋转180 代码实现四、旋转90-180-270-镜像旋转,完整代码实现五、运行结果 本文接着前文: …