霍夫变换在幂函数型曲线检测中的应用_曾接贤

霍夫变换在幂函数型曲线检测中的应用_曾接贤
霍夫变换在幂函数型曲线检测中的应用_曾接贤

以一般化视角串联霍夫变换(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

图像处理的流行的几种方法

一般来说,图像识别就是按照图像地外貌特征,把图像进行分类.图像识别地研究首先要考虑地当然是图像地预处理,随着小波变换地发展,其已经成为图像识别中非常重要地图像预处理方案,小波变换在信号分析识别领域得到了广泛应用. 现流行地算法主要还有有神经网络算法和霍夫变换.神经网络地方法,利用神经网络进行图像地分类,而且可以跟其他地技术相互融合.个人收集整理勿做商业用途 一神经网络算法 人工神经网络(,简写为)也简称为神经网络()或称作连接模型(),它是一种模范动物神经网络行为特征,进行分布式并行信息处理地算法数学模型.这种网络依靠系统地复杂程度,通过调整内部大量节点之间相互连接地关系,从而达到处理信息地目地.个人收集整理勿做商业用途 在神经网络理论地基础上形成了神经网络算法,其基本地原理就是利用神经网络地学习和记忆功能,让神经网络学习各个模式识别中大量地训练样本,用以记住各个模式类别中地样本特征,然后在识别待识样本时,神经网络回忆起之前记住地各个模式类别地特征并将他们逐个于样本特征比较,从而确定样本所属地模式类别.他不需要给出有关模式地经验知识和判别函数,通过自身地学习机制形成决策区域,网络地特性由拓扑结构神经元特性决定,利用状态信息对不同状态地信息逐一训练获得某种映射,但该方法过分依赖特征向量地选取.许多神经网络都可用于数字识别,如多层神经网络用于数字识别:为尽可能全面描述数字图像地特征,从很多不同地角度抽取相应地特征,如结构特征、统计特征,对单一识别网络,其输入向量地维数往往又不能过高.但如果所选取地特征去抽取向量地各分量不具备足够地代表性,将很难取得较好地识别效果.因此神经网络地设计是识别地关键.个人收集整理勿做商业用途 神经网络在图像识别地应用跟图像分割一样,可以分为两大类: 第一类是基于像素数据地神经网络算法,基于像素地神经网络算法是用高维地原始图像数据作为神经网络训练样本.目前有很多神经网络算法是基于像素进行图像分割地,神经网络,前向反馈自适应神经网络,其他还有模糊神经网络、神经网络、神经网络、细胞神经网络等.个人收集整理勿做商业用途 第二类是基于特征数据地神经网络算法.此类算法中,神经网络是作为特征聚类器,有很多神经网络被研究人员运用,如神经网络、模糊神经网络、神经网络、自适应神经网络、细胞神经网络和神经网络.个人收集整理勿做商业用途 例如神经网络地方法在人脸识别上比其他类别地方法有独到地优势,它具有自学习、自适应能力,特别是它地自学能力在模式识别方面表现尤为突出.神经网络方法可以通过学习地过程来获得其他方法难以实现地关于人脸识别规律和规则地隐性表达.但该方法可能存在训练时间长、收敛速度慢地缺点.个人收集整理勿做商业用途 二小波变换 小波理论兴起于上世纪年代中期,并迅速发展成为数学、物理、天文、生物多个学科地重要分析工具之一;其具有良好地时、频局域分析能力,对一维有界变差函数类地“最优”逼近性能,多分辨分析概念地引入以及快速算法地存在,是小波理论迅猛发展地重要原因.小波分析地巨大成功尤其表现在信号处理、图像压缩等应用领域.小波变换是一种非常优秀地、具有较强时、频局部分析功能地非平稳信号分析方法,近年来已在应用数序和信号处理有很大地发展,并取得了较好地应用效果.在频域里提取信号里地相关信息,通过伸缩和平移算法,对信号进行多尺度分类和分析,达到高频处时间细分、低频处频率细分、适应时频信号分解地要求.小波变换在图像识别地应用,包括图形去噪、图像增强、图像融合、图像压缩、图像分解和图像边缘检测等.小波变换在生物特征识别方面(例如掌纹特征提取和识别)同样得到了成功应用,部分研究结果表明在生物特征识别方面效果优于、、傅里叶变换等方

【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

图像处理之霍夫变换

图像处理之霍夫变换(直线检测算法) 霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何 形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪 声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。 霍夫变换算法思想: 以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单 的例子如下:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式, 可以表达出直线的离散点几何等式如下: 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;

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

图像处理之霍夫变换圆检测算法 一:霍夫变换检测圆的数学原理 根据极坐标,圆上任意一点的坐标可以表示为如上形式, 所以对于任意一个圆, 假设中心像素点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++) {

广义霍夫变换的改进_叶州海

文章编号:1006-0871(2006)04-0053-04 广义霍夫变换的改进 叶州海, 陈福民 (同济大学电子与信息工程学院,上海 200092) 摘 要:提出基于广义霍夫变换(Generalized H ough Transfor m ation ,GHT )的改进算法.与传统方法比较,新方法将参考点设在形状边界上,可以减少内存的需要,并且用于寻找峰值的速度也大大提高.理论上,改进后的算法对内存的需要是一个基于形状描述复杂度的函数,越是精确和高级的形状和特征描述,意味着节省的内存空间越大.最后,将改进的GHT 应用于物体形状识别,取得一些实验性效果. 关键词:广义霍夫变换;形状识别;内存空间节省中图分类号:TP306.1 文献标志码:A Generalized Hough transfor mation i m prove ment YE Zhouha,i CHEN Fu m i n (Schoo l o f E lectron ic&Info .Eng .,T ong jiU n i v .,Shangha i 200092,Ch i na) Abst ract :An i m prove m ent ofG enera lizedH ough T ransfor m a ti o n(GH T)is proposed .Co m pared w ith the trad itionalm ethod ,the ne w one can reduce the storage requ ire m ent by setti n g reference points on shape edge .M eanw hile ,the speed o f search for peak is acce lerated conspicuously .Theo retica ll y ,the storage require m en t is a functi o n based on t h e co m plex ity of the shape descri p ti o n i n the ne w m et h od .And the m ore accurate and higher level the shape is described,the s m aller the storage space is needed .I n the end ,the i m proved a l g orith m is pu t i n to the ob ject recogn iti o n ,and obta i n s so m e experi m ental resu lts .K ey w ords :genera lized H ough transfor m ati o n(GHT );object recogn ition ;storage space reduction 收稿日期:2006-02-27;修回日期:2006-03-29 作者简介:叶州海(1980-),男,江苏泰兴人.硕士研究生,研究方向为网络多媒体技术和图像处理,(E-m ail)t h reel eafzerg @ci ti z .net 0 引 言 霍夫变换(HT )是一种用于区域边界形状描述的方法,经典HT 常被用于直线段、圆和椭圆的检测.HT 的优点是:(1)对噪音的抗干扰性;(2)能够处理多个形状.广义霍夫变换(Genera lized H ough Transfor m ation ,GHT)可以推广至检测任意形状.其基本思想是将图像的空间域变换到参数空间,用大多数边界点满足某种参数形式来描述图像中的曲线.实现方法是寻找在参数空间由参数累加器形成的峰值.由于HT 是根据局部度量来计算全面描述 参数,因而具有很强的容错性和鲁棒性. 然而,传统GHT 有几个较大的缺陷:(1)计算 量大,每个边缘点映射成参数空间的一个曲线,是一到多的映射;(2)占用内存大;(3)提取的参数受参数空间的量化间隔制约.本文通过将参考点设立在边界点上以减少GHT 对内存的需求.当然,改进后的方法会对GHT 的鲁棒性有一定影响,可以通过设多个参考点来加强鲁棒性,而且增加的R 关系表带来的额外内存空间相对于采用该算法所节省的内存空间而言微不足道. 最后本文将此改进方法用于物体形状检测,对

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

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 是图像空间中落到了候选圆上的点数。

霍夫变换

霍夫变换

标准霍夫变换 1.C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 ) 第一个参数,InputArray类型的image,输入图像,即源图像,需为8位的单通道二进制图像,可以将任意的源图载入进来后由函数修改成此格式后,再填在这里。 第二个参数,InputArray类型的lines,经过调用HoughLines函数后储存了霍夫线变换检测到线条的输出矢量。每一条线由具有两个元素的矢量表示,其中,是离坐标原点((0,0)(也就是图像的左上角)的距离。是弧度线条旋转角度(0~垂直线,π/2~水平线)。 第三个参数,double类型的rho,以像素为单位的距离精度。另一种形容方式是直线搜索时的进步尺寸的单位半径。PS:Latex中/rho就表示。 第四个参数,double类型的theta,以弧度为单位的角度精度。另一种形容方式是直线搜索时的进步尺寸的单位角度。 第五个参数,int类型的threshold,累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。大于阈值threshold的线段才可以被检测通过并返回到结果中。 第六个参数,double类型的srn,有默认值0。对于多尺度的霍夫变换,这是第三个参数进步尺寸rho的除数距离。粗略的累加器进步尺寸直接是第三个参数rho,而精确的累加器进步尺寸为rho/srn。 第七个参数,double类型的stn,有默认值0,对于多尺度霍夫变换,srn表示第四个参数进步尺寸的单位角度theta的除数距离。且如果srn和stn同时为0,

根据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, 我

霍夫变换

霍夫变换 一.概述 霍夫变换是一种图像特征提取技术,是一种有效的快速准确地检测出直线或圆的方法,是基本的识别图像几何形状的方法之一。 二 . opencv中的霍夫变换 1.Opencv支持的霍夫线变换有三种 a)标准霍夫变换 b)多尺度霍夫变换 c)累计概率霍夫变换(标准霍夫变换的改进,效率更高) 2.霍夫变换是从黑白图像中检测直线的,霍夫变换的直接输入只能是边缘二值图像,所以在使用霍夫变换之前要对图像进行边缘检测处理, 3.HoughiLines:可调用标准霍夫变换 HoughLines(a,b,c,d,e,f,g) a表示源图像 b表示调用函数后得到的输出矢量(用来确定直线位置的矢量),一般默认写为“lines” c表示极坐标系中的ρ d表示极坐标系中的角度θ e表示阈值(指的是触发直线判断所需要的的最低值) f,g在使用标准霍夫变换时默认为0 4.HoughLinesP:可调用累计概率霍夫变换 HoughLinesP(a,b,c,d,e,f,g) a表示源图像 b表示调用函数后得到的输出矢量(用来确定直线位置的矢量),一般默认写为“lines” c表示极坐标系中的ρ d表示极坐标系中的角度θ e表示阈值(指的是触发直线判断所需要的的最低值) f,g在使用累计概率霍夫变换时默认为要为正值 三 . 初期效果 源代码 #include #include using namespace cv; using namespace std;

