以一般化视角串联霍夫变换(hough transform),从直线到圆再到广义霍夫变换

以一般化视角串联霍夫变换(hough transform),从直线到圆再到广义霍夫变换
以一般化视角串联霍夫变换(hough transform),从直线到圆再到广义霍夫变换

计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变换,其核心思想是把图像中属于某种图形的点集(二维)映射到一个点(可以是高维)上,这个点记录了点集中点的数目,使得程序通过搜索峰值找到该点,这个点就是后面要说到的图形的参数,而该参数的范围就叫做参数空间。霍夫变换不仅能够识别出图像中有无需要检测的图形,而且能够定位到该图像(包括位置、角度等),这就非常有用了。接下来将通过分析从简单到复杂的霍夫变换,导出霍夫变换的实质。

直线:检测直线的霍夫变换使用含极坐标参数的直线表示型式简称极坐标式(不是极坐标方程,

因为还是在笛卡尔坐标下表示)——

其中的两个参数的意义如下图:

为什么要用极坐标式而不直接用一般形式:ax+by=c(归一化可以去掉参数c),或者其他的如斜截式、截距式呢?首先它们都会遇到奇异情况,比如c=0,斜率=无穷大,其中一个截距=0;再一个是某些形式的参数空间不是闭的,比如斜截式的斜率k,取值范围从0到无穷大,给量化搜索带来了困难。而极坐标式就妙在距离和角度两个参数都是有界的,而且正余弦函数也有界不会发生奇异情况。

直线霍夫变换有两个参数,且这两个参数通过极坐标式相关联,所以程序在投票阶段(图形点集转换到一个点)只需要遍历其中一个,搜索峰值在二维参数空间进行。

圆:霍夫变换检测圆使用圆的标准式就可以了

——

我们发现圆的方程又比直线多了一个参数,这三个参数通过上面的方程相关联,因此在投票阶段需要遍历其中两个,搜索峰值在三维参数空间进行。如果图像比较大,那么这样的遍历搜索是相当耗时的,所以为了满足实时性后来又发展出其他检测圆的霍夫变换,比如概率霍夫变换,结合梯度信息的霍夫变换。

霍夫变换检测椭圆如果使用椭圆的标准式,那么将会有五个参数,它们通过标准式相关,检测圆就已经相当耗时了,如果再用这中方程形式处理势必失去实际用途。

Ballard (1981) 一般化了霍夫变换(Hough,1962),利用图形梯度量加快算法速度,形成了一般霍夫变换。

透过前面的检测直线、圆、一般霍夫变换,已经可以提取出霍夫变换的一个本质——给出图形的一个描述模式,比如图形点集的方程、函数、表格等,然后利用这个模式加上遍历参数空间,把属于该模式的图形点集投射到参数空间的一个点(实际的离散情况一般不会完美的集中到一点),这个点记录的是图形点数目。

一般霍夫变换之所以能处理任意形状的图形并不是找到了可以表示任意图形的方程(这是不可能的),而是使用表的形式描述一种图形,把图形边缘点坐标保存在一张表中,那么该图形就确定下来了,所以其实无论是直线(其实是线段)、圆、椭圆还是其他形状的几何图形,都可以使用同一方法处理,所不同的是这时候的图形是自定义的,是实在的,而代数方程表示的模式是连续的、抽象的,圆的方程只有一种,但自定义的圆却是无穷的,只要你认为它足够圆了就可以。当然两种表示都会有各自的优势和局限。有了表之后就需要找到一种可以把图形点集投射到参数空间的一点的转换算法,例如直线和圆霍夫变换通过方程(函数)及遍历把点集进行投射,使得属于某直线或圆的点集中到一个点;那么仅有一张描述图形边缘坐标点的表如何进行投射呢?我们可以把这张表看作是模板,进行模板匹配,大部分的点匹配成功也就可以理解为这些点都投射到一个点上,不过这时候不需要再搜索参数空间峰值了,这种模式可以认为是参数间没有任何关联,所以是完全的遍历。但有旋转加上缩放的情况模板匹配型的霍夫变换是十分耗时的,也可以想象成因为参数不相关所以增加遍历搜索时间。Ballard (1981) 的一般霍夫变换最精妙之处在于为参数增加了两个关联,使得有平移和旋转(无缩放)的情况只需要遍历一个参数,三个参数分别是图形的中心坐标(横纵),旋转角度(相对参考图形),Ballard 的算法预先把参考图形边缘点对中心的径向量保存起来,利用待搜索图形边缘点的梯度方向(用相对坐标轴的角度表示)作为索引找到相应的径向量,加上该量后就完成了投射,所以要遍历的参数只有旋转角度,所以说有两个关联。当然如果加上缩放就要遍历两个参数,这也只是和霍夫检测圆的规模一样而已。这种一般霍夫变换的图形表不再是直接保存坐标,而是边缘点的梯度加上径向量,还有一个中心坐标,给出了这些量同样的也就能够表示出一种图形了。然而这种一般霍夫变换也是有缺陷的,不少后来者提出了改进方法,这不在本文讨论范围。

