当前位置:文档之家› 数字图像中的Hough变换应用--直线检测

数字图像中的Hough变换应用--直线检测

数字图像中的Hough变换应用--直线检测
数字图像中的Hough变换应用--直线检测

摘要

为能够有效解决实时直线图形提取问题,提出了一种基于Hough变换(HT)的直线提取算法。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究,目前应用于生物医学、自动化和机器人视觉、空间技术和军事防御、办公自动化等各个方面。

本次课称设计首先分析了数字图像中直线边缘的三种结构特征,提出采用基元结构表示目标边缘点,并在约束条件下计算基元结构的基元倾角。在此基础上,结合传统的HT的思想对基元结构进行极角约束HT,以获得最终的直线参数。最后,再用MATLAB软件对该算法进行编程仿真。实验结果表明,对合成图像和自然图像,该算法能够有效的识别图像中的直线段。

关键词:直线提取;Hough变换;MATLAB

目录

1. 课程设计的目的 (1)

2. MATLAB简介及应用 (1)

2.1 MATLAB简介 (1)

2.2 MATLAB应用 (1)

2.3 MATLAB特点 (2)

3. Hough变换原理 (2)

3.1 Hough变换的基本原理 (2)

3.2 Hough变换的不足之处 (4)

3.3 Hough变换的应用 (4)

4. Hough变换检测直线设计 (5)

4.1 Hough变换检测直线基本原理 (5)

4.2 Hough变换的几种基本算法 (6)

4.3 Hough变换算法的比较与选择 (7)

4.4 Hough变换检测直线的算法流程图 (9)

4.5 Hough变换检测直线算法的实现 (9)

5. 仿真结果及分析 (11)

5.1 仿真结果 (11)

5.2 结果分析 (14)

结论 (15)

参考文献 (16)

数字图像中的Hough变换应用

——直线的检测

1.课程设计的目的

本次课程设计的目的在于提高发现问题、分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。综合运用MATLAB软件实现图像高通滤波程序设计最终达到以下目的:

1)通过课程设计把自己在大学中所学的知识应用到实践当中。

2)深入了解利用Matlab设计FIR数字滤波器的基本方法。

3)在课程设计的过程中掌握程序编译及软件设计的基本方法。

4)提高自己对于新知识的学习能力及进行实际操作的能力。

锻炼自己通过网络及各种资料解决实际问题的能力。

2.MATLAB简介及应用

2.1MATLAB简介

MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

2.2MATLAB应用

MATLAB 产品族可以用来进行以下各种工作:

1)数值分析

2)数值和符号计算

3)工程与科学绘图

4)控制系统的设计与仿真

5)数字图像处理技术

6)数字信号处理技术

7)通讯系统设计与仿真

8)财务与金融工程

MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。

2.3MATLAB特点

此高级语言可用于技术计算

1)此开发环境可对代码、文件和数据进行管理

2)交互式工具可以按迭代的方式探查、设计及求解问题

3)数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积

分等

4)二维和三维图形函数可用于可视化数据

5)各种工具可用于构建自定义的图形用户界面

6)各种函数可将基于MATLAB的算法与外部应用程序和语言(如 C、C++、

Fortran、Java、COM 以及 Microsoft Excel)集成

7)不支持大写输入,内核仅仅支持小写。

3.Hough变换原理

3.1Hough变换的基本原理

Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和

Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。

Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。但是,一旦参数空间增大,计算量便会急剧上升,同时耗费巨大的存储空间,耗时也随之猛增。就此,多年来国内外众多学者针对具体情况对常规Hough变换进行了多方面的探索,并提出了许多有价值的改进方法:

1)扩展应用范围,提出多种参数化的方法

在早期的研究中,Hough变换由只检测图像中的直线扩展到检测圆弧、二次曲线和任意曲线构成的形状;线条的参数化方法也由最初的截距型参数发展到斜率倾角和截距型参数、双Hough空间型参数、以及检测圆的圆心坐标、半径型参数和检测物体复杂形状的基于模板的多维关键点参数等。

