当前位置:首页 > 代码 > 正文

霍夫直线检测代码(霍夫变换直线检测流程)

admin 发布:2022-12-19 20:46 141


本篇文章给大家谈谈霍夫直线检测代码,以及霍夫变换直线检测流程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Python OpenCV 霍夫(Hough Transform)直线变换检测原理,图像处理第 33 篇博客

霍夫变换(Hough Transform)是图像处理领域中,从图像中识别几何形状的基本方法之一。主要识别具有某些相同特征的几何形状,例如直线,圆形,本篇博客的目标就是从黑白图像中识别出直线。

翻阅霍夫直线变换的原理时候,橡皮擦觉得原理部分需要先略过,否则很容易在这个地方陷进去,但是问题来了,这个原理略过了,直接应用函数,里面有些参数竟然看不懂。例如极坐标,角度扫描范围,这种函数就属于绕不过去的知识点了,所以本文转移方向,死磕原理,下面的博文将语无伦次的为你展示如何学习原理知识。

因为数学知识的贫乏,所以在学习阶段会涉及到很多基础概念的学习,一起来吧。

首先找到相对官方的资料,打开该 地址

下面是一个数学小白对原理的学习经验。

教材说:众所周知,一条直线在图像二维空间可由两个变量表示。

抱歉,小白还真不知道……即使学习过,这些年也早已经还给老师了。

一开始难道要学习笛卡尔坐标系,不,你低估小白的能力了,我第一个查询的是 θ 读作 西塔 ,是一个希腊字母。

什么是笛卡尔坐标系?

这个比较简单,直角坐标系。

斜率和截距

斜率,亦称“角系数”,表示一条直线相对于横坐标轴的倾斜程度。

一条直线与某平面直角坐标系横坐标轴正半轴方向的夹角的正切值即该直线相对于该坐标系的斜率。

如果直线与 x 轴互相垂直,直角的正切直无穷大,故此直线不存在斜率。

对于一次函数 y=kx+b , k 就是该函数图像的斜率。

在学习的时候,也学到如下内容:

截距:对 x 的截距就是 y=0 时, x 的值,对 y 的截距就是 x=0 时, y 的值,

截距就是直线与坐标轴的交点的横(纵)坐标。 x 截距为 a , y 截距 b ,截距式就是: x/a+y/b=1(a≠0且b≠0) 。

斜率:对于任意函数上任意一点,其斜率等于其切线与 x 轴正方向所成的角,即 k=tanα 。 ax+by+c=0中,k=-a/b 。

什么是极坐标系?

关于极坐标系,打开 百度百科 学习一下即可。

重点学到下面这个结论就行:

找资料的时候,发现一个解释的比较清楚的 博客 ,后续可以继续学习使用。

继续阅读资料,看到如下所示的图,这个图也出现在了很多解释原理的博客里面,但是图下面写了一句话

在这里直接蒙掉了,怎么就表示成极坐标系了?上面这个公式依旧是笛卡尔坐标系表示直线的方式呀,只是把 k 和 b 的值给替换掉了。

为何是这样的,具体原因可以参照下图。

centerchou 图/center

继续寻找关于霍夫变换的资料,找到一个新的概念 霍夫空间 。

在笛卡尔坐标系中,一条直线可以用公式 表示,其中 k 和 b 是参数,表示的是斜率和截距。

接下来将方程改写为 ,这时就建立了一个基于 k - b 的笛卡尔坐标系。

此时这个新的方程在 k - b 坐标系也有一个新的直线。

你可以在纸上画出这两个方程对应的线和点,如下图所示即可。

centerchou 图/center

新的 k - b 坐标系就叫做霍夫空间,这时得到一个结论,图像空间 x - y 中的点 对应了 霍夫空间 k - b 中的一条直线 ,即图像空间的点与霍夫空间的直线发生了对应关系。

如果在图像空间 x - y 中在增加一个点 ,那相应的该点在霍夫空间也会产生相同的点与线的对应关系,并且 A 点与 B 点产生的直线会在霍夫空间相交于一个点。而这个点的坐标值 就是直线 AB 的参数。

如果到这里你掌握了,这个性质就为我们解决直线检测提供了方法,只需要把图像空间的直线对应到霍夫空间的点,然后统计交点就可以达到目的,例如图像空间中有 3 条直线,那对应到霍夫空间就会有 3 个峰值点。

遍历图像空间中的所有点,将点转换到霍夫空间,形成大量直线,然后统计出直线交会的点,每个点的坐标都是图像空间直线方程参数,这时就能得到图像空间的直线了。

上述的内容没有问题,但是存在一种情况是,当直线趋近于垂直时,斜率 k 会趋近于无穷大,这时就没有办法转换了,解决办法是使用法线来表示直线。

