车道线检测霍夫直线检测原理分析

2024-05-12 18:38

本文主要是介绍车道线检测霍夫直线检测原理分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/happy_stars_2016/article/details/52691255

一、车道线检测步骤


1、灰度化

灰度化关键函数: cvCvtColorcvCvtColor(IplImage* src, IplImage* dst, CV_BRG2GRAY);
最后一个参数为 CV_BRG2GRAY ,表示将BRG图片(彩色图片)转换为灰度图片(黑白)。


2、二值化

图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。
cvThreshold( dst, dst,threshold ,max_value, threshold_type);是手动指定一个阈值,以此阈值来进行二值化处理。
src:原始数组(单通道 , 8-bit of 32-bit 浮点数)。
dst:输出数组,必须与 src 的类型一致,或者为 8-bit。
threshold:阈值
max_value:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。
threshold_type:阈值类型
threshold_type=CV_THRESH_BINARY:如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
threshold_type=CV_THRESH_BINARY_INV:如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.

threshold_type可以使用CV_THRESH_OTSU类型,这样该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。


3、canny边缘检测

Canny算子求边缘点具体算法步骤如下:
1. 用高斯滤波器平滑图像
2. 用一阶偏导有限差分计算梯度幅值和方向
3. 对梯度幅值进行非极大值抑制 
4. 用双阈值算法检测和连接边缘
void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );
image单通道输入图像
edges单通道存储边缘的输出图像
threshold1第一个阈值
threshold2第二个阈值
aperture_size 是表示Sobel 算子内核大小
threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。


4、霍夫直线检测

霍夫变换是一种在图像中寻找直线,圆及其他简单形状的方法。 opencv支持两种不同的霍夫变换:标准霍夫变换(SHT)和累积概率霍夫变换(PPHT)。

在opencv中可以使用同一个函数来使用两种算法。
CvSeq* cvHonghLines2(CvArr* image,  void* line_storage,int mehtod, double rho, double theta, int threshold,  double param1 =0, double param2 =0 );

 image   输入 8-比特、单通道 (二值) 图像

 line_storage  存储检测到的线段,可以是序列或者单行/单列矩阵

 mehtod     Hough 变换变量 rho     与象素相关单位的距离精度theta  弧度测量的角度精度

threshold  阈值参数。如果相应的累计值大于 threshold, 则函数返回的这个线段 
Param1:对传统 Hough 变换,不使用(0);对概率 Hough 变换,它是最小线段长度.
Param2:对传统 Hough 变换,不使用 (0);对概率 Hough 变换,这个参数表示在同一条直线上进行碎线段连接的最大间隔值(gap), 即当同一条直线上的两条碎线段之间的间隔小于param2时,将其合二为一。

二、霍夫直线检测原理

Hough变换在计算机视觉、军事防御、办公自动化等领域都得到了普遍的关注和广泛的应用。其基本思想是将原图像变换到参数空间,

用大多数边界点满足某种参数形式来描述图像中的线,通过设置累加器进行累积,求得峰值对应的点所需要的信息。

Hough变换以其对局部缺损的不敏感,对随机噪声的鲁棒性以及适于并行处理等优良特性,备受图像处理、模式识别和计算机视觉领域学者的青睐。
Hough变换的突出优点就是可以将图像中较为困难的全局检测问题转换为参数空间中相对容易解决的局部峰值检测问题。
1962 年,Paul Hough根据数学对偶性原理提出了检测图像直线的方法,此后该方法被不断地研究和发展,主要应用于模式识别领域中对二值图像进行直线检测。

1、Hough变换原理

a.在图像中检测直线的问题,其实质是找到构成直线的所有的像素点。那么问题就是从找到直线,变成找到符合y=kx+b的所有(x,y)的点的问题。
b.进行坐标系变化y=kx+b,变成b=-xk+y。这样表示为过点(k,b)的直线束。
c.x-y空间的直线上每一个点在k-b坐标系中都表现为经过(k,b)的直线。找到所有点的问题,转变为寻找直线的问题。
d.对于图像中的每一个点,在k-b坐标系中对应着很多的直线。找到直线的交点,就对应着找到图像中的直线。


目前,opencv霍夫检测直线常用的方法是,是将平面中任一条直线用极坐标方式表示:ρ=xcosθ+ysinθ ,

其中p表示直角坐标系中原点到直线的距离,θ表示x轴与p的夹角这样,图像平面上的一个点就对应到ρ-θ平面上的一条曲线上。

如果对位于同一直线上的n个点进行变换,原图像空间的n个点在参数空间对应得到有n条正弦曲线,并且这些曲线相交于一点。


2、Hough检测步骤

Hough变换在算法设计上就可以如下步骤:
a.在ρ,θ合适的最大值与最小值之间建立一个离散的参数空间,如下图1-1。 
b.将参数空间(ρ,θ) 量化成m*n(m为ρ的等份数,n为θ的等份数)个单元,并设置累加器矩阵,如下图。
c.给参数空间的每一个单元分配一个累加器Q(i,j),并把累加器的初始值设置为0
d.对图像边界上的每一个点(x,y)带入ρ=xcosθ+ysinθ,求得每个θ对应的ρ值
e.在参数空间中,找到ρ和θ所对应的单元,并将该单元的累加器加1,即:Q(i,j)=Q(i,j)+1。
f.当直角坐标系中的所有点都经过4和5两步遍历后,检验参数空间中每个累加器的值,累加器最大的单元所对应的ρ和θ即为直角坐标系中直线方程的参数。

注意:当直角坐标系中的点分布在 R 条直线附近时,可在第 5 步检测累加器时,取出累加器中前 R 个值最大的单元所对应的ρk和θk(k=1,2,…,R ),

以ρk和θk为直角坐标系中直线方程式ρ=xcosθ+ysinθ的参数,即可同时实现多条直线的检测。

3、总结

由上所述,Hough 变换的基本策略是:用图像空间的边缘数据点计
算参数空间中的参考点的可能轨迹,并在一个累加器中给计算出参考点的计数,最后选出峰值。该峰值表明在图像空间上有一共线点较多的直线,

该直线的参数由累加器的ρ和θ决定,即按照 Q(i,j)=Q (i,j)+1确定,则图像空间中满足该式的点(x,y)就组成了该直线。


这篇关于车道线检测霍夫直线检测原理分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983420

相关文章

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专