IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Hough变换原理-直线检测 -> 正文阅读

[人工智能]Hough变换原理-直线检测

目录

?

一、简介

二、原理

三、Python代码实现


?

一、简介

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

二、原理

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

????????在图像坐标空间中,经过点(gif.latex?x_%7Bi%7D,gif.latex?y_%7Bi%7D)的直线表示为:

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

????????其中,参数a为斜率,b为截矩。通过点(gif.latex?x_%7Bi%7D,gif.latex?y_%7Bi%7D)点(gif.latex?x_%7Bi%7D,gif.latex?y_%7Bi%7D)的直线有无数条,且对应于不同的a和b。

????????如果将gif.latex?x_%7Bi%7Dgif.latex?y_%7Bi%7D视为常数,而将原本的参数a和b看作变量,则式子(1)可以表示为:

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

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

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

????????这条直线与点(gif.latex?x_%7Bi%7D,gif.latex?y_%7Bi%7D)在参数空间的直线相交于一点(a0,b0)(a0,b0),如图所示:

b577ea645d6d46a096fd88d0943e3c3e.png?

????????也就是说,假如图像坐标空间中有一些点共线,其中每个点对应到参数空间中就是一条直线,而且参数空间中的这些直线相交于一点。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')

测试图片与结果:

6d759921b649402c86b3e335bd13d222.jpeg

56d86e47ad164d3898d5f32fe4661bab.png?

?

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:18:31  更:2022-05-26 15:18:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:53:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码