在这一篇文章中我们将学习使用OpenCV中的 HoughLines 函数和 HoughLinesP 函数来检测图像中的直线.

在这个函数中,使用的是霍夫变换(Hough Transform) 这是计算机视觉中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要是用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。

最基本的霍夫变换是从黑白图像中检测直线(线段)。也就是今天我们要学习的内容.

一::如何实现霍夫变换?

在这里我摘抄Bradski的< 学习OpenCV>来进行霍夫变换的推导

众所周知, 一条直线在图像二维空间可由两个变量表示. 例如:

A:在笛卡尔坐标系: 可由参数: (m,b) 斜率和截距表示.

B:在极坐标系: 可由参数:

极径和极角表示

对于霍夫变换, 我们将用 极坐标系 来表示直线. 因此, 直线的表达式可为:

化简得到

2:一般来说对于点(x,y)我们可以将通过这个点的一族直线统一定义为:

这就意味着每一对 (r,の),代表一条通过点(x,y) 的直线.

3:如果对于一个给定点(x,y)

我们在极坐标对极径极角平面绘出所有通过它的直线, 将得到一条正弦曲线. 例如, 对于给定点

(x=8,y=6),我们可以绘出下图

只绘出满足下列条件的点

.

4:我们可以对图像中所有的点进行上述操作.

如果两个不同点进行上述操作后得到的曲线在平面(r,の)

相交, 这就意味着它们通过同一条直线. 例如, 接上面的例子我们继续对点: (9,4),(12,3),绘图, 得到下图:

这三条曲线在 (r,の), 平面相交于点

,坐标表示的是参数对(r,の) 或者是说点

组成的平面内的的直线.

那么以上的材料要说明什么呢? 这意味着一般来说, 一条直线能够通过在平面(r,の),寻找交于一点的曲线数量来 检测. 越多曲线交于一点也就意味着这个交点表示的直线由更多的点组成. 一般来说我们可以通过设置直线上点的 阈值 来定义多少条曲线交于一点我们才认为 检测 到了一条直线.

综上所述:这就是霍夫线变换要做的. 它追踪图像中每个点对应曲线间的交点. 如果交于一点的曲线的数量超过了 阈值, 那么可以认为这个交点所代表的参数对(r,の)在原图像中为一条直线.

举个例子:

如上图,假定在一个8*8的平面像素中有一条直线,并且从左上角(1,8)像素点开始分别计算θ为0°、45°、90°、135°、180°时的ρ,图中可以看出ρ分别为1、(9√2)/2、8、(7√2)/2、-1,并给这5个值分别记一票,同理计算像素点(3,6)点θ为0°、45°、90°、135°、180°时的ρ,再给计算出来的5个ρ值分别记一票,此时就会发现ρ = (9√2)/2的这个值已经记了两票了,以此类推,遍历完整个8*8的像素空间的时候ρ = (9√2)/2就记了5票, 别的ρ值的票数均小于5票,所以得到该直线在这个8*8的像素坐标中的极坐标方程为 (9√2)/2=x*Cos45°+y*Sin45°,到此该直线方程就求出来了。(PS:但实际中θ的取值不会跨度这么大,一般是PI/180)。

实验代码:

这里主要用到两个函数:

①:HoughLines函数是标准霍夫线变换函数,该函数的功能是通过一组参数对 (r,の)

的集合来表示检测到的直线,其函数原型为:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用1像素。

theta参数表示参数极角の以弧度为单位的分辨率,这里使用1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对 (r,の)的容器 。

srn参数、stn参数默认都为0。如果srn = 0且stn = 0,则使用经典的Hough变换。

min_theta参数表示对于标准和多尺度Hough变换,检查线条的最小角度。

max_theta参数表示对于标准和多尺度Hough变换,检查线条的最大角度。

opencv的HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点

,其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素。

theta参数表示参数极角の以弧度为单位的分辨率,这里使用 1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对

的容器,也就是线段两个端点的坐标。

minLineLength参数表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。

maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。

实验结果分析:

对于简单的图形还是处理的很充分的,但是对于稍微复杂的图像,依旧是无能为力.这也是传统算法的局限性所在,泛化能力较差.

hough变换直线检测_CV学习笔记(十五):直线检测相关推荐

  1. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  2. windows内核开发学习笔记十五:IRP结构

    windows内核开发学习笔记十五:IRP结构   IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...

  3. Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

    Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件 用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很 ...

  4. IOS之学习笔记十五(协议和委托的使用)

    1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...

  5. Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告

    请看之前的:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 话不多说,直接上demo <!DOCTYPE html> <html lang="en"& ...

  6. 世界是有生命的(通向财富自由之路学习笔记十五)

    最近因为工作调度的事情,有了一段空闲的日子,有比较多的时间来回望自己走过的路以及如何走好以后的路.之前忙得很少时间来写博文,很少时间来写读书笔记,逐渐将自己一些很好的习惯丢弃了.从今天起将重拾写博文的 ...

  7. 前端学习笔记(十五)

    第十五章 HTML5新增标签 一.HTML5概述 1.简介         HTML5万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言的第五次大修改.HTML5将成为 HTML.XHTML ...

  8. 【theano-windows】学习笔记十五——受限玻尔兹曼机

    前言 终于到了最喜欢的模型: 受限玻尔兹曼机(RBM)了, 发现关于RBM是如何从能量模型发展过来的介绍非常不错, 而关于详细理论证明, 可以去看我前面的受限玻尔兹曼机的一系列博客. 国际惯例, 参考 ...

  9. javascript学习笔记(十五) 间歇调用和超时调用

    1.超时调用setTimeout() setTimeout() 方法接受两个参数,第一个参数是函数,第二个参数是时间(单位微秒),返回数值ID 1 setTimeout( function () { ...

最新文章

  1. truelicense中的maven配置
  2. 启动子级时出错_WHO I级脑膜瘤手术或放射外科治疗后的恶性转变
  3. CIO众论:转型路径和新技术实践
  4. Cowrie 部署 SSH 蜜罐
  5. 关于OpenCV使用遇到的问题集(多数为转载)
  6. 通用的分页存储过程(少量代码实现)
  7. ArcMap教程:合并ShapeFile中多个要素
  8. 【Lingo】lingo使用
  9. linux下查看opencv版本
  10. Ansys APDL的超声换能器的模态分析(更新中)
  11. matlab插值与拟合例题_[转载]MATLAB插值与拟合(1)
  12. ubuntu 各版本
  13. python randn_numpy.random.randn()用法
  14. Win10 系统一天蓝屏好多次,怎么解决?
  15. 登录失败:用户帐户限制。可能的原因包括不允许空密码登录时间限制或强制的策略限制。
  16. matlab sisotool工具DEMO
  17. 台达DOP系列触摸屏与电脑通讯不上时,如何进入系统设置画面修改系统设置从而正常通讯?
  18. Java提取URL某个参数的值
  19. 华三s5000配置镜像接口_H3C S5000系列千兆以太网交换机 用户手册-5W101
  20. Collaborative Filtering 协同过滤小结 part-1:CF背景

热门文章

  1. TCP三次握手抓包观察实战篇
  2. 前端中心化管理API使用说明
  3. 均线策略---使用quartz实现策略
  4. 数据结构:单链表和双向链表
  5. 大数据技术周报第 002 期
  6. Express-hello
  7. C# 读取EXCEL文件的三种经典方法
  8. c读取txt文件_第93天:文件读写
  9. deepfake ai智能换脸_AI 换脸、声音篡改等,明确写入新版民法典!
  10. 克罗内克内积 Kronecker product