Hough变换原理-直线检测

这篇具有很好参考价值的文章主要介绍了Hough变换原理-直线检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 文章来源地址https://www.toymoban.com/news/detail-443218.html

一、简介

二、原理

三、Python代码实现


 

一、简介

        Hough(霍夫)变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换是将图像坐标空间变换到参数空间,利用点与线的对偶性,将原始图像空间的给定的曲线(今天主要介绍直线)通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。

二、原理

        Hough变换的基本原理在于利用点与线的对偶性,即在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点。原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。

        在图像坐标空间中,经过点(,)的直线表示为:

gif.latex?y_%7Bi%7D%3Dax_%7Bi%7D+b                        (1)

        其中,参数a为斜率,b为截矩。通过点(,)点(,)的直线有无数条,且对应于不同的a和b。

        如果将和视为常数,而将原本的参数a和b看作变量,则式子(1)可以表示为:

gif.latex?b%3D-x_%7Bi%7Da+y_%7Bi%7D                         (2)

        这样就变换到了参数空间。这个变换就是坐标空间中对于(,)点的Hough变换。该直线是图像坐标空间中的点(,)在参数空间的唯一方程。考虑到图像坐标空间中的另一点(,),它在参数空间中也有相应的一条直线,表示为:

 gif.latex?b%3D-x_%7Bj%7Da+y_%7Bj%7D                        (3)

        这条直线与点(,)在参数空间的直线相交于一点(a0,b0)(a0,b0),如图所示:

Hough变换原理-直线检测 

        也就是说,假如图像坐标空间中有一些点共线,其中每个点对应到参数空间中就是一条直线,而且参数空间中的这些直线相交于一点。Hough变换要做的就是统计参数空间中有多少这样的交点,并且每个交点是由多少直线相交形成的,而每个交点的斜率和截距就能确定出直线,从而计算出图像中的直线。

        

三、Python代码实现

        OpenCV中有现成的方法cv2.HoughLinesP,参数说明建注释,其中的参数需要实际情况自己调整了。Python代码如下:

import cv2

def HoughLinesP_demo(img_path):
    img = cv2.imread(img_path)
    org = img.copy()
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 阈值计算
    ret, img = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)
    # cv2.imshow('img1', img)
    # 模糊 去掉细节
    # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    # img1 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
    # 边缘检测
    img = cv2.Canny(img, 7, 255, apertureSize=3)
    # cv2.imshow('img2', img)
    '''
    Hough变换,该函数实现了概率霍夫变换算法的线段检测,在二值图像中找到线段。  
    HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines
        @param image 参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。
        @param lines 表示储存着检测到的直线的参数对 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器,也就是线段两个端点的坐标。
        @param rho 表示参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素。
        @param theta 表示参数极角 theta 以弧度为单位的分辨率,这里使用 1度。
        @param threshold 表示检测一条直线所需最少的曲线交点。
    .   @param minLineLength 表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。
    .   @param maxLineGap 表示能被认为在一条直线上的亮点的最大距离。
    '''
    lines = cv2.HoughLinesP(img, 1, np.pi / 180, threshold=10, minLineLength=20, maxLineGap=7)
    if lines is None:
        cv2.waitKey(0)
        return
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(org, (x1, np.min((y1, y2))), (x2, np.max((y1, y2))), (255, 0, 0), 2)
    cv2.imshow('org', org)
    cv2.waitKey(0)

if __name__ == '__main__':
    HoughLinesP_demo(r'test.png')

测试图片与结果:

Hough变换原理-直线检测

Hough变换原理-直线检测 

 

 