2)提高实用性,提出多种减少计算量的算法

针对Hough变换计算量大的不足,相继提出了四分树结构的Hough变换、以梯度信息为引导的Hough变换、分层Hough变换、自适应Hough变换、快速自适应Hough变换、随机Hough变换(RHT)等;对于高维Hough变换采用降维处理,数据结构多采用动态量化空间等。

3)增强抗干扰能力,提高检测精度

Hough变换提取精度问题始终受到普遍关注,例如Hough变换的离散化误差、混叠干扰、抗噪声干扰性能等。就此类问题的研究例如,Kiryati、Buckstein提出采用最佳Kaider窗函数对参数域进行平滑滤波以减少混叠误差;Hunt、Nolte 等人应用信号检测理论对Hough变换的抗干扰性能和基于最大后验概率的最佳算法进行了抗干扰性能比较,并指出了影响Hough变换抗干扰性能的原因。4)多种峰值检测方法

Hough变换中参数空间的峰值检测是一个聚类检测问题,阈值的选取是成功与否的关键所在。其中,一种方法是对图像空间进行加权,以改变参数空间的峰值分布;一种方法是直接对参数空间进行极大值的搜索。

3.2Hough变换的不足之处

本课题的研究内容,如上所述,常规Hough变换虽然具有显著的优势,但其不足也不容忽视,如不加改进,有时将会令人无所适从,例如检测速度太慢,无法做到实时控制;精度不够高,期望的信息检测不到反而做出错误判断,进而产生大量的冗余数据。就圆检测而言,常规Hough变换的不足主要有以下几点:

(1)参数由直线的两个参数,即截距和斜率,上升到三个,即圆心坐标和半径,每个点映射成参数空间的一个曲面,是一到多映射,因而计算量急剧增大;

(2)需要占用大量内存空间,耗时久、实时性差;

(3)现实中的图像一般都受到外界噪声的干扰,信噪比较低,此时常规Hough 变换的性能将急剧下降,进行参数空间极大值的搜索时由于合适的阈值难以确定,往往出现“虚峰”和“漏检”的问题。

3.3Hough变换的应用

理论与实践向来是形影不离,相辅相成,Hough变换之所以有如此长足的发展,主要原因还是在于实践应用上的广泛需求;而在实践中所暴露出的不足又进而促进了它的发展,循环往复,就如同生命的演化。现枚举其主要应用领域如下:1)生物医学: Hough变换已被成功应用于基于人工智能的专家诊断系统;X射线人体照片和CT图像的处理和判读;光学显微镜和电子显微镜中的细胞核自动分析系统;从超声波诊断中提取三维动脉特征,等等。

2)自动化和机器人视觉: Hough变换已被用于产品部件的自动监视、缺陷诊断、生产过程的自动监控、计算机辅助制造(CAM)等。例如基于Hough变换的机械零件检测和定位系统;基于Hough变换采用直线、圆弧等作为基本特征的工业产品检查系统;

3)空间技术和军事防御: Hough变换已被用于运动目标轨迹的检测与识别,高空侦察机、间谍卫星和军事雷达等目标自动识别系统的特征提取。例如应用Hough变换对战斗机的外形特征进行提取和自动识别;应用Hough变换辅以信号检测理论解决并行多运动目标的跟踪问题。

4)办公自动化: Hough变换在许多应用系统中得到了很好的应用。例如采用Hough变换进行英文字符特征提取并自动识别,其对印刷体字符识别率为

99.6%,对手写体字符的平均识别率也达到了86.9%,并已成功应用于邮政信

件的自动分拣、文件处理等。

由以上分析可见,Hough变换有着广泛的关注程度以及良好的应用前景。在计算机视觉和自动目标识别系统中,Hough变换是一个用于边缘线条特征提取的强有力工具。

4.Hough变换检测直线设计

4.1Hough变换检测直线基本原理

