实现用Hough变换检测直线的算法

上传人:壹****1 文档编号:511180215 上传时间:2023-07-02 格式:DOCX 页数:17 大小:459.89KB
返回 下载 相关 举报
实现用Hough变换检测直线的算法_第1页
第1页 / 共17页
实现用Hough变换检测直线的算法_第2页
第2页 / 共17页
实现用Hough变换检测直线的算法_第3页
第3页 / 共17页
实现用Hough变换检测直线的算法_第4页
第4页 / 共17页
实现用Hough变换检测直线的算法_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《实现用Hough变换检测直线的算法》由会员分享,可在线阅读,更多相关《实现用Hough变换检测直线的算法(17页珍藏版)》请在金锄头文库上搜索。

1、1. 设计目的1)了解Hought变换的原理;2)实现用Hough变换检测直线的算法。2. 设计要求3)找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条 直线;4)分析矣显示各直线的角度、长度。3. 设计原理Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界 的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边 界曲线而将不连续的像素边缘点连接起来。Hough变换的主要优点是受噪声和曲 线间断的影响小。利用Hough变换可以直接检测某些己知形状的目标,如直线。Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应 在参数空间

2、里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在 图像空间里都有共线的点与之对应。因此Hough变换把在图像空间中的直线检测 问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计 完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时, 会使累加器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极 坐标方程,变换方程如下:p = xcos6 + ysinO (3-1)根据3-1公式,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让6取遍可能的值,然后计算p的值, 再根据。和p的值对累加数组累

3、加,从而得到共线点的个数。下面介绍。和p取 值范围的确定。设被检测的直线在第一象限,右上角坐标为(m, n),则第一象限中直线的位置情况如图3. 1所示。坐标位置图3.1由图3.1可见,当直线从与x轴重合处逆时针旋转时,。的值开始由0增大,直到180。,所以。的取值范围为0180。由直线极坐标方程可知:p = Jx2 + y2siii 任 + 小)(3-1)小=sinT(N)(3-2)所以当且仅当x和y都达到最大且6 +0=90时(根据来调整。的值)|p| = |p|max = Vni2 + n2(3-3)即p取值范围Vm2 n2Vm2 + n2o由。、p的取值范围和它们的分辨率就可以确定累加

4、器的大小,从而检测直 线。利用Hough变换检测图像中直线的一般步骤应该首先对图像进行二值化,然 后进行边缘检测,接着对边缘检测的结果作Hough变换,最后得到直线检测结果。 为了简便,算法主要针对图像的Hough变换,所以输入图像采用二值边缘图,具体 算法步骤如下:(1)读入一幅256级灰度图(虽然是256级灰度,但实际上仅有0和255两个 灰度等级)。(2) 根据图像尺寸决定Hough变换累加器的大小并分配内存。(3) 对图像作Hough变换,并将变换结果存入Hough变换累加器。(4) 设定阈值,并根据阈值大小将Hough变换累加器中累加值小于阈值的点 清零,即认为这些点并不对应图像域中

5、的一条直线。(5) 查找Hough变换累加器中累加值最大的点,记录该点并将其领域清零,继 续查找并记录下一个累加值最大的点,直到累加器中所有的累加值都为零,记录 的这些点即对应了检测到的图像中的直线。(6) 根据检测到的点在图像域中绘出直线。4. 设计内容选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使 用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。4.2、检测图像边缘如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰 度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别 用梯度向量的幅度和方向来表示。边缘检测算子检查

6、每个像素的邻域并对灰度变化率进行量化,通常也包括方向 的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。如Robert s算子,Sobel算子,Prewitt算子,Log算子等。这里采用Log算子 提取图像边缘,再用均值滤波去除边缘图像噪声。4.3、实现Houg变换,检测出图像中的直线Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平 滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对 已知解析式曲线的识别。这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红 色标记之。因为处理过程中需使用灰度图像,但最后无法给

7、灰度图像赋颜色(会 出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。5.程序代码clc;clear; %录入图像并显示f=imread(,C: Users YeSonG ,Documents FIATLAB OL jpg) ;%读入彩色图像, 注 意不能使用灰度图像o=f; %保留彩色原图f=rgb2gray(f) :%将彩色图像转换为灰度图像f=im2double(f);figure ();subplot (2, 2, 1); imshow(o) ; ti11 e C 原图);% 提取图像边缘m, n=size(f) ;%得到图像矩阵行数m,列数n fori=3:m2fo