到了这里,关于Hough变换原理-直线检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【车道线检测】边缘检测+Hough变换车道线视频自动检测(判断是否偏离)【含Matlab源码 4083期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年04月08日
    浏览(32)
  • 霍夫变换直线检测算法实现OpenCV(C++)

    一、原理 对于霍夫变换的原理这里就不进行描述啦,感兴趣的可以自行搜索。也可以看知乎上面的这篇贴文通俗易懂理解——霍夫变换原理。 二、算法代码 三、效果测试 测试代码 上述代码中的drawLine()函数是《OpenCV4快速入门》一书的代码清单 7-2中的原函数,只用于画线。

    2024年02月05日
    浏览(34)
  • 【OpenCv • c++】几何检测 —— 霍夫变换 | 霍夫直线检测 | 霍夫线变化

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月06日
    浏览(29)
  • 【OpenCV-Python】——边缘和轮廓&Laplacian/Sobel/Canny边缘检测&查找/绘制轮廓及轮廓特征&霍夫直线/圆变换

    目录 前言: 1、边缘检测 1.1 Laplacian边缘检测  1.2 Sobel边缘检测  1.3 Canny边缘检测 2、图像轮廓 2.1 查找轮廓  2.2 绘制轮廓 2.3 轮廓特征 3、霍夫变换 3.1 霍夫直线变换  3.2 霍夫圆变换 总结: 图像的边缘是指图像中灰度值急剧变化的位置,边缘检测的目的是为了绘制边缘线条。

    2024年01月23日
    浏览(39)
  • Hough 算法(霍夫变换)

    目录 一.什么是Hough 算法(霍夫变换) 它的基本思想是: Hough 变换的主要步骤为: 二、Hough 变换的应用 它的主要应用如下: 1. 直线检测: 2. 圆检测: 3. 椭圆检测: 4. 三角形检测: 5. 人脸检测: Hough 变换(Hough Transform)是一种常用的检测图形的算法。 它通过搜索特定形状(如直线,圆,椭

    2024年02月08日
    浏览(30)
  • Hough变换(仅供学习使用)

    Hough变换是一种用于在图像中检测直线、圆等形状的技术。Hough变换的基本思想是将图像空间中的点映射到参数空间中,形成一个参数空间图像,然后在参数空间中寻找明显的峰值,这些峰值对应于图像空间中的直线或圆。 在Hough变换中,直线的参数表示为两个变量:斜率和截

    2024年02月10日
    浏览(28)
  • OpenCV官方教程中文版 —— Hough 圆环变换

    目标 • 学习使用霍夫变换在图像中找圆形(环) • 学习函数:cv2.HoughCircles() opencv_logo.png :

    2024年02月06日
    浏览(31)
  • MATLAB使用hough变换函数输出[H,theta,rho]的具体含义

    输出[H,theta,rho]。 其中Theta 取值-90至89,为1×180的数组。 rho取值根据图片f的大小确定,如图片为400×400像素,则rho取值-(400^2+400^2)^0.5至(400^2+400^2)^0.5,即图片的对角线长度,为1×1131的数组。 Theta,rho仅为hough变换的坐标取值。hough变换的结果储存于输出的H矩阵中。 H矩阵为rho×

    2024年02月06日
    浏览(30)
  • 【MATLAB图像处理实用案例详解(11)】——基于Hough变换的人眼虹膜定位方法

    Hough 变换作为一种参数空间变换算法,直线和其他参数化形状检测的重要工具。Hough 变换具有较强的稳定性和鲁棒性,可以在一定程度上避免噪声的影响,后续研究将极坐标引入Hough 变换,使这种方法可以更加有效地用于直线检测和其他任意几何形状的检测。Ballard 提出了非

    2023年04月16日
    浏览(31)
  • 图像处理之hough圆形检测

    点击图像处理之Hough变换检测直线查看 下面直接描述检测圆形的方法 对于一个半径为 r r r ,圆心为 ( a , b ) (a,b) ( a , b ) 的圆,我们将其表示为: ( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2=r^2 ( x − a ) 2 + ( y − b ) 2 = r 2 此时 x = [ x , y ] T , a = [ a , b , r ] T x=[x,y]^T,a=[a,

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包