Hough变换检测直线就是选取图像空间中一条直线L的某些特征,作为参数空间的一个点M,并且该直线L上所有点,通过某种算法,都能够对应着这些特征,从而在图像空间和参数空间之间建立起“线—点”的对偶性。Hough变换就是根据这种对偶性,将图像空间中直线的检测问题,转化为参数空间中点的检测问题,而后者的处理比前者要简单得多,进行累加统计即可。

下图4.1给出了数字图像中三类直线的结构分布情况,图中一个小方格代表一个像素,黑方格代表边缘像素点,白方格代表背景像素点。可以看出,近水平直线段由相距很近的行基元集合组成;近垂直直线段由相距很近的列基元集合组成;近45°直线依据其斜率分别由45°或135°扫描线上的斜基元集合组成。综上可知,任何直线段都可以表示为总体走向趋势基本一致且缝隙很小、相距很近的相应基元的集合。以此结构特点为基础建立本文的直线提取方法。

图4.1数字图像中直线的分布

4.2Hough变换的几种基本算法

常用的Hough变换检测直线的方法,是运用下式在图像空间和参数空间之间,建立对偶变换。

ρ= x cos α + y sin α(4.1)

(a)直角坐标系(b)参数空间

图4.2 Hough变换示意图

在式(4.1)中,ρ为极径;α为极角,α取 0 ~180 °;x为像素点相对图像原点的行坐标;y 为像素点相对图像原点的列坐标。对偶变换示意图如图4.2所示。

为了检测出直角坐标系中,由非零点所构成的直线,需要根据检测分辨率的要求,将α离散化为Nα个参数区间,将ρ离散化为Nρ个参数区间,也就是说将极坐标系量化成许多小格,建立参数空间。这种方法被称为标准 Hough变换方法 ( standard hough transform,SHT)。其优点是:无论直线怎样变化,参数空间中α和ρ的取值范围是有限的。所以,目前的直线检测大多数都是基于这种方法。

但是,这种方法在Nα值较大的情况下,存在以下两个缺陷:

( 1 ) 计算量大 Nα越大,α的步长越小,计算量就越大。在要求检测精度很高的场合,Nα的值往往非常大,这样会使计算量大增。

( 2 ) 需要大的存储空间如果α和ρ都占 4 个字节,参数空间所需要的存储空间的字节数S 可由下式求出 :

S =4 NαNβ(4.2)

图4.3 Hough变换从图像空间到参数空间的转换

在式(4.2)中,Nα为α在 [ 0,π) 间取的离散值的个数;Nρ为ρ的采样个数。对较大的图像,S将大于数兆字节 ( G B ),单靠物理内存,难以满足这样的要求。为了减少这种 Hough 变换的计算量,减小所需要的存储空间,在此基础上出现了很多改进的Hough 变换算法,例如分块检测法、两次检测法、全整数 Hough变换等,为讨论方便,将其统称为正弦 Hough 变换方法。但这些方法由于受α的步长限制,有时候检测结果不尽人意,难以实现对任意斜率直线的快速、精确检测,尤其是对超大型图像(例如像素在2048×2048 以上)。如果能够建立一个不受α步长限制的参数空间,就有可能实现对任意斜率直线的快速、精确检测。其中,Hough变换从图像空间到参数空间的转换如图4.3所示。

4.3Hough变换算法的比较与选择

图像空间中,直线 L0 : y=k0x+b0上每一个点,在参数空间中都代表一条直线,这些直线都相当于一点 M ( k0,b0)。与用极坐标建立参数空间的方法相比,这种方法不受α的步长限制,检测了所有的可能出现的直线,不会有任何遗漏,在像素允许的情况下,能精确地检测出图像中的任意直线。这种优点决定了它非常适合用来对直线进行精确检测。

为便于讨论,将其称为kb Hough变换方法。虽然这种方法在原理上非常明确,但在具体实现过程中,如果简单地用浮点数进行斜率和截距的计算,还有以下 3个问题需要解决:

( 1 ) 如果同时计算斜率和截距,参数空间结构数组可能异常庞大,而且计算量

非常大。一幅像素为m×n的图像,假设图像中可能出现的不重复的斜率有 u种( u大于图像的像素总数 )。若这些数据都占4个字节,那么要求的计算机内存为:

W=8?u?m?n (4.3)对较大的图像,要求的计算机内存超过上千兆字节(GB),这显然是不现实的。如何解决这个问题?很多时候,如果将一个2维问题分解为两个1维问题来解决,往往非常方便。参数空间数组之所以异常庞大,是因为同时包含了待测的斜率和截距,而斜率和截距的组合,决定了其数组的元素个数必然非常多。如果将斜率k和截距b分步进行检测,先检测斜率,找出出现次数最多的斜率 k0,然后再检测截距,找出斜率为k0的,出现次数最多的直线的截b0,也就是说,将一个2维问题分解为两个1维问题。由于斜率为k0的二点对的数量往往非常有限,这样就能有效地减小参数空间。但是,即使将斜率k和截距b分步进行检测,如果用浮点数进行计算斜率,并采用普通的Hough变换的投票方式,即先计算完由非零点组成的所有的二点对的斜率,再对斜率进行统计,也可能需要很大的参数空间。1幅800×600的图像,如果非零点非常多,需要的参数空间仍然可能超过数千兆字节( GB )。所以,用浮点数计算斜率,要减小参数空间,只能一边计算斜率,一边统计斜率相同的情况( 与前面的斜率进行比较 )。即边投票,边计票。但是,这样计算量非常大。

( 2 ) 程序的复杂程度高

根据定量度量程序的复杂程度的McCabe方法,流图 (也称为程序图) 的环形复杂度可由下式求出 :

V(G) = R + 1 (4.4)在式(4.4)中,V ( G)为环形复杂度;R为流图中的判定节点数目。通常V ( G)≤10 为宜。根据McCabe方法求出该方法的流图的判定节点数R为10,由式( 3 )可知,其环形复杂度为11,显然复杂程度太高。

( 3 ) 如果直接采用浮点数计算斜率,无法处理斜率为无穷大的垂直直线斜率为无穷大,给计算带来不便,这正是极少有人采用这种方法的原因。综上所述,除了需要分步检测斜率和截距外,还不能简单地采用浮点数计算斜率。因此采用了斜率分式查表方法来解决这些问题。

4.4Hough变换检测直线的算法流程图

原始输入的彩

色图像

变换得到灰度

图像

提取灰度图像

边缘

Hough变换得到

变换矩阵图像

计算检测图像

中的直线

计算标注出最

长直线

图4.4算法流程图4.5Hough变换检测直线算法的实现

clear

I = imread('abc.jpg');%输入原图像

I = rgb2gray(I);%将输入的彩色图像转换成灰度图像输出

%I = imrotate(I,33,'crop');

% figure

% imshow(rotI);

figure

imshow(I);

BW = edge(I,'canny');%提取图像边缘

figure

imshow(BW);

[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,theta,rho为计算霍夫变换的角度和半径值

figure

imshow(H,[],'XData',T,'YData',R, 'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho');

axis on

axis normal

hold on

P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));%在Hough矩阵图像中寻找前5个大于最大值0.3倍的峰值

x = T(P(:,2)); y = R(P(:,1));

plot(x,y,'s','color','white');

% Find lines and plot them

lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); %找出图中的直线figure,imshow(rotI),hold on

figure, imshow(I),hold on

max_len = 0;

for k = 1:length(lines)

xy = [lines(k).point1; lines(k).point2];

plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

% % 绘制线的起点(黄色)、终点(红色)

plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');

plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

% 计算线的长度,找最长线段

len = norm(lines(k).point1 - lines(k).point2);

if ( len > max_len)

max_len = len;

xy_long = xy;

end

end

plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue');

5.仿真结果及分析

在MATLAB7.1环境运行程序源代码,对输入彩色图像通过变换得到灰度图像,并进行边界提取、Hough变换和直线检测,得到如下结果。

5.1仿真结果

如图5.1,输入图像为一幅后缀为jpg格式的彩色图像,在matlab程序代码中首先使用imread()函数将图像读入,以便于后续的处理和操作。

图5.1原图像