再来强调一次,霍夫变换就是通过图形的一种表示模式,加上一种转换方法,把图形的点集投射到一个点上以便检测。我们已经能够知道,参数个数越少,需要遍历的参数个数约少(关联越多),参数空间越小则处理速度越快。所以设计一种合理的转换方法非常关键。

对于一种图形,在现实世界中可以有多种形变,线性的如:平移、旋转、透视;非线性的如:径变、切变、扭曲。每多考虑一种形变都会增加参数,比如把椭圆看作是圆的透视形变,结果多了两个参数,理论上可以去遍历每一个参数空间,但这不能满足实时性要求,所以参数之间约束(关联)越多则处理速度越快,一般霍夫变换就是例子,这就需要发挥主观创造力了。

霍夫变换

‘IEEE Transactions on Pattern Recognition And Machine Intelligence’ ‘IEEE Transactions on Image Processing’ 是最重要的两本,其它的如ICCV、CVPR、ECCV、NIPS、BMVC等的会议文章也非常好。 最小二乘线性拟合算法、随机霍夫变换、局部霍夫变换、 canny算子边缘检测、图像增强 霍夫变换 霍夫变换(Hough Transform)是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。 详细内容 我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一组直线。方程y0=kx0+b在参数k--b平面上是一条直线(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。 应用 这个性质就为我们解决问题提供了方法:首先,我们初始化一块缓冲区,对应于参数 平面,将其所有数据置为0.对于图像上每一前景点,求出参数平面对应的直线,把这 直线上的所有点的值都加1。最后,找到参数平面上最大点的位置,这个位置就是原 图像上直线的参数。上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参 数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最 终在参数平面上就会看到两个峰值点,依此类推。在实际应用中,y=k*x+b形式的直 线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用 中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就 对应到参数p—theta平面上的一条曲线上。其它的还是一样。 应用实例1

边缘检测与Hough变换实验报告----Matlab

边缘检测与Hough变换 实验目的:写一段代码实现一幅图像,其中分为以下两个步骤 1.使用Matlab中的canny算子进行边缘检测,可以让使用者交互式的输入不同 的Sigma的值实现边缘检测。 2.运用Hough变换来找到最突出的边缘,在图像中找到并画出最长的直线。 实验原理: canny算子边缘检测的基本原理是:采用二维高斯函数的任一方向上的一阶方向 导数为噪声滤波器,通过与图像f(x,y)卷积进行滤波,然后对滤波后的图像 寻找图像梯度的局部极大值,以确定图像边缘。 Canny边缘检测算子是一种最优边缘检测算子。其实现步骤如下: 1)用高斯滤波器平滑图像 2)计算滤波后图像梯度的幅值和方向 3)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值置零,以得到细化的边缘; 4)再用双阈值算法检测和连接边缘; 使用canny算子的edge函数调用格式为 BW=edge(I,'canny'); BW=edge(I,'canny',thresh,sigma); BW=edge(I,'canny',thresh); [BW,threshold]=edge(I,'canny',…); 2.Hough变换时最常用的直线提取方法,它的基本思想是:将直线上每一个 数据点变换为参数平面中的一条直线或曲线,利用共线的数据点对应的参数 曲线相交于参数空间中一点的关系,使得直线提取问题转化为计数问题。 Hough变换提取直线的主要优点是受直线中的间隙和噪声影响较小。 Hough检测直线的Matlab实现:在Matlab图像处理工具箱中提供了3个与 Hough变换有关的函数,分别为hough函数,houghpeaks函数和houghlines 函数。 hough函数的调用格式为[H,theta,rho]=hough(BW);其中BW为二值图像, H为Hough变换矩阵,theta为变换轴间隔θ,rho为元素个数。 Houghpeaks函数是用来提取Hough变换后参数平面上的峰值点。其调用格 式为peaks=houghpeaks(H,numpeaks),其中,H为Hough函数的输出,参数平 面的技术结果矩阵,参数numpeaks为指定要提取的峰值数目,默认值为1; 输出参数peaks为Q*2维峰值位置矩阵,其中Q为提取的峰值数目,peaks 的第q行分别存储第q个峰值的行和列坐标。 Hough函数用于在图像中提取参数平面上的峰值点对应的直线。其调用格式为lines=houghlines(BW,theta,rho,peaks) Lines=houghlines(…,param1,val1,param2,val2) 其中,BW与Hough函数的BW相同,为二值图象。theta和rho为hough 函数返回的输出,指示θ轴和ρ轴各个单元对应的值。Peaks为houghpeaks 函数返回的输出,指示峰值的行和列坐标,houghlines函数将根据这些峰值 提取直线。Param和val是参数对,用于指定是否合并或保留直线段的相关 参数,其取值有两种。当param=’MinLength’时,bal指定合并后的直线被保 留的门限长度,长度小于val的直线被舍去。当param=’FillGap’时,val指定 直线段被合并的门限间隔。如果两条斜率和截距均相同的直线段间隔小于