int main( ) { while(1) { VideoCapture capture(0); Mat srcImage; capture >> srcImage;//读取当前帧图片 //【1】通过摄像头采取视频载入原始图和Mat变量定义 Mat midImage,dstImage;//临时变量和目标图的定义 //【2】进行边缘检测和转化为灰度图 Canny(srcImage, midImage, 50, 200, 3);//canny边缘检测 cvtColor(midImage,dstImage, COLOR_GRAY2BGR);//转化边缘检测后的图为灰度图 //标准霍夫变换 //【3】进行霍夫线变换 vector lines;//定义一个矢量结构lines用于存放得到的线段矢量集合 HoughLines(midImage, lines, 1, CV_PI/180, 150, 0, 0 ); //【4】依次在图中绘制出每条线段 for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point pt1, pt2; double a = cos(theta), b = sin(theta); double x0 = a*rho, y0 = b*rho; pt1.x = cvRound(x0 + 1000*(-b)); pt1.y = cvRound(y0 + 1000*(a)); pt2.x = cvRound(x0 - 1000*(-b)); pt2.y = cvRound(y0 - 1000*(a)); //此句代码的OpenCV2版为:(妙算所用版本我windows下搭建的是opencv3环境) //line( dstImage, pt1, pt2, Scalar(55,100,195), 1, CV_AA); //此句代码的OpenCV3版为: line( dstImage, pt1, pt2, Scalar(55,100,195), 1, LINE_AA); }

霍夫变换算子的分析与改进

第一章绪论 Hough变换(Hough Transformation,HT) 是直线检测中常用的方法之一,是由PaulHough在1962年提出的。它所实现的是一种从图像空间到参数空间的映射关系。Hough变换将图像空间中复杂的边缘特征信息映射为参数空间中的聚类检测问题。Duda和Hart于1972年首次用该方法提取直线。他们发现,当许多点的分布近似为一条直线时,这条直线可以用Hough变换的方法确定。经典HT常被用于直线、线段、圆和椭圆的检测。广义霍夫变换(Generalized Hough Transformation,GHT)可以推广至检测任意形状的图形。 Hough变换的突出优点就是将图像空间中较为困难的全局检测问题转化为参数空间中相对容易解决的局部峰值检测问题。也就是说,通过Hough变换之后,工作的重点就是如何更准确地、有效地检测出参数空间中共同投票区域的投票积累峰值。当参数空间证据积累完成以后,通常采用给定阈值的方法确定备选估计参数。但是,由于Hough变换自身的特点,使得提取出来的备选估计参数远远多于真实参数的个数,而且有好多备选估计参数来源于同一直线上数据点的投票积累。若直接以备选估计参数作为检测到的直线参数输出直线,则是不符合实际、不正确的。所以,在确定最终参数时,需要对备选估计参数做一定的处理,从而保证检测的准确性。Hough 变换方法还具有明了的几何解析性、一定的抗干扰能力和易于实现并行处理点.Hough变换是从图像中识别几何形状的基本方法之一,因此有着广泛的应用。例如:基于Hough变换的航片框标定位算法,霍夫变换在潮位相关分析中的应用等。 第二章 Hough变换 2. 1 基本原理 Hough变换的基本原理是将影像空间中的曲线(包括直线)变换到参数空间中,通过检测参数空间中的极值点,确定出该曲线的描

霍夫变换+最小二乘法 直线检测

霍夫变换中直线拟合的最小二乘法 ichriZ 1.基本概念 (1)霍夫变换 霍夫变换(Hough Transform) 是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线或线段。 (2)最小二乘法 曲线拟合方法的一种,通过最小化误差的平方和寻找数据的最佳函数匹配。 2.适用情况 霍夫变换是基于统计的方法,能将图像中的噪声或干扰点的影响消除,但其结果存在精度不够与直线有效区间不易控制的问题;最小二乘法是直线拟合的有效方法,但直接用于拟合时易受干扰点或噪声点影响。在检测图像中的直线段时,先利用霍夫变换消除无效点的影响,再结合最小二乘法法进行拟合,可以提高检测效果。 3.霍夫变换原理与实现方法 (一)霍夫变换原理 在平面直角坐标系中一条直线,任取其上一点,有 表示参数平面中的一条直线。再取上另一点则有 表示参数平面中的一条直线。与相交于一点,对应于坐标系 中直线 即:同一直线上的不同的点在对应的参数平面中对应不同的直线,但都交于同一点,所以可以通过坐标系中的交点来寻找坐标系中的直线。当坐标系中的直 线数量为R时,坐标系中对应R个峰值交点,它们对应于坐标系中的R 条直线。 此种方法不能够表示这类直线,实际中常将原有直线表示为参数方程 此直线上的点对应坐标系中的一族三角函数曲线,它们在有效区间内交于一点

,对应于坐标系中的。下图是一个具体例子: 交点坐标 (二)最小二乘法原理 对于给定数据,要求在某个函数类 中寻求一个函数 ,使 本文中讨论的是直线的最小二乘法,故均取一次多项式。 设具有如下格式 霍夫变换—>

霍夫变换检测圆和直线

霍夫变换检测任意形状 一、实验目的 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;houghpeaks;houghlines(1) (2014-03-31 11:50:36) 转载▼ 分类:matlab 图像处理工具箱提供了三个与霍夫变换有关的函数。函数hough实现了前面讨论的概念,函数houghpeaks寻找霍夫变换的峰值(累加单元的高计数),函数houghlines以来自其他两个函数的结果为基础在原始图像中提取线段。 1. 函数hough 函数hough支持任意的默认语法: [H, theta, rho] = hough(f) 还支持完整的语法形式: [H, theta, rho] = hough(f, 'ThetaRes', val1, 'RhoRes', val2) 其中,H是霍夫变换矩阵,theta(以度计)和rho是ρ和θ值向量,在这些值上产生霍夫变换。输入f是二值图像,val1是0到90的标量,指定了沿θ轴霍夫变换的间距(默认是1),val2是0 例10.5 霍夫变换的说明 在这个例子中,我们用简单的合成图像来说明hough函数的机理:>> f = zeros(101, 101); >> f(1, 1) = 1; f(101, 1) = 1; f(1, 101) = 1; >> f(101, 101) = 1; f(51, 51) = 1; 图10-10(a)显示了我们的测试图像,下面使用默认值计算并显示霍夫变换的结果:

>> H = hough(f) >> Imshow(H,[]) 图10-10(b)显示了结果,以熟悉的方法使用imshow函数来显示。在带有标度轴的较大图中显现霍夫变换常常更有用。 在接下来的代码片段中,我们调用带有三个参数的hough函数。然后把向量theta和rho作为附加输入参量传递给imshow,从而控制水平轴和垂直轴的标度。我们还要把'InitialMagnification'选项传递给带有值'fit'的imshow函数,因此,整个图像将被强迫在图形窗口中进行装配。axis 函数被用来打开轴标记,并使其显示填充图的矩形框。最后,xlabel和ylabel函数(见2.3.1节)用希腊字母LaTeX字体符号在轴上标值: >> [H, theta, rho] = hough(f); >> imshow(H, [], 'XData', theta, 'YData', rho ,'InitialMagnification', 'fit') >> axis on, axis normal >> xlabel('\theta'), ylabel('\rho') 图10-10(c)显示了标上值之后的结果。三条曲线(直线也可考虑为曲线)在±45°处的交点指出:f中有两组三个共线的点。两条曲线在 (ρ,θ)=(0,-90)、(-100,-90)、(0,0)和(100,0)处的交点指出:有4组位于垂直线和水平线上的共线点。

相关文档
最新文档