由图5.2可知,输入图像为一幅彩色图像时,可以使用rgb2gray()函数,先将彩色图像转换为灰度图像(RGB不发生变化),使图像适合于边界提取,为下一步做准备。

图5.2灰度图像

由图5.3可知,采用edge()函数,对灰度图像进一步进行处理,将图像的边缘地方的像素值设为1,其余地方的像素设为0,可以得到图像的边界,且提取出的图像边界清晰完整。

图5.3边界图像

由图5.4可知,可以采用hough()函数对边界图像进行Hough变换,并绘

制出Hough变换得到的变换矩阵坐标图,其中在峰值为520时,标注出的5个点为前5个大于最大值0.3倍峰值的点。

图5.4 Hough变换图像

由图5.5可知,在Hough变换后的矩阵中选出前5个大于最大值0.3倍峰值的点,并将这些点用“x”标出后,便可简单地绘制线的起点(用黄色表示)、终点(用红色表示)并检测出直线;最后通过计算,使用蓝色线段标注出最长的线.

图5.5直线检测图像

5.2结果分析

本次课程设计原始的输入图像为一幅彩色图像,并采用了如下算法:首先,在matlab代码中可用imread()函数将其读入;然后,为了便于处理,需要采用rgb2gray()函数,将其从彩色图像变换为灰度图像,使其适合于边界的提取;得到灰度图像后,采用Canny边缘检测算子进行边界提取,在代码中输入BW = edge(I,'canny');即可实现,其中I为变换得到的灰度图像;对于提取边缘后的图像,应对其进行Hough变换,得到Hough变换矩阵,直接采用hough()函数即可实现;最后,计算检测图像中的直线,将图像中的直线以及直线的起始点一一标出,对于最长的直线可用不同于其他颜色的直线标出,这里普通直线采用绿色直线标注,最长的直线采用蓝色直线标注。通过对图5.1至图5.5的分析可知,本次课程设计所采用的算法流程为切实可行、可靠正确的算法。

结论

本文只是一个很简单的Hough变化检测直线算法的实现,需要改进的地方还有很多,主要有下面两方面:

(1)程序上的改进:可以给程序增加二值化和边缘检测的代码,使其可以处理一般位图。

(2)算法上的改进:可以利用待检测图像的统计特性来自适应调整清零阈值和清零邻域值的大小;或者可以利用待检测图像边缘像素点的位置信息,先将共线的边缘点检测出来,然后再对结果进行后处理,主要是去掉噪声点和连接由于边缘检测而产生的不连续像素,这样就可以检测图像中的线段,更好的表达了图像的形状信息;或者使用更复杂和更完善的算法。

(3)运用Hough变换,将笛卡尔坐标空间转换成极坐标空间(ρ,θ),找出若干峰值点,检测出图像中的直线。

(4)由于在采集时图像会受到光照、大气紊流等自然因素的影响,当一幅遥感图像中的所有直线被检测出来后,一条直线会被分割成若干个小段。为了复原这种直线,可以设定阈值T2,计算同一直线上相邻两条直线段的距离,如果这个值小于阈值T2,将两道路段进行连接,否则不作处理。

(5)检测出各个直线段的起止点。

(6)在复原所有的直线段后,根据桥梁的特点,设定大阈值T3,用来检测出较长的直线段(即桥体的其中一边);并利用直线段端点坐标值,计算所有有用直线段的斜率K。

参考文献

[1] 刘刚等. MATLAB数字图像处理[M].机械工业出版社,2010:135-150.

[2] 龚声蓉等.数字图像处理与分析[M].清华大学出版社,2006: 1-15,258-269.

[3] 葛哲学.精通MATLAB[M].电子工业出版社,2008: 2-8.

[4] 张圣勤. MATLAB7.0实用教程[M].机器工业出版社,2006: 90-118.

[5] 孙仲康,沈振康.数字图像处理的应用[M].国防工业出版社,2008:132-158.

[6] 贾永红.计算机图像处理与分析[M].武汉大学出版社,2005:35-47.