【CN109948470A】基于霍夫变换的停车线距离检测方法及系统【专利】

(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201910154827.0 (22)申请日 2019.03.01 (71)申请人 武汉光庭科技有限公司 地址 430000 湖北省武汉市东湖新技术开 发区凤凰园三路一号 (72)发明人 苏晓聪 杨颖  (74)专利代理机构 武汉河山金堂专利事务所 (普通合伙) 42212 代理人 胡清堂 (51)Int.Cl. G06K 9/00(2006.01) G06K 9/46(2006.01) (54)发明名称基于霍夫变换的停车线距离检测方法及系统(57)摘要本发明所述一种基于霍夫变换的停车线距离检测方法及系统,其无需依靠GPS信号或GPS信息的定位,只需要在要停车的位置在地面画一条等宽的白色横线,利用相机检测离地面白色横线,采用图像像素与距离遍历的方式拟合成一个距离多项式,计算出所标记横线中间距离当前车辆参考点的垂直距离,并以一定帧率将该线离车辆的垂直距离发送给控制系统,为该系统在倒车最后停车时提供一个较为精准的停车位置点,从而达到精准倒车的目的;其计算简单,但计算结果精确,既达到了与控制系统联调实现±10cm的停车精度,又避免了通过复杂的步骤计算相机姿 态从而获得距离。权利要求书3页 说明书7页 附图6页CN 109948470 A 2019.06.28 C N 109948470 A

1.一种基于霍夫变换的停车线距离检测方法,其特征在于,所述基于霍夫变换的停车线距离检测方法包括以下步骤: S1、在停车位的倒车终点位置画一条相对于倒车方向垂直的停车线,并在车体上安装相机,所述相机与地面形成一定倾角,使得车辆最后停止区域在相机垂直照射区域内; S2、用相机拍摄已知大小的棋盘图,对拍摄得到的棋盘图像按像素值位置进行图像遍历,把像素位置定义为自变量,实际位置距离定义为因变量,通过计算自变量与因变量的对应关系找到距离拟合多项式; S3、在车辆自动倒车时,相机实时采集彩色图像,通过直线段角度阈值和纵坐标方向像素距离阈值对采集的彩色图像进行干扰区域筛选,将直线段定位到停车线区域; S4、根据停车线上当前像素点和周围邻域间像素关系来区分检测结果是停车线的上沿还是下沿,根据上沿或下沿的位置确定停车线中间位置到相机的垂直距离; 其中, 所述距离拟合多项式的具体公式如下: 上式中,u,v为棋盘格角点的像素位置,x,y为棋盘格角点与相机之间的实际位置距离,P ij 、q ij 为拟合多项式的参数。 2.根据权利要求1所述基于霍夫变换的停车线距离检测方法,其特征在于,所述步骤S2包括以下分步骤: S21、选一个能覆盖相机垂直视野的棋盘格,将棋盘格的最底部边沿放置在相机的最下沿视野; S22、用安装在车体上的相机拍摄棋盘图,将棋盘中的角点提取出来并标定各角点的物理坐标值; S23、将多个角点的物理坐标值作为自变量,棋盘格角点的实际位置距离作为因变量拟合得到的一个二元二次的距离拟合多项式; S24、量出棋盘格左上角点到相机的物理垂直距离,将测量物理垂直距离作为多项式的常量相加即为图像上在任意像素点的位置与相机之间的垂直方向物理距离。 3.根据权利要求1所述基于霍夫变换的停车线距离检测方法,其特征在于,所述步骤S3包括以下分步骤: S31、在车辆自动倒车时,相机实时采集彩色图像,将彩色图像转换为灰度图像,并对图像使用坎尼算子来检测图像所有边缘; S32、在检测到边缘区域后,用累积霍夫变换来获取直线段候选区域; S33、通过直线段的斜率来保留图像中的横向直线段,并保留纵坐标上离相机最近的一个直线段; S34、将得到的直线段转换为点集,并将同一行上的点集集中起来用最小二乘法拟合成一条直线段,得到停车线的两条边沿直线。 4.根据权利要求1所述基于霍夫变换的停车线距离检测方法,其特征在于,所述步骤S4 权 利 要 求 书1/3页2CN 109948470 A

数字图像中的Hough变换应用--直线检测

摘要 为能够有效解决实时直线图形提取问题,提出了一种基于Hough变换(HT)的直线提取算法。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究,目前应用于生物医学、自动化和机器人视觉、空间技术和军事防御、办公自动化等各个方面。 本次课称设计首先分析了数字图像中直线边缘的三种结构特征,提出采用基元结构表示目标边缘点,并在约束条件下计算基元结构的基元倾角。在此基础上,结合传统的HT的思想对基元结构进行极角约束HT,以获得最终的直线参数。最后,再用MATLAB软件对该算法进行编程仿真。实验结果表明,对合成图像和自然图像,该算法能够有效的识别图像中的直线段。 关键词:直线提取;Hough变换;MATLAB

目录 1. 课程设计的目的 (1) 2. MATLAB简介及应用 (1) 2.1 MATLAB简介 (1) 2.2 MATLAB应用 (1) 2.3 MATLAB特点 (2) 3. Hough变换原理 (2) 3.1 Hough变换的基本原理 (2) 3.2 Hough变换的不足之处 (4) 3.3 Hough变换的应用 (4) 4. Hough变换检测直线设计 (5) 4.1 Hough变换检测直线基本原理 (5) 4.2 Hough变换的几种基本算法 (6) 4.3 Hough变换算法的比较与选择 (7) 4.4 Hough变换检测直线的算法流程图 (9) 4.5 Hough变换检测直线算法的实现 (9) 5. 仿真结果及分析 (11) 5.1 仿真结果 (11) 5.2 结果分析 (14) 结论 (15) 参考文献 (16)

Hough变换实例 很清晰的

数字图像处理第八次作业 实验内容 1、拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θ θ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。

Hough变换检测直线

数字图像处理实验报告 实验题目:Hough变换检测直线 专业班级:电科1001 学生姓名:赵 学号:201048360102 指导老师:王贵财 时间:2012-2013-2

Hough变换检测直线 一.实验目的 实现用Hough变换检测直线的算法 二.实验要求 (1)找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条直线; (2)分析并显示各直线的角度、长度。 三.实验原理 Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough 变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。 Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough 变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加

器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如图1所示。 ρ= xcosθ+ysinθ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,再根据θ和ρ的值对累加数组累加,从而得到共线 点的个数。下面介绍θ和ρ取值范围的确定。设被检测的直线在第一象限,右上角坐标为( m, n) ,则第一象限中直线的位置情况如图1所示。 图一 由图可见,当直线从与x轴重合处逆时针旋转时,θ的值 开始由0°增大,直到180°,所以θ的取值范围为0°~180°。由 直线极坐标方程可知: ,其中Φ= ,所以当且仅当x和y都达到最大且θ+ Φ=±90°时(根据<来调整θ的值) , | ρ| =| ρ| max =

图像处理作业-hough变换的边缘提取

图像处理期末作业 姓名:刘新芳 学号:2012204097 院系:信自院通信系 专业:信号与信息处理

用Hough变换提取边界直线 Hough变换是1962年由Paul Hough提出来的。它所实现的是一种从图像空间到参数空间的映射关系。它具有一系列的优点。例如,由于根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或者其他目标遮盖而引起边界发生瞬间间断的情况,它具有很好的容错性和鲁棒性。 原理 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。 Hough 变换是一种利用表决原理的参数估计技术。其基本原理在于利用图像空间和Hough参数空间的点与线的对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形势联系起来的参数空间累计对应点。在参数空间不超过二维的情况下,这种变换效果理想。 将原始图像空间的给定的曲线表达形式变为参数空间的一个点,这样就把原始图像中给定曲线的检测问题转化为寻找参数空间的峰值问题,也即是把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。简而言之,Hough 变换思想是:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在原始坐标系下的各个点的投影到参数坐标系下之后,看参数坐标系下没有聚集点,这样的聚集点就对应了原始坐标系下的直线。 如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而是计算复杂程度过大,为解决这一问题,采用极坐标方程,变换方程如图1所示。 θ ρsin θ = cos y x+ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点-正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,

图像处理之霍夫变换

图像处理之霍夫变换(直线检测算法) 霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何 形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪 声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。 霍夫变换算法思想: 以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单 的例子如下:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式, 可以表达出直线的离散点几何等式如下: X *cos(theta) + y * sin(theta) = r 其中角度theta指r与X轴之间的夹角,r为 到直线几何垂 直距离。任何在直线上点,x, y都可以表达,其中r,theta是常量。该公式图形表示如下: 然而在实现的图像处理领域,图像的像素坐标P(x, y)是已知的,而r, theta则是我们要寻找 的变量。如果我们能绘制每个(r, theta)值根据像素点坐标P(x, y)值的话,那么就从图像笛卡

尔坐标系统转换到极坐标霍夫空间系统,这种从点到曲线的变换称为直线的霍夫变换。变换 通过量化霍夫参数空间为有限个值间隔等分或者累加格子。当霍夫变换算法开始,每个像素 坐标点P(x, y)被转换到(r, theta)的曲线点上面,累加到对应的格子数据点,当一个波峰出现 时候,说明有直线存在。同样的原理,我们可以用来检测圆,只是对于圆的参数方程变为如 下等式: (x –a ) ^2 + (y-b) ^ 2 = r^2其中(a, b)为圆的中心点坐标,r圆的半径。这样霍夫的参数空间就 变成一个三维参数空间。给定圆半径转为二维霍夫参数空间,变换相对简单,也比较常用。 编程思路解析: 1. 读取一幅带处理二值图像,最好背景为黑色。 2. 取得源像素数据 3. 根据直线的霍夫变换公式完成霍夫变换,预览霍夫空间结果 4. 寻找最大霍夫值,设置阈值,反变换到图像RGB值空间(程序难点之一) 5. 越界处理,显示霍夫变换处理以后的图像 关键代码解析: 直线的变换角度为[0 ~ PI]之间,设置等份为500为PI/500,同时根据参数直线参数方程的取值 范围为[-r, r]有如下霍夫参数定义: [java]view plaincopy 1.// prepare for hough transform 2.int centerX = width / 2; 3.int centerY = height / 2;

Hough变换实例

实验内容 1.拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θθ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。 由于Hough 变换需要用到稀疏矩阵,也即首先得找到图像矩阵中的非零量,针对这些非零量进行进一步的处理。这个操作可以直接通过Matlab 中的find 语

图像处理之霍夫变换圆检测算法

图像处理之霍夫变换圆检测算法 一:霍夫变换检测圆的数学原理 根据极坐标,圆上任意一点的坐标可以表示为如上形式, 所以对于任意一个圆, 假设中心像素点p(x0, y0)像素点已知, 圆半径已知,则旋转360由极坐标方程可以得到每个点上得坐标同样,如果只是知道图像上像素点, 圆半径,旋转360°则中心点处的坐标值必定最强.这正是霍夫变换检测圆的数学原理. 二:算法流程 该算法大致可以分为以下几个步骤 三:运行效果

图像从空间坐标变换到极坐标效果, 最亮一点为圆心. 图像从极坐标变换回到空间坐标,检测结果显示: 四:关键代码解析 个人觉得这次注释已经是非常的详细啦,而且我写的还是中文注释[java]view plaincopy 1./** 2. * 霍夫变换处理 - 检测半径大小符合的圆的个数 3. * 1. 将图像像素从2D空间坐标转换到极坐标空间 4. * 2. 在极坐标空间中归一化各个点强度,使之在0?255之间 5. * 3. 根据极坐标的R值与输入参数(圆的半径)相等,寻找2D空间的像素点 6. * 4. 对找出的空间像素点赋予结果颜色(红色) 7. * 5. 返回结果2D空间像素集合 8. * @return int [] 9. */ 10.public int[] process() { 11.

12.// 对于圆的极坐标变换来说,我们需要360度的空间梯度叠加值 13. acc = new int[width * height]; 14.for (int y = 0; y < height; y++) { 15.for (int x = 0; x < width; x++) { 16. acc[y * width + x] = 0; 17. } 18. } 19.int x0, y0; 20.double t; 21.for (int x = 0; x < width; x++) { 22.for (int y = 0; y < height; y++) { 23. 24.if ((input[y * width + x] & 0xff) == 255) { 25. 26.for (int theta = 0; theta < 360; theta++) { 27. t = (theta * 3.14159265) / 180; // 角度值0 ~ 2*PI 28. x0 = (int) Math.round(x - r * Math.cos(t)); 29. y0 = (int) Math.round(y - r * Math.sin(t)); 30.if (x0 < width && x0 > 0 && y0 < height && y0 > 0) { 31. acc[x0 + (y0 * width)] += 1; 32. } 33. } 34. } 35. } 36. } 37. 38.// now normalise to 255 and put in format for a pixel array 39.int max = 0; 40. 41.// Find max acc value 42.for (int x = 0; x < width; x++) { 43.for (int y = 0; y < height; y++) { 44. 45.if (acc[x + (y * width)] > max) { 46. max = acc[x + (y * width)]; 47. } 48. } 49. } 50. 51.// 根据最大值,实现极坐标空间的灰度值归一化处理 52.int value; 53.for (int x = 0; x < width; x++) { 54.for (int y = 0; y < height; y++) {

霍夫变换检测直线圆流程+

Hough 变换直线检测是直接按照hough 变换的定义来进行的, 算法如下: 1) 对原始的图像进行二值化, 假设0代表背景, 1代表物体特征点; 2) 在参数空间ρ, θ里建立一个累加的数组[],H ρθ , 并且置数组H 中的每 一个元素的初值都为零; 对于二值图像中每个以1 表示的点(,)x y , 我们让θ取遍θ轴上所有可能的值, 并根据式(3-3)计算对应的ρ; 再根据ρ与θ的值(假设都已经取整) 对数组进行累加计算([][],,1H H ρθρθ=+) ; 3) 然后对数组[],H ρθ 进行局部的峰值检测, 得到被检测直线的参数ρ和θ。上述的算法受直线中的间隙与噪声的影响较小, 鲁棒性比较强,但其具有运算量太大的缺点, 极端情况下, 它的运算复杂度为3 ()n ο 。 传统随机hough 变换的具体算法如下: (a)构造一个边缘点集D , 然后初始化参数单元集P NULL = ,循环的次数K = 0 ; (b)从D 中随机的选取3 个点; (c)由这3个点解特征的参数p ; (d)在P 中寻找一个c p ,使它满足p c p δ-≤,如果找到则转(f);否则就转(e); (e)将p 插入到P 中,其对应的计数值变为1,转(g); (f)将c p 所对应的计数的值加1,如果小于指定阈值t N ,转(g);否则就转(h); (g)1k k =+;如果 max k k > ,则结束;否则,转(b); (h)c p 是候选圆的特征参数,如果该参数对应圆上的边缘的点数min pc M M >,转(i); (i) c p 是真实的圆参数,把落在参数c p 对应的特征上的点从D 中去除,然 后判断已经检测到的圆的数目是否已达到规定的数目,若是就结束,否 则的话重置P NULL =,0K =,转(b)。 其中max k 是规定的检测一个圆的过程中所允许采样的最大的循环次数。min M 为圆所必需的最小的点数, 通常设为2r πλ,其中λ是一个固定系数,r 是候选圆的半径。P 是参数空间中的参数单元的集合,它是一个动态的链表结构。pc M 是图像空间中落到了候选圆上的点数。

