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

上传人:wj 文档编号:1514879 上传时间:2023-04-30 格式:DOCX 页数:7 大小:69.98KB
下载 相关 举报
用Hough变换检测二值图像中的圆Word下载.docx_第1页
第1页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第2页
第2页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第3页
第3页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第4页
第4页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第5页
第5页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第6页
第6页 / 共7页
用Hough变换检测二值图像中的圆Word下载.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

向量x的元素的最大值。

MATLAB图像类型转换函数:

rgb2gray:

将一副真彩色图像转换成灰度图像;

im2bw:

通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像;

MATLAB图形图像文件的读取和显示函数

imread(filename);

MATLAB二进制图像及其显示

imshow(f1)。

用double对二值图像双精度化

图形处理:

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 

round(2*pi/step_angle);

hough_space 

zeros(m,n,size_r);

[rows,cols] 

find(BW);

ecount 

size(rows);

for 

i=1:

r=1:

k=1:

round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));

round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));

if(a>

0&

&

a<

=m&

b>

b<

=n) 

hough_space(a,b,r) 

hough_space(a,b,r)+1;

end 

max_para 

max(max(max(hough_space)));

index 

find(hough_space>

=max_para*p);

length 

size(index);

hough_circle 

false(m,n);

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&

... 

(rows(i)-par1)^2+(cols(i)-par2)^2>

(r_min+(par3-1)*step_r)^2-5) 

hough_circle(rows(i),cols(i)) 

true;

r_min+(par3-1)*step_r;

fprintf(1,'

Center 

%d 

radius 

%d\n'

par1,par2,par3);

para(:

k) 

[par1,par2,par3];

subplot(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 

0.58700 

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,'

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= 

r•co 

(θ(x 

 

) 

), 

a=y 

r•sin 

(θ 

(x 

)或者a= 

x+ 

a=y+r•sin 

),边缘像素(x,y)处的梯度方向为θ 

)。

前一组公式是梯度方向背离圆心,后一组为梯度方向指向圆心。

以前一种情况为例,边缘图像中每个边缘像素点(x,y)都可以算出其相应的梯度方向θ(x 

通过前一个公式可算出圆心坐标(a0,b0),对于参数空间可能的半径r0,其相应的参数空间累加器单元加一,最后找到累加器的局部最大值,就得到一个圆。

实验结果

通过对图像进行灰度化,二值化,边缘检测,hough变换等过程将图片中柑橘轮廓检测了出来。

以下为圆坐标数据及处理的图像

15 

10 

16 

17 

67 

68 

75 

71 

69 

72 

70 

73 

76 

74 

77 

173 

12 

172 

13 

174 

14 

171 

169 

125 

205 

127 

206 

122 

210 

215 

121 

216 

164 

20 

131 

214 

实验分析

在试验到最后的时候还是存在一些问题,期终检测时,我发现检测的圆比原图片中的柑橘小,还有左边的图片中有一个柑橘被另一个遮住了一部分,但是我们没有能在最后的检测的圆的图上清楚地看出来。

检测的圆比柑橘小应该是在检测边缘时取得阈值有问题所致,在用sobel算子检测边缘时,检测的边缘就比柑橘图中的小。

我们会通过改变阈值来改。

至于有一个柑橘没有被检测出来,只好通过改变拍摄角度来解决,从不同角度拍摄,可以让所有柑橘全部被检测到.

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2