[7] 姚敏. 数字图像处理[M].机械工业出版社,2006: 52-60.

[8] 阮沈勇.MATLAB程序设计[M].电子工业出版社,2004: 70-85.

[9] 陈桂明.应用MATLAB语言处理数字信号与图像处理[M]. 科学出版社,2000: 50-65.

[10] 赵荣椿.数字图像处理导论[M].西北工业大学出版社,2003: 65-72.

hough变换检测椭圆的matlab源码[matlab]

hough变换检测椭圆的matlab程序 程序代码:(代码标记[code]...[/code] ) [row col]=size(fedge); minofa=a; maxofa=round(row/2); minofy0=round(col/2)-30; maxofy0=round(col/2)+30; minofb=round(col/2)-60; maxofb=round(col/2); maxofx=round(row/2); scalor=4; H=zeros(floor((maxofa-minofa)/scalor)+1,floor((maxofa-minofa)/scalor)+1,... floor((maxofy0-minofy0)/scalor)+1,floor((maxofb-minofb)/scalor)+1); for x=1:maxofx for y=1:col temp=fedge(x,y); if temp==255 for a=minofa:scalor:maxofa for x0=a:scalor:maxofa for b=minofb:scalor:maxofb for y0=minofy0:scalor:maxofy0 temp=((y-y0)/b)^2+((x-x0)/a)^2; if abs(temp-1)<=0.01 xtemp=floor((x0-minofa)/scalor)+1; atemp=floor((a-minofa)/scalor)+1; ytemp=floor((y0-minofy0)/scalor)+1; btemp=floor((b-minofb)/scalor)+1; H(xtemp,atemp,ytemp,btemp)=H(xtemp,atemp,ytemp,btemp)+1; end end end end end end end end maxofH=max(max(max(max(H)))); for i=1:floor((maxofa-minofa)/scalor)+1 for j=1:floor((maxofa-minofa)/scalor)+1 for m=1:floor((maxofy0-minofy0)/scalor)+1 for n=1:floor((maxofb-minofb)/scalor)+1

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

