用Hough变换检测二值图像中的圆.docx

上传人:小飞机 文档编号:3658461 上传时间:2023-03-14 格式:DOCX 页数:7 大小:40.74KB
返回 下载 相关 举报
用Hough变换检测二值图像中的圆.docx_第1页
第1页 / 共7页
用Hough变换检测二值图像中的圆.docx_第2页
第2页 / 共7页
用Hough变换检测二值图像中的圆.docx_第3页
第3页 / 共7页
用Hough变换检测二值图像中的圆.docx_第4页
第4页 / 共7页
用Hough变换检测二值图像中的圆.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《用Hough变换检测二值图像中的圆.docx》由会员分享,可在线阅读,更多相关《用Hough变换检测二值图像中的圆.docx(7页珍藏版)》请在三一办公上搜索。

1、用Hough变换检测二值图像中的圆用Hough变换检测二值图像中的圆 Hough 变换简介 Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测,基于参量性质的不同,Hough变换可以检测直线、圆、椭圆、双曲线、抛物线等。同时,将概率论、模糊集理论、分层迭代的思想和级联的方法应用于Hough变换的过程中,大大地提高了Hough变换的效率,改善了Hough变换的性能。 实验主要使用的函数 MATLAB内部常数pi:圆周率 p MATLAB常用基本

2、数学函数: abs(x):纯量的绝对值或向量的长度; round(x):四舍五入至最近整数; floor(x):地板函数,即舍去正小数至最近整数; MATLAB常用三角函数 sin(x):正弦函数 cos(x):余弦函数; 向量的常用函数 max(x): 向量x的元素的最大值。 MATLAB图像类型转换函数: rgb2gray:将一副真彩色图像转换成灰度图像; im2bw:通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像; MATLAB图形图像文件的读取和显示函数 imread(filename); MATLAB二进制图像及其显示 imshow。 用double对二值图像双精度化 图形处

3、理: sobel算子检测边缘 hough变换检测圆 分别显示灰度图像: figure;subplot Sobel:算子边缘检测图像 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 =

4、round(2*pi/step_angle); hough_space = zeros(m,n,size_r); rows,cols = find(BW); ecount = size(rows); for i=1:ecount for r=1:size_r for k=1:size_angle a = 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(a0&a0&b=max_para*p); length = si

5、ze(index); hough_circle = false(m,n); for i=1:ecount for k=1:length par3 = 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) hough_circle(rows(i),cols(i) = true; end end end for k

6、=1:length par3 = 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 %dn,par1,par2,par3); para(:,k) = par1,par2,par3; end subplot(221),imshow(f); subplot(222),imshow(BW); subplot(223

7、),imshow(hough_circle) 图像读取 图像处理的第一步就是对所采集的图像进行读入,本次研究采集的图像是24位真彩色的JPG格式的图像。真彩色图像可用双精度存储,亮度值范围是0,1;比较符合习惯的存储方法是用无符号整型存储,亮度值范围0,255。 在实验中我们开始因为遇到了sobel算子无法识别二值图像的问题,后来用了double解决问题。 MATLAB中图形图像文件的读取利用函数imread完成。图像灰度与二值化处理白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。用灰度表示的图像称作灰度图。 MATLAB中rgb2gray函数可以实现图像灰度化,它是以R、G

8、、B为轴建立空间直角坐标系,则RGB图的每个象素的颜色可以用该三维空间的一个点来表示,而Gray图的每个象素的颜色可以用直线R=G=B上的一个点来表示。于是rgb转gray图的本质就是寻找一个三维空间到一维空间的映射,最容易想到的就是射影,事实上MATLAB也是这样做的,并且有Gray = 0.29900 * R + 0.58700 * G + 0.11400 * B。 图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。全局二值化最常用的方法就是设定一个全局的阈值P,用P将图像的数据分成两部分:大于P的像素群和小于P的像素群。将大于P

9、的像素群的像素值设定为白色,小于P的像素群的像素值设定为黑色。 MATLAB中使用im2bw函数,f1=im2bw(f,阈值)即将f以阈值分割。 边缘检测 图像边缘是一个图像的重要特征,是计算机模式识别,视觉等的基础,边缘检测是图像处理过程中的一个重要环节。检测物体边缘时,首先粗略检测其轮廓点,然后把原来检测到的轮廓点连接到一起,同时检测、连接遗漏的边界点并去除虚假的边界点。 边缘检测的算法很多,如方向算子,特度算子,canny算子和拉普拉斯算子等。常用的有Sobel算子,梯度算子的Roberts算子,Prewitt算子以及Canny边缘检测等。 本文主要涉及的是Sobel算子的边缘检测,So

