Hough Transform 霍夫变换检测直线

直线检测之Hough变换(霍夫变换) 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直线或者圆等几何图形的。 给定一张图像中的n个点,假设我们希望找到这些点中一个位于直线上的点集,一种可行的解决方法是,先找到所有由每对点确定的直线,然后寻找靠近特定直线的点的所有子集。这种方法涉及寻找n(n-1)/2~n^2 条直线,然后对每个点。与所有直线执行(n)(n(n-1))/2~n^3次比较。这种方法因为计算量太大基本上没有应用价值。 霍夫[Hough 1962]提出一种替代方法,通常称为霍夫变换。考虑xy平面上的一个点(xi 阅读详情

从理论到代码,再从代码到理论

(1)理论之通俗理解:

1.在图像中检测直线的问题,其实质是找到构成直线的所有的像素点。那么问题就是从找到直线,变成找到符合y=mx+c的所有(x,y)的点的问题。

2.进行坐标系变化y=mx+c,变成c=-xm+b。直线上的点(x1,y1),在转换坐标系后为一条直线。这个原理应该是高中的。

 

3.直线上每一个点在MC坐标系中都表现为直线,而且,这些直线都相交于一个点,(m,c)。找到所有点的问题,转变为寻找直线的问题。

4.对于图像中的每一个点,在MC坐标系中对应着很多的直线。找到直线的交点,就对应着找到图像中的直线。

实际在使用这一原理的时候,不是采用直线的斜率和截距公式,而是用

如何实现:

1.       将θ角在-90度到90度的范围里,划分为很多区间,对所有的像素点(x,y)在所有θ角的时候,求出ρ.从而累加ρ值出现的次数。高于某个阈值的ρ就是一个直线。

2.       这个过程就类似于如下一个二维的表格,横坐标就是θ角,ρ就是到直线的最短距离。

横坐标θ不断变换,对于所有的不为0的像素点,计算出ρ,找到ρ在坐标(θ,ρ)的位置累加1.

3.       上图中局部最大的就是找到的直线的θ和ρ的值。

(2) 具体代码片段

 

复制代码
     for( ang =  0, n =  0; n < numangle; ang += theta, n++ )
    {
        tabSin[n] = ( float)(sin(ang) * irho);
        tabCos[n] = ( float)(cos(ang) * irho);
    }

     //  stage 1. fill accumulator
     for( i =  0; i < height; i++ )
         for( j =  0; j < width; j++ )
        {
             if( image[i * step + j] !=  0 )
                 for( n =  0; n < numangle; n++ )
                {
                    r = cvRound( j * tabCos[n] + i * tabSin[n] );
                    r += (numrho -  1) /  2;
                    accum[(n+ 1) * (numrho+ 2) + r+ 1]++;
                }
        }

     //  stage 2. find local maximums
     for( r =  0; r < numrho; r++ )
         for( n =  0; n < numangle; n++ )
        {
             int  base = (n+ 1) * (numrho+ 2) + r+ 1;
             if( accum[ base] > threshold &&
                accum[ base] > accum[ base -  1] && accum[ base] >= accum[ base +  1] &&
                accum[ base] > accum[ base - numrho -  2] && accum[ base] >= accum[ base + numrho +  2] )
                sort_buf[total++] =  base;
        }

     //  stage 3. sort the detected lines by accumulator value
    icvHoughSortDescent32s( sort_buf, total, accum );

     //  stage 4. store the first min(total,linesMax) lines to the output buffer
    linesMax = MIN(linesMax, total);
    scale =  1./(numrho+ 2);
     for( i =  0; i < linesMax; i++ )
    {
        CvLinePolar line;
         int idx = sort_buf[i];
         int n = cvFloor(idx*scale) -  1;
         int r = idx - (n+ 1)*(numrho+ 2) -  1;
        line.rho = (r - (numrho -  1)* 0.5f) * rho;
        line.angle = n * theta;
        cvSeqPush( lines, &line );
    }
复制代码

 参考:http://www.aishack.in/2010/03/the-hough-transform/

java hough变换(霍夫变换)检测直线 hough变化 阅读详情

相关推荐

霍夫变换(Hough Line Transform)-直线检测

OpenCV官网 参考1 原理 直角坐标表示 用y=mx+by=mx+by=mx+b 描述一条直线, m是斜率, b是截距,m和b是参数。 如果将上面 的式子改写:b=−mx+yb=-mx+yb=−mx+y ,x和y 是参数。 根据以上两个式子得出结论:给定一个点(x,y),对应到 2 上就是一条直线,x 相当于斜率,y相当于截距。如果给定一系列的点(x1,y1)、(x2,y2)、(x3,...

zzyczzyc的博客 4433

opencv中标准Hough变换检测出的直线参数

在图像处理中用到了opencv的函数检测图像中的直线,当时对于获取的直线参数有一点点误解。     首先,简单的介绍下Opencv中的hough变换:     Opencv支持两种不同形式的hough变换:标准hough变换和累积概率hough变换。opencv中用同一个函数 cvHoughLines2( ...)来访问这两个算法。对于详细的部分这里不是介绍的重点,我这里只是想说下我在

u013500944的专栏 2519

霍夫变换(Hough Transform)直线检测

在图像处理中,如果图像由已知形状和大小的物体组成,需要找出物体的形状的问题。在解决这些问题的许多可能方法中,一种是在图像中移动一个合适形状和大小的掩模,寻找图像与掩模的相关性,因由于形状变形,旋转、缩放等原因,特殊的掩模常常与在特处于是的数据中特体的表示相差太大。一种非常有效的解决问题的方法是Hough变换,本节中介绍Hough变换检测原理和相关知识。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。我们要注意到Hough变换的重要性质是对图像中直线的殘缺部分、

松子茶的专栏 3万+

Hough Transform直线检测

霍夫变换(Hough Transform)是Paul Hough于1962年提出来的,一开始是用于检测图像中的直线的,后来还扩展到检测圆、检测任意形状的物体等。关于霍夫变换的博客多得不胜枚举,而且很多都是很厉害,解释的非常详细而且通俗。现在我就写一下我自己的理解,个人笔记,不一定准确。 一、原理理解部分 首先,我们关于平面中的一条直线有如下表达 在笛卡尔坐标中表示为 这...

上善若水,为而不争 475

Hough Transform 霍夫變換檢測直線

http://www.cnblogs.com/smartvessel/archive/2011/10/20/2218654.html 從理論到代碼,再從代碼到理論 (1)理論之通俗理解: 1.在圖像中檢測直線的問題,其實質是找到構成直線的所有的像素點。那麼問題就是從找到直線,變成找到符合y=mx+c的所有(x,y)的點的問題。 2.進行坐標系變化y=mx+c,變成c=-xm+b。直線上

I am Rocky 9148

HOUGH 变换JAVA语言实现

HOUGH 变换JAVA语言实现 提取的效果不错

图像的直线检测——霍夫变换(Hough transform)

定义: 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它将图像空间中的特征点映射到参数空间进行投票,通过检测累计结果的局部极值点得到一个符合某特定形状的点的集合。经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。它的抗噪声、抗形变能力较强。另一种直线提取的方法是对图像边缘点进行链码追踪,在得到的链码串中提取直线。 霍夫变换将在一个

ChuanjieZhu 3万+

OpenCV霍夫变换(Hough Transform)直线检测详解

霍夫变换(Hough Transform)的主要思想: 一条直线在平面直角坐标系(x-y)中可以用y=ax+b式表示,对于直线上一个确定的点(x0,y0),总符合y0-ax0=b,而它可以表示为参数平面坐标系(a-b)中的一条直线。因此,图像中的一个点对应参数平面的一条直线,同样,图像中的一条直线对应参数平面上的一个点。 基本Hough变换检测直线: 由于同一条直线上的不同点在参数平面中是会经过同一个点的多条线。对图像的所有点作霍夫变换,检测直线就意味着找到对应参数平面中的直线相交最多的点。对这些交点做票数累计,然后取出票数大于最小投票数的点,即为原坐标系里检测出的直线。 一般,直线的参数

Matlab 霍夫变换 ( Hough Transform) 直线检测

PS:好久没更新,因为期末到了,拼命复习中。复习久了觉得枯燥,玩玩儿霍夫变换直线检测 霍夫变换的基本原理不难,即便是初中生也很容易理解(至少在直线检测上是这样子的)。 霍夫变换直线检测的基本原理:(不配图了,自己在白纸上画画,理解更深刻) 一步一步来: 1、在白纸上画出一个直角坐标系,任意给出一个点; 2、那么,对于点(x0,y0),经过这个点的直线必定满足y...

diezhengnian3148的博客 1293

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

GNSS/INS松组合导航实战:如何用卡尔曼滤波提升定位精度(附MATLAB代码)

本文深入探讨了GNSS/INS松组合导航的工程实践,详细阐述了如何利用卡尔曼滤波算法融合卫星与惯性数据以提升定位精度。内容涵盖从仿真环境搭建、误差状态卡尔曼滤波器(ESKF)设计,到状态与观测方程实现、噪声参数调试及常见问题排查的全过程,并提供了可直接运行的MATLAB代码,为开发高精度、鲁棒的组合导航系统提供实战指南。

weixin_29057163的博客 162

OpenCV的霍夫变换(Hough Transform)直线检测

霍夫变换(Hough Transform)的主要思想:一条直线在平面直角坐标系(x-y)中可以用y=ax+b式表示,对于直线上一个确定的点(x0,y0),总符合y0-ax0=b,而它可以表示为参数平面坐标系(a-b)中的一条直线。因此,图像中的一个点对应参数平面的一条直线,同样,图像中的一条直线对应参数平面上的一个点。 笔记包括两个测试,基本Hough变换和概率Hough变换的直线检测。

不眠旅行 7823

matplotlib三维画图之观察博弈论混合策略下纳什均衡点

参考链接: 博弈论入门20讲之第16讲-猜谜游戏-散户如何赢庄家 游戏背景: 我的期望是: 你的期望是: 使用Python的matplotlib画图: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) X = np.linspace(0, 1, 100) Y = np.linspace(0, 1,

敲代码的小风 1258

hough变换直线检测_Hough Transform 霍夫变换之直线检测

在图像处理中,经常需要找出一个平面上散点集中可能存在的直线,即直线检测。比较容易想到的办法是选取任意两个散点并计算其所在直线方程的k、b系数对;遍历全部散点两两计算,则出现频率较高的直线方程k、b系数对,即是图像中存在的直线。但是该方法过于暴力,当散点集规模较大时,效率十分低下。而通过 Hough Transform 霍夫变换则可以大大提高对散点集中存在的直线的检测效率Hough Transfor...

weixin_39827304的博客 358

我在腾讯上构建了一个人人能用的机载适航知识库

当ChatGPT掀起生成式AI的浪潮时,工程师们发现了一个尴尬的现实:询问“如何编写软件合格审定计划”,AI的回答可能充满似是而非的术语,却无法精确关联FDO-178C的对应内容。现在市面上有许多的AI大模型+适航知识库的方案,之前我的文章介绍了一种本地大模型加知识库的解决方法。此外,ima知识库的容量大小可以到30GB(企鹅大气),只要管理好文件的格式,理论上是完全可以把机载适航相关的内容容纳进去的。后续会不断增加适航法规,适航规章,适航标准,适航书籍,适航相关的论文,以及网上其他一些优秀的内容。

qq_41854911的博客 1223

TensorRT量化校准数据集选择

在TensorRT中进行INT8量化时,校准数据集的选择至关重要,直接影响量化后模型的精度和推理性能。这是一个典型的问题。

浩瀚之水的专栏 497

c语言 霍夫变换检测直线,OpenCV霍夫变换(Hough Transform)直线检测详解

霍夫变换(Hough Transform)的主要思想:一条直线在平面直角坐标系(x-y)中可以用y=ax+b式表示,对于直线上一个确定的点(x0,y0),总符合y0-ax0=b,而它可以表示为参数平面坐标系(a-b)中的一条直线。因此,图像中的一个点对应参数平面的一条直线,同样,图像中的一条直线对应参数平面上的一个点。基本Hough变换检测直线:由于同一条直线上的不同点在参数平面中是会经过同一个点...

weixin_35436993的博客 804

司法AI系统的架构设计:法律知识图谱如何辅助智能庭审?架构师亲测

简单来说,法律知识图谱是一种采用图数据结构(节点Node + 边Edge/关系Relation)来组织和表达法律领域知识的语义网络。它以。

AI 算法实战派 1088

matlab寻找直线_Matlab 霍夫变换 ( Hough Transform) 直线检测

PS:好久没更新,因为期末到了,拼命复习中。复习久了觉得枯燥,玩玩儿霍夫变换直线检测霍夫变换的基本原理不难,即便是初中生也很容易理解(至少在直线检测上是这样子的)。霍夫变换直线检测的基本原理:(不配图了,自己在白纸上画画,理解更深刻)一步一步来:1、在白纸上画出一个直角坐标系,任意给出一个点;2、那么,对于点(x0,y0),经过这个点的直线必定满足y0=k*x0+b, 其中k是直线的斜率,b是直线...

weixin_26802933的博客 4536

一篇文章带你快速入门 MATLAB

文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一

南淮北安的博客 5126

全景相机APP

以下是一款**全景相机APP**的完整源码,支持全景照片拍摄(多帧拼接)、全景预览、鱼眼矫正、图片保存/分享、360°全景查看等核心功能,基于Android原生Camera2 API(替代过时的Camera API) + OpenCV(图像拼接) + GLSurfaceView(全景预览)实现,适配Android 8.0+设备,可直接编译运行。runOnUiThread(() -> tvFrameCount.setText("已拍摄:" + frameCount + "帧"));// X轴旋转(上下)

寒寒豆豆软件公司的博客 180

python霍夫变换检测直线_Python OpenCV 霍夫(Hough Transform)直线变换检测应用

Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。本篇博客是这个系列的第 34 篇。基础知识铺垫上篇博客 咱们一起学习了霍夫直线检测的原理,本篇就从应用层对其进行学习啦。学习了原理之后,在查看函数原型,发现确实简单了许多。霍夫直线变换函数原型在 OpenCV 中提供了两个霍夫直线检测的函数,一个是标准霍夫变换,另一个是概率霍夫变换。先学习一下标准霍夫变换吧,该变化方式也叫...

weixin_30456719的博客 2637

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 车牌识别
下一篇: 拷贝构造函数
淡淡的生活
博客等级 码龄16年 341粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值