根据matlab的霍夫变换

基于matlab的霍夫变换 一、简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。 二、基本原理 Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线(圆的方程为:(x-a)^2+(y-b)^2=r^2,通过Hough变换,将图像空间对应到参数空间)。 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。 三、hough变换检测直线 设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点 (x0,y0)确定了一族直线。方程y0=kx0+b在参数k--b平面上是一条直线,(你也可以是方程b=-x0*k+y0对应的直线)。如下图1所示: 从图1中可看出,x-y坐标和k-b坐标有点----线的对偶性。x-y坐标中的点P1、P2对应于k-b坐标中的L1、L2;而k-b坐标中的点P0对应于x-y坐标中的线L0 。 这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我

数字图像处理Hough变换直线检测matlab实现

数字图像处理—Hough 变换直线检测,matlab 实现实验八Hough 变换直线检测 一、实验目的 理解Hough变换的原理,了解其应用;掌握利用Hough变换进行直线检测的处理过程 及编程方法。 二、实验内容 利用Hough变换检测直线通常先进行边缘检测,得到只包含边缘的二值图像。再通过 Hough变换,在参数空间检测图像共线点的数量得到直线参数,从而实现直线检测。 1、读入图像(图像需有直线或直线性边缘) 2 、进行图像边缘,得到二值图像 3、实现Hough变换,检测出图像中的直线方程 4、输出结果