8、r j=3:n-2%处理领域较大,所以从图像(3,3)开始,在(m-2, n-2)结束 l(i, j)=-f(i-2, j)-f(i-l, j-l)-2*f(i-l,j+l)-f(i, j-2)-2*f(i, j-1)+16*f (i, j)-2*f(i, j+l)-f(i, j+2)-f (i+1, j-l)-2*f (i+1, j)-f(i+L j+l)-f(i+2 ,j) ;%LoG 算子 end endsubplot (2, 2, 2) : imshow(l) ; t it le (,LoG 算子提取图像边缘);% 滤波 m, n =size (1);fori=2:m-1 for j=

9、2:nly(i, j)=l(i-l,j)+l(i-l, j+l)+l(i, j-l)+l(i, j)+l(i, j+l)+l(i+l,j-l)+l(i+l, j)+l(i+l, j+D;y(i, j)=y(i, j)/9; %LG算子提取边缘后,对结果进行均值滤波以去除噪声,为 下一步hough变换提取直线作准备 endendsubplot (2, 2, 3) ; imshow(y) ; title。均值滤波器处理后)% 二值化q=im2uint8(y);m, n=size (q);fori=l:mfor j=l:nif q(i, j)80; %设置二值化的阈值为80q(i,j)=255; %

10、对图像进行二值化处理,使图像边缘更加突出清晰elseq(i, J)=0;endendendsubplot (2, 2, 4) ; imshow(q) ; title (二值化处理后);% 检测直线%Hough变换检测直线,使用(a, p)参数空间,ae0, 180, p 0, 2da=180; %角度的值为。到180度d=round(sqrt (m2+n2) ; %图像对角线长度为p的最大值s=zeros (a, 2*d) ; %存储每个(a, p)个数z=cell (a, 2*d) ; %用元胞存储每个被检测的点的坐标fori=l:mfor j=l:n%遍历图像每个点if(q(i, j)=2

11、55)%只检测图像边缘的白点,其余点不检测for k=l:ap = round(i*cos(pi*k/180)+j*sin(pi*k/180) ;%对每个点 1 到 180度遍历一遍,取得经过该点的所有直线的P值(取整)if(P 0)%若p大于0,则将点存储在(d, 2d)空间s(k, d+p) =s(k, d+p) +1;% (a, p)相应的累加器单元加一zk, d+p) = zk, d+p), i, j ;%存储点坐标elseap=abs(p)+l;%若p小于0,则将点存储在(0, d)空间s (k, ap) =s (k, ap)+l ;%(a, p)相应的累加器单元加一Z (k, ap

12、 = z(k, ap, i, j ;%存储点坐标endendendendend%显示效果fori=l:afor j=l:d*2 %检查每个累加器单元中存储数量if(s(i, j) 70) %将提取直线的阈值设为70lp=z(i, j;%提取对应点坐标for k=l:s(i, j)%对满足阈值条件的累加器单元中(a, p)对应的所有点进行操作 o(lp(l, k), lp(2, k), 1)=255; %每个点 R 分量=255, G 分量=0, B 分量=0 o(lp(l, k),lp(2, k),2)=0;o(lp(l, k), Ip(2, k), 3)=0; %结果为在原图上对满足阈值要求

13、的直线上的点赋红 色endendendendfigure, imshow(o) ;titleC hough 变换提取直线);rotf = imrotat e (f, 33, crop )6 A%dBW = edge (rotf, canny);H,T, R = hough (BW);imshow(H, , XData,, T, YData , R, InitialMagnification,, fit);xlabel ( theta ), ylabel ( rho):axison, axis normal, hold on;P 二houghpeaks (H, 7, threshold, cei

14、l (0. 3*max(H(:);X = T(P(:,2);y = R(P(:,1);plot (x, y, s, color / white);% Find lines and plot themlines = houghlines (BW, T, R, P, FillGap, 5, MinLength, 7); figure, imshow(rotf), hold on max_len = 0;for k = 1:length(lines)xy = lines(k). point 1: lines(k). point2;plot (xy (:, 1), xy (:, 2), LineWid

15、th, 2, Color, green );% plot beginnings and ends of linesplot (xy(1, 1), xy(1, 2), x, LineWidth, 2, Color, yellow);plot (xy(2, 1), xy(2, 2), x, LineWidth, 2, Color, red): % determine the endpoints of the longest line segment len 二 normdines (k). point 1 - lines (k). point2): if ( lenmax_len) max len = len;xy_long = xy;endend% highlight the longest line segmentplot (xy_l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号