上文提及的斜截式如下:

通过第二个公式,可以得到下述公式:

此时,我们可以带入一些数值进行转换。

图像空间有如下的几个点:

转换后的函数,都可以在霍夫空间 θ - ρ (横坐标是 θ ,纵坐标是 ρ )进行表示。

原理这时就比较清晰了:

除了一些数学知识以外,经典的博客我们也有必要记录一下,方便后面学习的时候,进行复盘。

本部分用于记录本文中提及的相关数学原理,后续还要逐步埋坑。

今天涉及了一点点数学知识,能力限制,大家一起学习,有错误的地方,可以在评论区指出,不胜感激。

希望今天的 1 个小时(今天内容有点多,不一定可以看完),你有所收获,我们下篇博客见~

相关阅读

技术专栏

逗趣程序员

计算机视觉 OpenCV Android | 基本特征检测之 霍夫直线检测 详析

假设有一条直线如下图:

在 笛卡儿平面坐标系 统中的斜率参数与截距参数为 (k,b) ;

对于 每个平面空间的像素点坐标(x,y) ,

随着 角度θ 的取值不同,都会 得到r值 ,

(%+++%要点.B)而对于 任意一条直线 来说,在 极坐标空间 它的 (r,θ) 都是 固定不变的 ,

则对于 边缘图像 的 每个平面空间坐标点 可绘制 极坐标的曲线 如图所示:

OpenCV关于 霍夫直线变换 提供了两个相关API函数,

一个 是在霍夫空间求取 直线两个极坐标的参数 ,

需要开发者自己转换到平面坐标空间计算直线;

另外 一个则会 直接返回平面空间直线/线段的两个点坐标信息 。

返回极坐标参数的API函数如下:

使用该API实现直线检测:

以上的这个API函数需要对得到的每对 极坐标参数(r,θ) 做 计算 ,

使其 变换 到 平面空间 ( x0 = r * cosθ ; y0 = r * sinθ ),

接着通过对 x0 和 y0 添加 偏移量 并进行计算,得到直线的 两个点 ;

然后 绘制直线 。

另外一个 API函数则比较简单,

它 省去了 开发者自己把极坐标变换为直线坐标的 过程 ,

直接返回 每个线段/直线对应的 两个点坐标 ,

其API函数与参数的解释具体如下:

使用该API实现图像直线检测:

matlab实现霍夫变换检测直线,代码报错,请大神帮忙看看

错误629”端口已由远程计算机断开连接,从字面上就能看出原因在哪里了!

解决方法:1.查看账号密码是否输入错误,注意小数点或者是空格。

2.查看网卡驱动是否正常。

3.查看网线是否连接成功。(查看“本地连接”)

4.查看宽带是否欠费或者是到期。

5.前四项都试过如果还是不行的话,把电脑和光猫一起关掉

HoughLinesP(霍夫变换直线检测)

霍夫变换 是一种特征检测(feature extraction),被广泛应用在 图像分析 (image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的 算法 流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

现在广泛使用的霍夫变换是由RichardDuda和PeterHart在公元1972年发明,并称之为广义霍夫变换(generalizedHoughtransform),广义霍夫变换和更早前1962年的PaulHough的专利有关。经典的霍夫变换是侦测图片中的 直线 ,之后,霍夫变换不仅能识别直线,也能够识别任何形状,常见的有圆形、椭圆形。1981年,因为DanaH.Ballard的一篇期刊论文"Generalizing the Hough transform to detect arbitrary shapes",让霍夫变换开始流行于计算机视觉界。

●源图像

●处理后图像

●函数原型

○c++

○Android

●参数解释

○image:输入图像:8-bit,灰度图

○lines:存储线段极坐标的容器,每一条线由具有四个元素的矢量(x_1,y_1, x_2, y_2) 表示,其中,(x_1, y_1)和(x_2, y_2) 是每个检测到的线段的结束点。

○rho:生成极坐标的像素扫描步长。

○theta:生成极坐标的角度步长,一般是π/180。

○threshold:要”检测” 一条直线所需最少的的曲线交点 。

○minLineLength :默认值0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。

○maxLineGap :默认值0,允许将同一行点与点之间连接起来的最大的距离。

●c++中

●Android中

关于vs2017c++中使用opencv的问题

安装vs2015 安装opencv2.4.11 对项目右键,选择属性 配置属性 – VC++目录 编辑逗包含目录地,添加: opencv安装路径\build\include opencv安装路径\build\include \opencv opencv安装路径\build\include \opencv2 编辑逗库目录地,添加: opencv安...

关于霍夫直线检测代码和霍夫变换直线检测流程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/23458.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载