用Hough变换检测二值图像中的圆
hough变换圆拟合
hough变换圆拟合
Hough变换圆拟合(Hough transform circle fitting)是一种用于从图像中检测圆的技术。
它是从Hough变换(Hough transform)算法演变而来的。
Hough变换圆拟合算法使用梯度信息来检测圆,并且它能够检测出各种大小、位置和形状的圆。
算法步骤如下:
1. 首先对图像进行预处理,如灰度化、边缘检测等。
2. 选择一组圆心候选点,可以采用图像中的各种特征点,例如边缘点、角点、中心点等。
3. 对于每个候选点,设定一个半径范围,然后在这个半径范围内搜索圆。
4. 对于每个搜索到的圆,计算出它的梯度值。
如果梯度值大于设定的阈值,则将这个圆作为候选圆。
5. 重复步骤3和步骤4,直到所有的候选点都被搜索完毕。
6. 统计所有候选圆的得票数,并根据得票数高低进行排序。
7. 选取得票数最高的圆作为最终检测结果。
Hough变换圆拟合算法的优点是可以检测出各种大小、位置和形状的圆,它的缺点是计算量大,需要较长的运行时间。
Python下opencv使用hough变换检测直线与圆
Python下opencv使⽤hough变换检测直线与圆在数字图像中,往往存在着⼀些特殊形状的⼏何图形,像检测马路边⼀条直线,检测⼈眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换就是这样⼀种检测的⼯具。
Hough变换的原理是将特定图形上的点变换到⼀组参数空间上,根据参数空间点的累计结果找到⼀个极⼤值对应的解,那么这个解就对应着要寻找的⼏何形状的参数(⽐如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆⼼与半径等等)。
关于hough变换,核⼼以及难点就是关于就是有原始空间到参数空间的变换上。
以直线检测为例,假设有⼀条直线L,原点到该直线的垂直距离为p,垂线与x轴夹⾓为θ,那么这条直线是唯⼀的,且直线的⽅程为ρ=xcosθ+ysinθ , 如下图所⽰:可以看到的是这条直线在极坐标系下只有⼀个 (ρ,θ) 与之对应,随便改变其中⼀个参数的⼤⼩,变换到空间域上的这个直线将会改变。
好了,再回来看看这个空间域上的这条直线上的所有点吧,你会发现,这条直线上的所有点都可以是在极坐标为 (ρ,θ) 所表⽰的直线上的,为什么说是都可以在,因为其中随便的⼀个点也可以在其他的 (ρ,θ) 所表⽰的直线上,就⽐如上述的(x,y)吧,它可以再很多直线上,准确的说,在经过这个点的直线上,随便画两条如下:可以看到,光是空间上的⼀个点在极坐标系下就可能在很多极坐标对所对应的直线上,具体有多少个极坐标对呢?那得看你的θ的步长了,我们可以看到θ⽆⾮是从0-360度( 0−2π)变化,假设我们没10度⼀⾛取⼀个直线(这个点在这个直线上),那么我们⾛⼀圈是不是取了36条直线,也就对应36个极坐标对没错吧,那么这个极坐标对,画在坐标轴上是什么样⼦的呢?因为θ是从 0−2π,并且⼀个点定了,如果⼀个θ也定了,你想想它对应的直线的ρ会怎么样,⾃然也是唯⼀的。
那么这个点在极坐标下对应的 (ρ,θ) 画出来⼀个周期可能就是这样的,以θ为x轴的话:ok前⾯说的是单单这⼀个点对应的极坐标系下的参数对,那么如果每个点都这么找⼀圈呢?也就是每个点在参数空间上都对应⼀系列参数对吧,现在把它们华仔同⼀个坐标系下会怎么样呢?为了⽅便,假设在这个直线上取3个点画⼀下:那么可以看到,⾸先对于每⼀个点,在极坐标下,会存在⼀个周期的曲线来表⽰通过这个点,其次,这三个极坐标曲线同时经过⼀个点,要搞清楚的是,极坐标上每⼀个点对 (ρ,θ) 在空间坐标上都是对应⼀条直线的。
hough 变换检测圆的一般步骤
hough 变换检测圆的一般步骤霍夫变换是一种图像处理算法,可用于检测图像中的圆形。
下面是霍夫变换检测圆的一般步骤:1.导入图像:首先,将要检测圆的图像导入到计算机中。
图像可以来自于摄像机、存储设备或是从其他算法的输出中获得。
2.灰度化处理:将彩色图像转换为灰度图像。
这是因为灰度图像只有一个通道,可以简化后续处理步骤。
3. 边缘检测:使用边缘检测算法(如Canny算子)对灰度图像进行处理,提取图像中的边缘。
这一步骤可以帮助找到圆形的边界。
4.霍夫变换:将边缘图像输入到霍夫变换中。
霍夫变换将边缘点从笛卡尔坐标系转换到霍夫空间,形成二维投票器矩阵。
在投票器矩阵中,每个圆形都有一个对应的概率值,用于表示该圆形的可能性。
5.阈值设置:在霍夫变换之后,需要设置一个阈值来确定哪些圆形应被认为是检测到的圆形。
根据应用的需求和图像的噪声程度,可以调整阈值的大小。
较高的阈值会产生较少的圆形,而较低的阈值会产生较多的圆形。
6.圆形检测:根据阈值从投票器矩阵中选择可能的圆形。
这些圆形可能包含噪声或重叠的圆形。
因此,需要进行圆形重叠或去噪的处理。
7.圆形参数提取:从霍夫空间中获取每个候选圆形的参数,如圆心的坐标和半径长度。
8.绘制圆形:根据提取的参数,在原始图像上绘制检测到的圆形。
这样一来,圆形就会在图像中展示出来。
9.输出结果:最后,将包含检测到的圆形的图像保存或显示出来。
可以使用不同的颜色或标记形式来区分不同的圆形。
霍夫变换是一种广泛应用于图像处理和计算机视觉领域的算法。
通过这一变换,我们可以快速准确地检测图像中的圆形,为后续的分析和应用提供基础。
hough变换检测圆原理
hough变换检测圆原理
Hough变换是一种常用的图像处理算法,用于检测图像中的圆形目标。
其原理是将图像中的每个像素点转换为极坐标系下的参数空间,并在该空间中寻找圆心和半径相对应的峰值。
具体实现步骤如下:
1. 对图像进行边缘检测,得到一系列边缘点。
2. 在极坐标系下,将每个边缘点表示为一个三元组(r,θ,a),
其中r表示边缘点到图像原点的距离,θ表示边缘点与x轴的夹角,a表示圆心坐标在x轴上的投影。
3. 在参数空间中建立一个二维数组,表示每个可能的圆心(a,b)和半径r对应的计数值。
4. 遍历所有的边缘点,在参数空间中对应的位置上增加计数值。
5. 在参数空间中寻找计数值最大的位置,该位置所对应的圆心
和半径即为检测到的圆形目标。
通过Hough变换,我们可以快速高效地检测图像中的圆形目标。
该算法在计算复杂度和空间复杂度上相对较高,但其检测精度和鲁棒性较为优秀,广泛应用于计算机视觉和机器人领域。
- 1 -。
用点Hough变换实现圆检测的方法
用点Hough变换实现圆检测的方法
林金龙;石青云
【期刊名称】《计算机工程》
【年(卷),期】2003(029)011
【摘要】给出了一种新的Hough变换圆检测方法--点Hough变换(PHT).该方法根据圆周上任意两条不平行弦的中垂线相交与圆心的几何性质,同时选取曲线上3点进行计算,将传统Hough变换圆检测时的三维参量统计变成一维参量统计,极大地降低了计算复杂性和对资源的需求.为了克服任意选取组合点可能带来的计算量增加及统计结果的分散程度提高,文中提出了点的选择方法.合成图和实际图像的实验结果表明,该方法用于普通图像中圆检测时快速、稳定、准确.
【总页数】3页(P17-18,160)
【作者】林金龙;石青云
【作者单位】北京大学信息科学中心,北京,100871;北京大学信息科学中心,北京,100871
【正文语种】中文
【中图分类】TP317.4
【相关文献】
1.单参数Hough变换实现圆检测方法的研究 [J], 王敏;李启堂;丁书斌
2.基于TMS320DM642的快速Hough变换圆检测算法的实现 [J], 何富运;罗晓曙;周虹
3.一种简易Hough变换圆检测的原木端面识别方法 [J], 杨泽灿;林耀海;林艺杉
4.改进的Hough变换实现圆检测 [J], 段黎明;汪威;张霞
5.基于改进轮廓提取的Hough变换椭圆检测方法 [J], 翟永立; 丁雷; 裴浩东因版权原因,仅展示原文概要,查看原文内容请购买。
用Hough变换检测直线和圆.
特殊图像变换1、 HoughLines功能:利用 Hough 变换在二值图像中找到直线格式:CvSeq* cvHoughLines2( CvArr* image, void* line_storage, int method, double rho, double theta, int threshold,double param1=0, double param2=0 ;参数:image:输入 8-比特、单通道 (二值图像,其内容可能被函数所改变line_storage:检测到的线段存储仓. 可以是内存存储仓 (此种情况下,一个线段序列在存储仓中被创建,并且由函数返回),或者是包含线段参数的特殊类型(见下面)的具有单行/单列的矩阵(CvMat*。
矩阵头为函数所修改,使得它的cols/rows将包含一组检测到的线段。
如果line_storage是矩阵,而实际线段的数目超过矩阵尺寸,那么最大可能数目的线段被返回(线段没有按照长度、可信度或其它指标排序.method:Hough 变换变量,是下面变量的其中之一:CV_HOUGH_STANDARD - 传统或标准 Hough 变换. 每一个线段由两个浮点数(ρ, θ 表示,其中ρ 是点与原点 (0,0 之间的距离,θ 线段与 x-轴之间的夹角。
因此,矩阵类型必须是CV_32FC2 type.CV_HOUGH_PROBABILISTIC - 概率 Hough 变换(如果图像包含一些长的线性分割,则效率更高. 它返回线段分割而不是整个线段。
每个分割用起点和终点来表示,所以矩阵(或创建的序列)类型是 CV_32SC4.CV_HOUGH_MULTI_SCALE - 传统 Hough 变换的多尺度变种。
线段的编码方式与CV_HOUGH_STANDARD 的一致。
rho:与象素相关单位的距离精度theta:弧度测量的角度精度threshold:阈值参数。
如果相应的累计值大于threshold,则函数返回的这个线段. param1:第一个方法相关的参数:∙对传统 Hough 变换,不使用(0.∙对概率 Hough 变换,它是最小线段长度.∙对多尺度 Hough 变换,它是距离精度rho的分母 (大致的距离精度是rho而精确的应该是rho / param1 .param2:第二个方法相关参数:∙对传统 Hough 变换,不使用 (0.∙对概率 Hough 变换,这个参数表示在同一条直线上进行碎线段连接的最大间隔值(gap, 即当同一条直线上的两条碎线段之间的间隔小于param2时,将其合二为一。
一种基于Hough变换的圆和矩形的快速检测方法
一种基于Hough变换的圆和矩形的快速检测方法一、本文概述随着计算机视觉技术的快速发展,图像中的形状检测成为了许多实际应用领域的核心问题,如机器人导航、工业自动化、医学影像分析、安全监控等。
在这些应用场景中,快速准确地检测出图像中的圆形和矩形对于后续的图像理解和处理至关重要。
本文提出了一种基于Hough变换的圆和矩形的快速检测方法,旨在提高形状检测的效率和准确性,为相关领域的实践应用提供新的思路和技术支持。
Hough变换作为一种经典的图像处理技术,已经在直线检测等领域取得了广泛应用。
然而,将其应用于圆形和矩形的检测时,传统的Hough变换方法面临着计算量大、检测速度慢等问题。
为了解决这些问题,本文在深入研究Hough变换原理的基础上,提出了一种改进的快速检测方法。
该方法结合了图像预处理、形状特征提取和Hough变换等多个步骤,通过优化算法和减少不必要的计算,实现了圆形和矩形的高效检测。
本文首先介绍了Hough变换的基本原理及其在形状检测中的应用背景,然后详细阐述了本文提出的快速检测方法的理论框架和实现步骤。
接着,通过实验验证了该方法的有效性,并与其他经典算法进行了比较。
本文总结了研究成果,指出了方法的优点和局限性,并对未来的研究方向进行了展望。
通过本文的研究,我们期望能够为计算机视觉领域的形状检测问题提供一种更加高效、准确的解决方案,推动相关应用的发展和创新。
二、Hough变换原理及其应用Hough变换是一种在计算机视觉和图像处理中广泛应用的特征检测方法,尤其在形状识别,如直线、圆和矩形检测中,显示出其独特的优势。
Hough变换的基本原理是通过将图像空间中的形状映射到参数空间中的峰值,从而实现对这些形状的检测。
对于直线检测,Hough变换通过将图像中的每个点映射到参数空间的一条线上,从而得到多条线的交点,这些交点即对应图像空间中的直线。
类似地,对于圆和矩形的检测,Hough变换也可以将图像中的形状映射到相应的参数空间,如圆的参数空间包括圆心和半径,矩形的参数空间包括四个顶点的坐标等。
c++ 霍夫变换实现圆弧检测
c++ 霍夫变换实现圆弧检测霍夫变换是一种常用于图像处理中的技术,它可以用于圆弧的检测。
在本文中,我们将介绍如何使用C++语言实现圆弧检测。
1. 图像预处理在进行圆弧检测之前,首先需要对图像进行一些预处理。
这些预处理步骤包括灰度化、高斯滤波、二值化和边缘检测。
这些步骤可以通过使用OpenCV库中的函数来实现。
示例代码:```cppMat srcImage = imread("image.jpg");Mat grayImage, blurImage, binaryImage, edgeImage;cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);GaussianBlur(grayImage, blurImage, Size(5, 5), 0);threshold(blurImage, binaryImage, 0, 255, THRESH_BINARY | THRESH_OTSU);Canny(binaryImage, edgeImage, 50, 150);```2. 霍夫变换在进行霍夫变换之前,需要先定义一些变量来存储检测到的圆弧的信息。
这些变量包括圆心坐标和半径。
在霍夫变换中,我们需要使用HoughCircles函数。
此函数接受一个二值化图像和检测圆的参数。
检测圆的参数包括最小和最大半径以及两个圆之间的最小距离。
函数的返回值是一个向量,其中包含检测到的圆的信息。
```cppvector<Vec3f> circles;HoughCircles(edgeImage, circles, HOUGH_GRADIENT, 1, edgeImage.rows / 8, 100, 30, 0, 0);```3. 绘制圆弧检测到圆弧之后,我们可以使用OpenCV库中的函数来在图像上绘制圆弧。
函数接受一个源图像、圆心坐标、半径和颜色。
完整代码如下:```cpp#include <iostream>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;for (size_t i = 0; i < circles.size(); i++){Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);circle(srcImage, center, radius, Scalar(0, 0, 255), 2, LINE_AA);}return 0;}```以上就是使用C++实现圆弧检测的完整代码,运行程序可以看到圆弧已经被成功检测并绘制在了源图像上。
houghcircles函数
houghcircles函数
HoughCircles函数是一种用于检测图像中圆的有效方法。
它的工作原理是使用Hough变换,该变换使用多维空间中的
圆曲线表示一系列参数,以检测图像中的圆。
HoughCircles函
数可以检测各种大小的圆,并能够在图像中自动检测出圆的位置。
HoughCircles函数的使用非常简单,它需要一个输入图像
和一系列可选参数。
在输入图像中,HoughCircles函数会计算
出每个像素的Hough变换,然后对各个像素值进行分析,以
检测出图像中的圆。
可选参数包括圆的半径范围,最小和最大半径,以及其他可以改变检测结果的参数。
HoughCircles函数的输出也非常简单,它会输出一个数组,该数组中包含检测出来的圆的所有位置信息,包括圆心坐标和半径。
HoughCircles函数在图像处理领域有着广泛的应用,它可
以用于检测图像中的圆形物体,也可以用于多种机器视觉应用,如智能监控、计算机视觉等。
此外,HoughCircles函数还可以
用于检测图像中的圆形异常,从而进行图像检测和分析。
总之,HoughCircles函数是一种非常有效的用于检测图像
中的圆的方法,它可以自动检测出圆的位置,并能够精确检测出图像中的各种大小的圆。
因此,HoughCircles函数可以用于
各种机器视觉应用,以及图像检测和分析,为机器视觉技术的发展提供了重要的支持。
(标准)Hough变换检测圆
Hough变换检测圆(附:MATLAB程序)分类:图像处理Hough圆2011-12-11 21:37 12587人阅读评论(33) 收藏举报matlab算法图像处理internetfunction任务Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。
圆的方程为:(x-a)^2+(y-2)^2=r^2,通过Hough变换,将图像空间对应到参数空间。
附录中的MATLAB程序为网上比较常见的,实际运行中存在一些问题,这里进行些修改。
原理:霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。
最基本的霍夫变换是从黑白图像中检测直线(线段)。
我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。
我们知道,直线的方程可以用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(22)。
可以求出,过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。
基于Hough变换利用对称点检测圆
中图法分 类号 :P 9.1 T31 4
文 献标 识码 : A
文章 编号 :0072 (00 0 —5 80 10—04 2 1) 306 —3
Tod tc iceb y m erc l oit s d o o g a so m s ee t r l ys m c tia n sba e nH u ht n f r p r
t e e t h i l e trf sl n e ee t h a i sS a e r a et ed me so f h a so m. F n l ee p r n d o d t c e cr ec n e i t a d t n d tc er d u O t t c e s i n in o etn f r t c r y h t h d h t r ia l t x e me t yh i n a
i p o o e , wh c s scr l ’ a i e mercf au e ec n e f wo s mmerc l on s n cr l ecr l e tro t e c ce s r p sd ih B e i e Sb scg o ti e tr s h e tro y c t t t a p i t i i e i t i ec n e f h i l i c sh c r
58 2 1, 3 6 00 1( 3 )
计算 机 工 程 与设计 C m u r ni en d ei o pt E g er g n D s n e n ia g
・多媒体技术 ・
基于 H u h变换利用对称 点检测圆 og
张 灿 彬 , 邵 定 宏
( 南京工业 大 学 信 息科 学与 工程 学院 ,江苏 南京 2 0 0 ) 10 9
Hough变换检测圆坐标源代码
iMinRadius = 16;
/* 要检测的圆环的内半径*/
/* 要检测的圆环的外半径 ,即圆环的检测宽度为 3,像素在这个圆环内,都视作圆上的*/ iMaxRadius = 18;
/* 计数数组,图象上的每一个像素点对应一个计数值,用来确定该点是否是某个圆的 圆心。*/ int* pCount; /* X 坐标数组,其中的元素是圆环上点的 X 坐标。*/ int* ixCor; /* Y 坐标数组,其中的元素是圆环上点的 Y 坐标。*/ int* iyCor; int* ixCalCor; int* iyCalCor;
< 10) /* 圆的方程:(X-X0)*(X-X0) + (Y-Y0)*(Y-Y0) = R*R*/
{
iyCor[iNumOfCircle] = i;
ixCor[iNumOfCircle] = j; /* 把圆环上点的 x、y 坐标分别放到数组
iyCor 和 ixCor 中*/
iNumOfBiblioteka ircle++;/* 圆环上像素点的个数,也是圆环上
的当前点在数组 iyCor 和 ixCor 中的序号*/
}
}
}
}
/* 功能:检测整个图像范围内同样大小的圆环。不检测圆心在靠近图像边界附近的圆。 */
/* 具体说明:在整个图像范围内平移圆环,同时检测圆环上像素值为 255 的象素点, */
/* 每检测到一个这样的点,则将该圆的圆心点对应的计数器值加 1。*/ /* (j, i)是圆心坐标*/
用点Hough变换实现圆检测的方法
图像中圆的检测及其参数确定是计算机视觉和模式识 别中一项重要任务。常用的圆检测技术有形状分析法、环路 积分微分法[1]、圆Hough变换(CHT)[2]等。CHT是目前应用 最为广泛的圆检测方法,该方法的最大特点是可靠性高,在 噪声、变形、甚至部分区域丢失的状态下仍然能取得理想的 结果。但该方法的缺点是计算复杂,资源需求大。 Davies[3] 利用过圆周一点且与该点切线垂直的线通过圆心的特点,将 CHT转变成直线Hough变换(SLHT )。但由于噪声的影响 及圆周的数字化误差,难以保证梯度方向的准确性,在信噪 比低的情况下该方法难以实用。Ioannou等[4]根据弦的中垂线 通过圆心的性质,用SLHT确定圆的参量。目前的方法将传 统CHT三维搜索空间降低到二维,但在二维空间搜索时计算 复杂度仍然较高。为此,我们对CHT进行了改进,利用圆周 上任意两条不平行弦的中垂线相交与圆心的性质,同时选取 3 点,将搜索空间从三维减低到一维——我们称之为点 Hough变换(PHT),进一步降低了计算复杂性。另外,在 统计时只包括已计算出的交点,而不是整个变量取值范围, 提高了效率。以下将详细阐述PHT方法。
设图像中有N个待分析点,如果选择所有的组合,则有
N ( N − 1)( N − 2) 个点组。应用中,先去除噪声和无效点, 后选 6
∆ = x − xc + y − yc + r − rc 。图4中分别列出了比较结果。
为了便于观察,图4中I-SLHT和PHT的时间值已乘以 1000。 从图中可见,随着噪声点的增加, CHT处理的点增多, 处理速 度近似反比下降,但I-SLHT和PHT的速度与噪声点数无关, PHT速度最快。在检测精度上,当噪声和信号点数比小于 22 时,PHT 和其他两种方法具有同样的精度,且检测结果稳 定。但噪声继续增强时,PHT和I-SLHT一样结果急剧变坏, 无法实用。 一般情况下,实际图像中的噪声强度远小于上述使PHT 变坏的情形。图 5 中用PHT做眼睛瞳孔检测的结果说明了 PHT的实用性。图像的大小为256×256。
基于改进随机Hough变换的圆形目标检测算法
xij ,
y0)为区域重心坐标,(
yij )为 第i 个 边 缘 点 集 中
任意点的坐标 .
d=
定义σ 为边界点集pi 到区域重心距离的均方差:
σ=
定义 C 的计算公式为
4
n
11
2
∑ [ (xij ,yij )- (x0,y0) -d ] .
4 n∑
i=1 j=1
(
5)
σ
(
.
6)
d
当区域趋于圆时,特征量 C 单调递减且趋向于 0,而且还不受区域平移、旋转和尺度变化的影响,可以
和为
H=
n
∑
j=1
2
2
(
xj -a)
+(
yj -b) -r .
当 H 达到最小值时,认为该理想圆即为候选圆,同时得到候选圆的参数(
a,
b,
r).
(
7)
7)基于随机 Hough 变换的候选圆验证 .候选圆中可能存在一些错误拟合的圆,为了去除假圆,需要对
候选圆进行验证 .候选圆的参数为(
a,
b,
r),如果边缘点 pi(
C=
根据 C 判断区域图形是否为圆形,若为圆形则计算该圆参数,否则进入第 6 步 .
6)基于随机 Hough 变换的候选圆检测 .在 区 域 中 随 机 选 择 一 个 边 缘 点 集 pi,并 对 pi 中 的 点 pi(
xj,
a,
b,
r),则 各 点 到 圆 的 距 离 的 绝 对 值 的
yj)进行圆拟合得到候选圆 .具体拟合算法为:设理 想 圆 的 参 数 为(
y)为 图 像 中 的 像 素 坐 标 .对 于 圆 形 检 测 来 说,(
Hough圆的检测 课设
自从20世纪80年代以来,MATLAB研究者们提出了多种圆形检测的方法,基于hough变换的累积方法是主要的方法。
基本的hough变换方法是将图像中的每一边缘点映射到参数空间的一个区域,选取累积最多的参数。
在现实生活中,由于噪音、数字化错误和图形变异等因素真实的图形经常被曲解,因此,图像在应用hough变换后,很难找到单一的峰值,这也就造成了检测的难度。
本次讨论了当前的hough变换算法及其作用,并在hough变换的原理基础上利用了圆的几何特征、对偶性。
重点介绍随机hough变换原理,将传统hough 变换圆检测时的二维参量统计变成一维参量统计。
理论和实验证明,本课题所研发的算法具有良好的检测性能,能获得较好的检测结果。
关键词:Hough变换;对偶性;MATLAB;参量统计I1 课程设计目的与要求 (1)1.1课程设计目的 (1)1.2课程设计要求 (1)2 Hough圆检测的原理 (2)3 设计内容 (3)3.1 图像导入 (3)3.2 检测图像边缘 (3)3.3 运行Hough变换,圆的特征及检测 (3)4 程序代码 (4)5 仿真结果分析 (5)5.1 仿真结果 (5)5.2分析 (6)结束语 (7)参考文献 (8)1 课程设计目的与要求1.1课程设计目的(1)熟悉和掌握MATLAB程序设计方法;(2)学习和熟悉MATLAB图像处理工具箱;(3)学会运用MATLAB工具箱对图像进行处理和分析;(4)了解Hough变换的原理;(5)实现用Hough变换检测圆的算法。
1.2课程设计要求Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测利用Hough变换圆通常先进行边缘检测,得到只包含边缘的二值图像。
再通过Hough变换,在参数空间检测图像共线点的数量得到圆参数,从而实现圆检测。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Hough变换检测二值图像中的圆Hough 变换简介Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测,基于参量性质的不同,Hough变换可以检测直线、圆、椭圆、双曲线、抛物线等。
同时,将概率论、模糊集理论、分层迭代的思想和级联的方法应用于Hough变换的过程中,大大地提高了Hough变换的效率,改善了Hough变换的性能。
实验主要使用的函数MATLAB内部常数pi:圆周率p(=3.1415926...)MATLAB常用基本数学函数:abs(x):纯量的绝对值或向量的长度;round(x):四舍五入至最近整数;floor(x):地板函数,即舍去正小数至最近整数;MATLAB常用三角函数sin(x):正弦函数cos(x):余弦函数;向量的常用函数max(x):向量x的元素的最大值。
MATLAB图像类型转换函数:rgb2gray:将一副真彩色图像转换成灰度图像;im2bw:通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像;MATLAB图形图像文件的读取和显示函数imread(filename);MATLAB二进制图像及其显示imshow(f1)。
用double对二值图像双精度化图形处理:sobel算子检测边缘hough变换检测圆分别显示灰度图像:figure;subplotSobel:算子边缘检测图像hough变换检测后的图像实验相关代码I=imread('*.jpg');f=rgb2gray(I);f1=im2bw(f,200/255);BW1=double(f1);BW=edge(BW1,'sobel',0.4);r_max=50;r_min=10;step_r=10;step_angle=pi/12;p=0.7;[m,n]=size(BW);size_r=round((r_max-r_min)/step_r)+1;size_angle=round(2*pi/step_angle);hough_space=zeros(m,n,size_r);[rows,cols]=find(BW);ecount=size(rows);for i=1:ecountfor r=1:size_rfor k=1:size_anglea=round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));b=round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));if(a>0&&a<=m&&b>0&&b<=n)hough_space(a,b,r)=hough_space(a,b,r)+1;endendendendmax_para=max(max(max(hough_space)));index=find(hough_space>=max_para*p);length=size(index);hough_circle=false(m,n);for i=1:ecountfor k=1:lengthpar3=floor(index(k)/(m*n))+1;par2=floor((index(k)-(par3-1)*(m*n))/m)+1;par1=index(k)-(par3-1)*(m*n)-(par2-1)*m;if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&&...(rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)hough_circle(rows(i),cols(i))=true;endendendfor k=1:lengthpar3=floor(index(k)/(m*n))+1;par2=floor((index(k)-(par3-1)*(m*n))/m)+1;par1=index(k)-(par3-1)*(m*n)-(par2-1)*m;par3=r_min+(par3-1)*step_r;fprintf(1,'Center%d%d radius%d\n',par1,par2,par3);para(:,k)=[par1,par2,par3];endsubplot(221),imshow(f);subplot(222),imshow(BW);subplot(223),imshow(hough_circle)图像读取图像处理的第一步就是对所采集的图像进行读入,本次研究采集的图像是24位真彩色的JPG 格式的图像。
真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无符号整型存储,亮度值范围[0,255]。
在实验中我们开始因为遇到了sobel算子无法识别二值图像的问题,后来用了double解决问题。
MATLAB中图形图像文件的读取利用函数imread()完成。
图像灰度与二值化处理白色与黑色之间按对数关系分为若干等级,称为灰度。
灰度分为256阶。
用灰度表示的图像称作灰度图。
MATLAB中rgb2gray()函数可以实现图像灰度化,它是以R、G、B为轴建立空间直角坐标系,则RGB图的每个象素的颜色可以用该三维空间的一个点来表示,而Gray图的每个象素的颜色可以用直线R=G=B上的一个点来表示。
于是rgb转gray图的本质就是寻找一个三维空间到一维空间的映射,最容易想到的就是射影(即过rgb空间的一个点向直线R=G=B做垂线),事实上MATLAB也是这样做的,并且有Gray=0.29900*R+0.58700*G+0.11400*B。
图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
全局二值化最常用的方法就是设定一个全局的阈值P,用P 将图像的数据分成两部分:大于P的像素群和小于P的像素群。
将大于P的像素群的像素值设定为白色(或者黑色),小于P的像素群的像素值设定为黑色(或者白色)。
MATLAB中使用im2bw函数,f1=im2bw(f,阈值)即将f以阈值分割。
边缘检测图像边缘是一个图像的重要特征,是计算机模式识别,视觉等的基础,边缘检测是图像处理过程中的一个重要环节。
检测物体边缘时,首先粗略检测其轮廓点,然后把原来检测到的轮廓点连接到一起,同时检测、连接遗漏的边界点并去除虚假的边界点。
边缘检测的算法很多,如方向算子,特度算子,canny算子和拉普拉斯算子等。
常用的有Sobel 算子,梯度算子的Roberts算子,Prewitt算子以及Canny边缘检测等。
本文主要涉及的是Sobel算子的边缘检测,Sobel算子是一阶微分算子,包含两组3*3矩阵,分别为横向和纵向,将之与图像作平面卷积,得出横向,纵向的亮度差分近似值。
我们也用过其他算子,sobel效果最好。
具体语法如下:BW=edge(A,'sobel',p);p为[0,1]的阈值hough变换Hough变换本来用于直线检测中,充分体现了Hough变换具有明了的几何解析性、一定的抗干扰能力以及易于实现并行处理等优点。
人们在对图像进行几何特征检测时,感兴趣的往往有直线,圆,椭圆等等。
自然而然地想到应用Hough变换。
这里不再赘述hough变换检测直线。
Hough变换是基于通过提取分布于目标圆周上的参数及点的特征值的来检测圆或圆弧的。
为了检测目标外形,对图像上的每点定义一个参数空间的映射。
Hough变换通过在参数空间找寻特征(峰值或最大值点)得到位于图像空间中的特征(目标形状)来转换问题。
对于已知半径的圆Hough变换可以检测任意已知表达形式的曲线,关键在于选择合适的参数空间。
我们可以根据曲线的表达形式决定其参数空间。
当检测某一已知半径的圆时,可以使用与原图像空间相同的空间作为其参数空间。
则原图像空间中的一个圆对应参数空间中的一个点,参数空间的一个点对应图像空间中一个圆,原图像空间中在同一圆上的点,它们的参数相同即a,b相同,它们在参数空间对应的圆就会过同一点(a,b),因此,将原图像中的所有点变换到参数空间之后,依据参数空间中点的聚集度就可判断出原图像空间中有无近似于圆的图形。
对于未知半径的圆,在一个xy平面图像中确定一个圆至少需要三个元素,即圆心的x轴和y轴坐标,圆的半径,因此Hough变换检测圆的目的就是检测出图像中各个圆的圆心坐标以及圆的半径。
其基本思想是将原图像空间中边缘点映射至参数空间中,再将参数空间中得到的全部坐标点元素所对应的累加值进行统计,并根据此累加值来判断圆的大小和圆心的位置。
例如,在xy平面上的方程为(x-a)2+(y-b)2=r2其中点(a,b)为圆心坐标,r为圆半径,点(x,y)为圆周上的一点,将其转换为参数坐标系(a,b,r),方程为(a-x)2+(b-y)2=r2,可看出次方程为圆锥面,对于原图像中任意确定的一个点在参数空间都有一个三维锥面与其对应。
在Hough变换检测圆时,可以利用梯度信息在很大程度上加快圆检测的速度。
对圆周而言,其梯度方向只有背离圆心或者指向圆心,当梯度指向圆心,圆心就在梯度的延长线上,而当梯度背离圆心,圆心则在梯度的反向延长线上。
所以,边缘梯度信息的加入可以预估圆心的位置,这样可以使算法的运算量明显减少,并且可以有效抑制虚假局部最大值。
圆心位置可以用极坐标方程形式表达:a=x - r•co s(θ (x,y)),a=y - r•sin(θ(x,y))或者a=x+r•co s(θ(x,y)),a=y+r•sin(θ(x,y)),边缘像素(x,y)处的梯度方向为θ(x,y)。
前一组公式是梯度方向背离圆心,后一组为梯度方向指向圆心。
以前一种情况为例,边缘图像中每个边缘像素点(x,y)都可以算出其相应的梯度方向θ(x,y)。
通过前一个公式可算出圆心坐标(a0,b0),对于参数空间可能的半径r0,其相应的参数空间累加器单元加一,最后找到累加器的局部最大值,就得到一个圆。
实验结果通过对图像进行灰度化,二值化,边缘检测,hough变换等过程将图片中柑橘轮廓检测了出来。
以下为圆坐标数据及处理的图像Center157radius10Center168radius10Center179radius10Center967radius10Center968radius10Center7568radius10Center7169radius10Center7270radius10Center7370radius10Center7271radius10Center7272radius10Center7674radius10Center7577radius10Center7677radius10Center17312radius10Center17213radius10Center17413radius10Center17214radius10Center17314radius10Center17115radius10Center17315radius10Center16916radius10Center17316radius10Center125205radius10Center127205radius10Center127206radius10Center122210radius10Center122215radius10Center121216radius10Center122216radius10Center1647radius20Center131214radius20实验分析在试验到最后的时候还是存在一些问题,期终检测时,我发现检测的圆比原图片中的柑橘小,还有左边的图片中有一个柑橘被另一个遮住了一部分,但是我们没有能在最后的检测的圆的图上清楚地看出来。