用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;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: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(a>0&&a<=m&&b>0&&b<=n) hough_space(a,b,r) = hough_space(a,b,r)+1; end end end end max_para = max(max(max(hough_space))); index = find(hough_space>=max_para*p); length = size(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&&... (rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)

基于质心法的一种椭圆检测的方法

基于质心法的一种椭圆检测的方法 发表时间:2018-05-14T16:09:43.330Z 来源:《电力设备》2017年第34期作者:仝毅杰尚雅层陈鸿 [导读] 摘要: 针对图像中完整椭圆或是非完整椭圆中心的情况,提出了一种基于质心的方法来确定椭圆的中心位置,在这个过程中设定椭圆为均质椭圆,假定其密度为1,经过实验证明,该算法可以很好的确定出椭圆的中心位置。 (西安工业大学机电工程学院西安 710021) 摘要: 针对图像中完整椭圆或是非完整椭圆中心的情况,提出了一种基于质心的方法来确定椭圆的中心位置,在这个过程中设定椭圆为均质椭圆,假定其密度为1,经过实验证明,该算法可以很好的确定出椭圆的中心位置。 在机器视觉安全加气系统中,能够精确地找到进气口的位置是完成加气动作最关键的因素。加气时,加气口与进气口必须对准,因此摄像机无法在进气口的轴向拍摄,椭圆中心位置的确定是整个系统动作完成的关键之所在。文献[1]提出了基于Hough变换的椭圆算法,其随机采样两点,利用椭圆的性质去除无效的采样,再进行拟合得到椭圆。文献[2]采用最小二乘法二次曲线拟合法对椭圆提取。文献[3]依据椭圆的一些定位信息、图像边缘的梯度方向灰度的分布特征拟合出亚像素边缘点,并进行最小二乘拟合,最终得到得到椭圆中心。文献[4]首先缩小图像进行Hough变换,再放大图像建立新的参量空间进行Hough变换,最终得出椭圆的中心位置。椭圆中心位置的检测主要有Hough变换法、最小二乘拟合法[5]等。Hough变换法可以检测出椭圆,但是容易受到参数离散化程度的影响;最小二乘法对图像的边缘点拟合,所以图像边缘点的提取精度直接影响了椭圆中心位置的精度。因此,本文提出一种利用质心法得出图像中椭圆的中心位置的方法。 1.质心提取的基本原理 对于一个带状的椭圆区域S,如图1,它的质心可以通过质心计算公式得到: 图1 带状椭圆环 (1.1)(1.2) 拍摄的画面中,在椭圆的带状区域内假设其密度,则空白处密度。因此,上述的积分就是可以转化为只对带状区域 的积分,即:(1.3)(1.4) 在拍摄的画面中,由于是离散的像素点,因此,离散化后的计算方法如下,(1.5)(1.6) 为单位质量,假定其为均匀分布,即为一常量。 (1.7)(1.8) 化简得:(1.9)(1.10) 其中,分别为画面内所有坐标的和;为像素个数。 对于线状曲线S的质心,如图2所示 图2 线状椭圆S 线状曲线的质心计算如下: (1.11)(1.12) 同样,拍摄的画面是像素点,因此,将其离散化后的计算方法如下: (1.13) (1.14) 因此,无论区域是带状区域或是线状区域均适用于质心法。 2.实验结果

Hough变换实例 很清晰的

数字图像处理第八次作业 实验内容 1、拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θ θ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。

图像处理作业-hough变换的边缘提取

图像处理期末作业 姓名:刘新芳 学号:2012204097 院系:信自院通信系 专业:信号与信息处理

用Hough变换提取边界直线 Hough变换是1962年由Paul Hough提出来的。它所实现的是一种从图像空间到参数空间的映射关系。它具有一系列的优点。例如,由于根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或者其他目标遮盖而引起边界发生瞬间间断的情况,它具有很好的容错性和鲁棒性。 原理 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。 Hough 变换是一种利用表决原理的参数估计技术。其基本原理在于利用图像空间和Hough参数空间的点与线的对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形势联系起来的参数空间累计对应点。在参数空间不超过二维的情况下,这种变换效果理想。 将原始图像空间的给定的曲线表达形式变为参数空间的一个点,这样就把原始图像中给定曲线的检测问题转化为寻找参数空间的峰值问题,也即是把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。简而言之,Hough 变换思想是:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在原始坐标系下的各个点的投影到参数坐标系下之后,看参数坐标系下没有聚集点,这样的聚集点就对应了原始坐标系下的直线。 如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而是计算复杂程度过大,为解决这一问题,采用极坐标方程,变换方程如图1所示。 θ ρsin θ = cos y x+ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点-正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,

Hough变换实例

实验内容 1.拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θθ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。 由于Hough 变换需要用到稀疏矩阵,也即首先得找到图像矩阵中的非零量,针对这些非零量进行进一步的处理。这个操作可以直接通过Matlab 中的find 语

Hough变换原理要点

摘要 人类对物体的识别最主要是对物体外形的识别,图像的形状检测在图像处理以及模式识别中是十分重要的。Hough变换作为目标形状特征提取的有效方法得到了广泛的应用。但Hough变换算法主要应用于二值图像(即边缘图像),因此在对灰度图像进行Hough变换前需要对其进行预处理(包括图像的滤波与边缘检测)。图像预处理作为Hough变换目标检测过程中重要的前期工作,其结果将直接影响检测结果的好坏。文中介绍了图像中常见的两种噪声,对图像的空间域噪声滤波做了一些研究,分析了高斯滤波与中值滤波的局限性,在双边滤波的基础上提出了一种基于多次中值抽取的双边滤波方法,该方法兼顾了空间邻域的相关性和像素强度的相似性,通过伪中值滤波选取强度滤波器的参考像素值,在平滑高斯噪声和椒盐噪声的同时更好地保护了边缘,与针对某一类特定噪声设计的传统滤波方法相比,该方法能够处理混有混合噪声(高斯噪声和椒盐噪声)的图像,并能够得到很好的滤波效果。同时,本文分析了几种经典的边缘检测算子,用迭代的双边滤波方法代替Canny算子中的高斯滤波过程或自适应滤波过程,在一定程度上避免了滤波过程给边缘带来的模糊,得到了更好的边缘检测结果。Hough变换作为图形目标检测的有效方法,能够检测直线、圆、椭圆和抛物线等众多解析图形,广义Hough变换对该方法做了一些推广,不

再受图形解析表达式的限制,通过预先设置的查找表,能够检测任何图形目标。文中对这些方法都做了介绍,并对这些方法做了仿真。由于受到图像空间和参数空间离散化的影响,以及Hough变换自身的计算过使得传统Hough变换方法也有一些局限性,比如在高强度噪声下检测的结果不佳,计算量大,存储资源需求大等。文中分析了传统Hough变换的投票过程,指出传统方法对参数单元进行1值累加是不合理的,并且传统方法没有区分图像中的噪声点和直线上的点,介于此,提出了基于直线连接度量的Hough变换,既考虑了图像的全局信息,也考虑了图像中像点邻域的局部信息,使得参数空间中的峰值不再受到噪声的影响,同时也避免了图像中具有线性关系的特征点投票带来的虚假峰值。通过对传统Hough变换定义方式的修改,提出了基于模板匹配的Hough变换检测方法,在该方法中,每一个参数单元都确定了图像空间中的一个模板,通过该模板主动搜索图像空间中符合条件的特征点,特征点的个数作为参数单元的值,并记录图像中线段的端点坐标,完成图像中线段的检测与定位,能够节省大量的存储资源。 关键词:特征提取;Hough变换 Hough变化检测直线 Hough变换的基本思想是利用点—线的对偶性,即图像空间共线的点对应在参数空间里相交的线,反过来,在参

(标准)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。 最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。 在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上。其它的还是一样。 在看下面一个问题:我们要从一副图像中检测出半径以知的圆形来。这个问题比前一个还要直观。我们可以取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。在这个问题里,图像平面上的每一点对应到参数平面上的一个圆。 把上面的问题改一下,假如我们不知道半径的值,而要找出图像上的圆来。这样,一个办法是把参数平面扩大称为三维空间。就是说,参数空间变为x--y--R三维,对应圆的圆心和半径。

hough变换原理

Hough变换原理 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提,后于1972年由Richard Duda 和Peter Hart推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。 霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题,上一节中已经介绍了车道的直线特征,本节中介绍hough变换检测直线的原理和检测结果。 我们知道,一条直线在直角坐标系下可以用y=kx+b表示, 霍夫变换的主要思想是将该方程的参数和变量交换,即用x,y作为已知量k,b作为变量坐标,所以直角坐标系下的直线y=kx+b在参数空间表示为点(k,b),而一个点(x1,y1)在直角坐标系下表示为一条直线y1=x1·k+b,其中(k,b)是该直线上的任意点。为了计算方便,我们将参数空间的坐标表示为极坐标下的γ和θ。因为同一条直线上的点对应的(γ,θ)是相同的,因此可以先将图片进行边缘检测,然后对图像上每一个非零像素点,在参数坐标下变换为一条直线,那么在直角坐标下属于同一条直线的点便在参数空间形成多条直线并内交于一点。因此可用该原理进行直线检测:

4-13 参数空间变换结果 如图4-13. 所示,对于原图内任一点(x,y)都可以在参数空间形成一条直线, 到的(γ,θ)在参数空间中得到一系列对应曲线见图4-14 霍夫统计变换结果。由霍夫变换检测结果见图4-15(c)所示。

Hough哈夫变换检测原理

Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。 Hough变换的基本思想 设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx 0+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)。这个性质就为我们解决问题提供了方法,就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。 简而言之,Hough变换思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。 首先,初始化一块缓冲区,对应于参数平面,将其所有数据置为0.对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。 在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p ---theta平面上的一条曲线上,其它的还是一样。 Hough变换推广 1、已知半径的圆

相关主题
文本预览
相关文档 最新文档