10、bel算子是一阶微分算子,包含两组3*3矩阵,分别为横向和纵向,将之与图像作平面卷积,得出横向,纵向的亮度差分近似值。我们也用过其他算子,sobel效果最好。 具体语法如下: BW=edge(A,sobel,p);p为0,1的阈值 hough变换 Hough变换本来用于直线检测中,充分体现了Hough变换具有明了的几何解析性、一定的抗干扰能力以及易于实现并行处理等优点。人们在对图像进行几何特征检测时,感兴趣的往往有直线,圆,椭圆等等。自然而然地想到应用Hough变换。这里不再赘述hough变换检测直线。 Hough变换是基于通过提取分布于目标圆周上的参数及点的特征值的来检测圆或圆弧的。为了检测

11、目标外形,对图像上的每点定义一个参数空间的映射。Hough变换通过在参数空间找寻特征(峰值或最大值点)得到位于图像空间中的特征(目标形状)来转换问题。 对于已知半径的圆Hough变换可以检测任意已知表达形式的曲线,关键在于选择合适的参数空间。我们可以根据曲线的表达形式决定其参数空间。当检测某一已知半径的圆时,可以使用与原图像空间相同的空间作为其参数空间。则原图像空间中的一个圆对应参数空间中的一个点,参数空间的一个点对应图像空间中一个圆,原图像空间中在同一圆上的点,它们的参数相同即a,b相同,它们在参数空间对应的圆就会过同一点,因此,将原图像中的所有点变换到参数空间之后,依据参数空间中点的聚集度

12、就可判断出原图像空间中有无近似于圆的图形。 对于未知半径的圆,在一个xy平面图像中确定一个圆至少需要三个元素,即圆心的x轴和y轴坐标,圆的半径,因此Hough变换检测圆的目的就是检测出图像中各个圆的圆心坐标以及圆的半径。其基本思想是将原图像空间中边缘点映射至参数空间中,再将参数空间中得到的全部坐标点元素所对应的累加值进行统计,并根据此累加值来判断圆的大小和圆心的位置。例如,在xy平面上的方程为(x-a)2+(y-b)2=r2 其中点为圆心坐标,r为圆半径,点为圆周上的一点,将其转换为参数坐标系,方程为(a-x)2+(b-y)2=r2,可看出次方程为圆锥面,对于原图像中任意确定的一个点在参数空间

13、都有一个三维锥面与其对应。 在Hough变换检测圆时,可以利用梯度信息在很大程度上加快圆检测的速度。对圆周而言,其梯度方向只有背离圆心或者指向圆心,当梯度指向圆心,圆心就在梯度的延长线上,而当梯度背离圆心,圆心则在梯度的反向延长线上。所以,边缘梯度信息的加入可以预估圆心的位置,这样可以使算法的运算量明显减少,并且可以有效抑制虚假局部最大值。圆心位置可以用极坐标方程形式表达: a= x - rco s (x , y ) ), a=y - rsin ( (x , y ) )或者a= x+ rco s ( (x , y ) ), a=y+rsin ( (x , y ) ),边缘像素处的梯度方向为 (

14、x , y )。前一组公式是梯度方向背离圆心,后一组为梯度方向指向圆心。以前一种情况为例,边缘图像中每个边缘像素点都可以算出其相应的梯度方向(x , y )。通过前一个公式可算出圆心坐标,对于参数空间可能的半径r0,其相应的参数空间累加器单元加一,最后找到累加器的局部最大值,就得到一个圆。 实验结果 通过对图像进行灰度化,二值化,边缘检测,hough变换等过程将图片中柑橘轮廓检测了出来。 以下为圆坐标数据及处理的图像 Center 15 7 radius 10 Center 16 8 radius 10 Center 17 9 radius 10 Center 9 67 radius 10 C

15、enter 9 68 radius 10 Center 75 68 radius 10 Center 71 69 radius 10 Center 72 70 radius 10 Center 73 70 radius 10 Center 72 71 radius 10 Center 72 72 radius 10 Center 76 74 radius 10 Center 75 77 radius 10 Center 76 77 radius 10 Center 173 12 radius 10 Center 172 13 radius 10 Center 174 13 radius 10

16、Center 172 14 radius 10 Center 173 14 radius 10 Center 171 15 radius 10 Center 173 15 radius 10 Center 169 16 radius 10 Center 173 16 radius 10 Center 125 205 radius 10 Center 127 205 radius 10 Center 127 206 radius 10 Center 122 210 radius 10 Center 122 215 radius 10 Center 121 216 radius 10 Center 122 216 radius 10 Center 164 7 radius 20 Center 131 214 radius 20 实验分析 在试验到最后的时候还是存在一些问题,期终检测时,我发现检测的圆比原图片中的柑橘小,还有左边的图片中有一个柑橘被另一个遮住了一部分,但是我们没有能在最后的检测的圆的图上清楚地看出来。检测的圆比柑橘小应该是在检测边缘时取得阈值有问题所致,在用sobel算子检测边缘时,检测的边缘就比柑橘图中的小。我们会通过改变阈值来改。至于有一个柑橘没有被检测出来,只好通过改变拍摄角度来解决,从不同角度拍摄,可以让所有柑橘全部被检测到.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号