三、实验要求 1、编写代码,完成各项实验内容 2、总结实验中遇到问题及解决方案,书写实验报告 %Hougl变换 clc;clear;close all f=imread('l in e.bmp'); % 若是彩色图片转灰度化if len gth(size (f) )>2 f=rgb2gray(f); end % figure(1) subplot(121);imshow(f); % 利用edge函数进行边缘检测

j=edge(f,'Sobel'); subplot(122);imshow(j); [row,col]=size(j); pi nfan g=ro un d((row*row+col*colF0.5); A=zeros(2*pinfang,180); for m=1:row for n=1:col if j(m,n)>0 for thera=1:180 r=thera/180*pi; % 角度转弧度 rho=round(m*cos(r)+n*sin(r));% p =cos 0 +sin 0 rho=rho+pinfang+1;%-l:l 转换到1:2l+1 A(rho,thera)=A(rho,thera)+1; end end end end [rho,the⑻二仙d(A>40);% 交点超过60条线的点,ma,na为参数空间的坐标点nma=length(rho); for i=1:nma hold on m=1:row; %rho=ma(i)-1; r=thera(i)/180*pi; n=(rho(i)-pinfang-m*cos(r))/(0.00001+sin(r));

一种基于改进Hough变换的直线快速检测算法_段汝娇

第31卷 第12期2010年12月 仪器仪表学报 Ch i nese Journa l o f Sc ientific Instru m ent V o l 131N o 112D ec .2010 收稿日期:2010-07 R ece i ved D ate :2010-07 *基金项目:铁道部-清华大学科技研究基金(J 2008X011)资助项目 一种基于改进H ough 变换的直线快速检测算法 * 段汝娇,赵 伟,黄松岭,陈建业 (清华大学电机系电力系统国家重点实验室 北京 100084) 摘 要:针对传统H ough 变换计算量大、耗费内存空间、参数空间峰值点被次峰值点包围、易造成漏检或误检等缺陷,提出一种改进的H ough 变换直线快速检测算法。首先检测图像中相邻的像素点并进行聚类,形成一些相连的像素点的集合,然后将聚类后的像素点进行感知编组,细分成比原聚类线段更接近直线的线段,最后对每段近似直线用随机H ough 变换进行检测,从而精确地检测出图像中相应的直线。实验表明,与传统H ough 变换相比,改进后的算法计算量小,节省内存,无需先验知识,且抗干扰性有显著提高,并降低了误检率和漏检率。 关键词:像素点聚类;感知编组;随机H ough 变换;直线检测;快速检测 中图分类号:TP391.41 文献标识码:A 国家标准学科分类代码:510.4050 Fast line detecti on al gorith m based on improved H ough transformati on Duan Rujiao ,Zhao W e,i H uang Song li n g ,Chen Jianye (State K ey Lab of P o w er Syste m,D e p ar t m ent of Electrical E n g ineer i ng,T singhua Uni ver sity,Beijing 100084,China) Abst ract :H ough transfor m (HT)is a popu l a r too l for li n e detecti o n due to its r obustness to noise and m issi n g data . H o w ever ,the co m putati o na l cost and m e m ory space consu m ption assoc i a ti n g w ith its voting sche m e have prevented its applicati o ns .H ere an i m pr oved HT algo rithm is proposed to so lve these pr oble m s .Firstly the neighbor pixels are clustered ,and then the c l u sters are subd i v ided i n to sets ofm ost perceptua ll y si g nificant stra i g ht li n e seg m ents .For each seg m en,t its best fitting line can be found usi n g rando m H ough transfor m (RHT ).Co m pared w ith trad itional HT algor ithm ,the proposed approach can not on ly accelerate the co m puting speed and save m e m ory space ,but a lso produce a m uch cleaner vo ti n g m ap and m ake the transfor m m ore robus.t K ey w ords :pixel cluster ;perceptua l organ izati o n ;RHT;li n e detecti o n ;fast detection 1 引 言 自动识别图像中的直线,是图像处理和计算机视觉领域的一个重要课题。Hough 变换是处理此问题的一种有效工具,具有良好的鲁棒性和抗干扰能力,在许多领域得到了应用[1-6] 。H ough 变换算法的主要思想是,先将参数平面按一定步长离散化为许多小格,然后采用/多对一0映射,计算图像空间中共线的多个像素点在参数平面中对应的参数值,若计算结果落在参数平面某一小格内,就使该小格的累加器加1,累积值最大的小格即为图像 空间中直线的参数。这种从图像域/投票0到参数域的 穷尽式搜索模式,不仅计算量大,占用内存多;同时,参数 域中得票最多的小格被得票数次多的小格所包围,容易对检测造成干扰,导致对直线的误检或漏检。 针对H o ugh 变换的上述缺陷,一些学者提出了改进 措施。K ir yati 等人提出了概率Hough 变换(P HT )[7] ,具体是将图像数据映射到参数域中具有更大概率的单元,而非所有单元。Due 等人提出了随机H ough 变换(也称RHT )[8-11] ,即通过对像素点的随机采样,避免传统H ough 变换需庞大计算量,且降低了内存需求;但其处理复杂图

霍夫变换检测圆和直线

霍夫变换检测任意形状 一、实验目的 1.掌握MATLAB软件的使用,以及其设计流程; 2.掌握霍夫变换的实现方法; 3.用MATLAB语言设计基于霍夫变换的任意图形的识别。 二、实验仪器或设备 装MATLAB软件的微机一台 三、总体设计原理及流程图 1、程序设计的原理 霍夫变换的基本思想就是把图像平面上的点对应到参数平面上的曲线,最后通过统计特性来解决问题。具有良好的抗噪声性能和对部分遮盖的不敏感等特性。 2、程序流程图

四、主要程序代码 1、霍夫变换检测圆程序 clear all; close all; clc; % [cr,st]=circle_product;%st(1)->x,st(2)->y,st(3)->r cr=imread('sample.bmp');%circle1.bmp figure; imshow(cr); [row,range]=size(cr); p=row*range;a=0;Y=zeros(1,p);Q=zeros(1,p); for k1=1:1:row for k2=1:1:range if cr(k1,k2)==0 a=a+1; XXX=k2-1;YYY=row+1-k1; Y(a)=YYY;Q(a)=XXX; end end end for k3=1:1:p if Y(k3)==0&Q(k3)==0 break; end end % z=ones(1,5); % a=1:1:300;b=1:1:300; % z1=sqrt((a-Q(1)).^2+(b-Y(1)).^2); % z2=sqrt((a-Q(2)).^2+(b-Y(2)).^2); % z3=sqrt((a-Q(3)).^2+(b-Y(3)).^2); % z4=sqrt((a-Q(4)).^2+(b-Y(4)).^2); % z5=sqrt((a-Q(5)).^2+(b-Y(5)).^2); % % z1=sqrt((a-Q(1))*(a-Q(1))+(b-Y(1))*(b-Y(1))); % % Z1=(a-Q(1)).^2+(b-Y(1)).^2; r0=(abs(z1-z2)<=0.1&abs(z1<=z3)<=0.1&abs(z1<=z4)<=0.1&abs(z1<=z5)<=0.1&abs(z2<=z3)< =0.1&abs(z2<=z4)<=0.1&abs(z2<=z5)<=0.1); % r=r0.*z1; % aa=r0.*a; % bb=r0.*b; % rrr=round(r(r0~=0)) % aaa=aa(r0~=0) % bbb=bb(r0~=0) k7=floor(k3/6);k5=2; a=1:1:300;b=1:1:300;rrr=zeros(1,p);aaa=zeros(1,p);bb=zeros(1,p);k6=0;as=0;k11=1; for k5=1:1:k7

hough变换提取直线(Matlab实现)

Hough变换提取直线 一、实验目标 实现用Hough变换检测直线的算法 二、实验内容 1、读入图像 选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。 2、检测图像边缘 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别用梯度向量的幅度和方向来表示。 边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。如Roberts算子,Sobel算子,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。 3、实现Houg变换,检测出图像中的直线 Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。 这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。

4、Matlab代码如下: f=imread('3.png');%读入彩色图像,注意不能使用灰度图像 o=f; %保留彩色原图 f=rgb2gray(f);%将彩色图像转换为灰度图像, f=im2double(f); figure(); subplot(2,2,1);imshow(o);title('原图'); [m,n]=size(f);%得到图像矩阵行数m,列数n for i=3:m-2 for j=3:n-2%处理领域较大,所以从图像(3,3)开始,在(m-2,n-2)结束l(i,j)=-f(i-2,j)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1)-f(i,j-2 )-2*f(i,j-1)+16*f(i,j)-2*f(i,j+1)-f(i,j+2)-f(i+1,j-1)-2*f (i+1,j)-f(i+1,j+1)-f(i+2,j);%LoG算子 end end subplot(2,2,2);imshow(l);title('LoG算子提取图像边缘'); [m,n]=size(l); for i=2:m-1 for j=2:n-1 y(i,j)=l(i-1,j-1)+l(i-1,j)+l(i-1,j+1)+l(i,j-1)+l(i,j)+l(i,j+1)+l( i+1,j-1)+l(i+1,j)+l(i+1,j+1); y(i,j)=y(i,j)/9; %LoG算子提取边缘后,对结果进行均值滤波以去除噪 声,为下一步hough变换提取直线作准备 end end subplot(2,2,3);imshow(y);title('均值滤波器处理后') q=im2uint8(y); [m,n]=size(q); for i=1:m for j=1:n if q(i,j)>80; %设置二值化的阈值为80 q(i,j)=255; %对图像进行二值化处理,使图像边缘更加突出清晰 else q(i,j)=0; end end end subplot(2,2,4);imshow(q);title('二值化处理后');

相关文档
最新文档