【计算机视觉】【图像处理综合应用】路沿检测

这篇具有很好参考价值的文章主要介绍了【计算机视觉】【图像处理综合应用】路沿检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验内容:针对给定的视频,利用图像处理基本方法实现道路路沿的检测;

提示:可利用Hough变换进行线检测,融合路沿的结构信息实现路沿边界定位(图中红色的点位置)。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

处理视频文件

处理视频文件的主要流程如下:

读取视频逐帧提取路沿检测逐帧保存输出视频

用python的OpenCV实现视频文件的处理,用videoCapture打开视频文件,读取每一帧进行处理,然后用videoWriter保存成视频。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

路沿检测

路沿检测的流程如下:

图像预处理边缘检测Hough变换

图像预处理

灰度化

从视频中取出的每一帧是彩色图像,我们可以先将它变成灰度图像,即将图像中的每个像素的RGB值(红、绿、蓝)转换为一个单一的灰度值。

image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

灰度图像只包含亮度信息,如图1所示,而不包含颜色信息。这样可以简化图像,提高处理速度,突出图像的结构,减少噪声干扰。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图1

均衡化

我们再将图像均衡化,python代码如下。

image = cv2.equalizeHist(image)

图像均衡化可以提高图像的对比度,如图2所示,突出图像的细节轮廓与边缘。

 【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图2

二值化

将灰度图转换为只有黑白两种颜色的图像,python代码如下。

image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

图像二值化可以简化图像信息,突出物体的轮廓,如图3所示。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图3

边缘检测

Canny边缘检测

Canny 边缘检测算法是John F.Canny于1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的最优算法, 最优边缘检测的三个主要评价标准是:

低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。

高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。

最小响应: 图像中的边缘只能标识一次。

Canny边缘检测算法步骤如下:

高斯滤波去噪计算梯度幅值和方向非极大值抑制双阈值处理

高斯滤波器去除噪声

使用高斯滤波器对图像进行平滑处理,以减少噪声的影响。

计算梯度幅值和方向

按照Sobel算子,运用一对卷积阵列 (分别作用于 x 和 y 方向):

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

使用下列公式计算梯度幅值和方向:

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

梯度方向近似到四个可能角度之一(一般 0, 45, 90, 135)。

非极大值抑制

沿边缘垂直方向寻找梯度最大值,排除非边缘像素, 仅仅保留了一些细线条(候选边缘)。

双阈值处理

如果某一像素位置的幅值超过高阈值, 该像素被保留为边缘像素。

如果某一像素位置的幅值小于低阈值, 该像素被排除。

如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。

在python中使用canny对图像进行边缘检测,高阈值为175,低阈值为75。

image = cv2.Canny(image, 75, 175)

效果如图4所示,可见canny算法可以有效的提取图像的边缘信息。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图4

但是canny检测出来的边缘中噪声比较多,我们再使用高斯滤波器模糊一下图像,在python中使用5×5的高斯滤波器模糊图像。

image = cv2.GaussianBlur(image, (5, 5), 0)

效果如图5所示,可见高斯滤波器模糊成功地去掉了一些噪声。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图5

Hough变换

Hough变换是一种用于检测图像中几何形状的技术,将图像由图像空间变换为参数空间。它最初是由保罗·霍夫(Paul Hough)在1962年提出的,用于在图像中检测直线。后来,这个方法被扩展到检测其他几何形状,如圆和椭圆。

一条直线在图像二维空间可由两个变量表示,在笛卡尔坐标系中直线可由参数斜率k和截距b表示y=kx+b,在极坐标系中可由参数极径r和极角θ表示。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

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

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图像空间中的一条线对应Hough空间中的一个点。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图像空间中的一个点对应Hough空间中的一条线。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

Hough变换的基本思想是将图像中的像素点映射到参数空间中,并通过在参数空间中寻找峰值来检测几何形状。对于直线检测,参数空间通常是极坐标空间,其中每个像素点在参数空间中对应一条直线。通过遍历图像中的像素点,可以累加参数空间中相应的位置,从而构建一个累加器数组。然后,在累加器数组中找到峰值,这些峰值对应于图像中存在的直线。

Hough变换步骤:

离散化θ,θ=-45,0,45,90度。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

按照点的坐标(x,y)和每个角度θ求极半径r:

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

统计(r,θ)出现的次数

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

最大次数3出现在(2,0°)和(3,90°),则对应的图像空间的线为x=2和y=3。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

Hough变换的优点是它对于噪声和图像变形具有一定的鲁棒性。它可以检测到不完整的、部分可见的或被噪声干扰的几何形状。因此,Hough变换在计算机视觉领域中广泛应用于图像分析、目标检测和特征提取等任务。

标准霍夫线变换

提供一组参数对 (θ, rθ) 的集合来表示检测到的直线,在OpenCV 中通过函数 HoughLines来实现。

lines = cv2.HoughLines(edge, 1, np.pi / 180, 220)

统计概率霍夫线变换

这是执行起来效率更高的霍夫线变换. 它输出检测到的直线的端点 (x0, y0, x1, y1)。在OpenCV 中它通过函数 HoughLinesP来实现。

lines = cv2.HoughLinesP(edge, 1, np.pi / 180, 100, minLineLength=50, maxLineGap=1)

Hough线变换应用路沿检测

本次我们采用标准Hough线变换来检测路沿,经过多次测试和调参,我们最后采用高斯模糊进行图像预处理,然后使用canny进行边缘提取,最后使用Hough线变换绘制直线。

def detect(image):

    gauss = cv2.GaussianBlur(image, (5, 5), 0)

    edge = cv2.Canny(gauss, 75, 175)

    # 进行Hough直线变换

    lines = cv2.HoughLines(edge, 1, np.pi / 180, 220)

视频检测效果

第一个视频是一个静止不动的路沿,检测效果如图6所示。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图6

第二个视频中,路沿开始变化起来,检测效果如图7所示。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

第三个视频中出现了转弯,检测效果如图8所示,因为我们只做了线变化,因此对于路沿弯曲的部分只能画出直线部分。

【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能【计算机视觉】【图像处理综合应用】路沿检测,计算机视觉,计算机视觉,图像处理,人工智能

图8

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

import cv2
import numpy as np


def detect(image):
    gauss = cv2.GaussianBlur(image, (5, 5), 0)
    edge = cv2.Canny(gauss, 75, 175)
    # 进行Hough直线变换
    lines = cv2.HoughLines(edge, 1, np.pi / 180, 220)
    # 绘制检测到的直线
    if lines is not None:
        for rho, theta in lines[:, 0, :]:
            if theta < 2:
                continue
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0 - 350 * (-b))
            y1 = int(y0 - 350 * a)
            x2 = int(x0 - 700 * (-b))
            y2 = int(y0 - 700 * a)
            cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 4)
    return image


video = cv2.VideoCapture('Task2/03.avi')  # 打开视频文件
# 获取视频的宽度和高度以及帧率信息
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = video.get(cv2.CAP_PROP_FPS)
# 创建VideoWriter对象,用于保存处理后的视频
videoWriter = cv2.VideoWriter('Task2/video3.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))
while True:
    have, frame = video.read()  # 读取当前帧
    if have:
        frame = detect(frame)  # 在这里对每一帧进行处理
        videoWriter.write(frame)  # 将处理后的帧写入输出视频文件
    else:
        break
video.release()  # 释放资源
videoWriter.release()

到了这里,关于【计算机视觉】【图像处理综合应用】路沿检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 目标检测 图像处理 计算机视觉 工业视觉

    从事ai视觉算法有几年了,本帖是对以往做过的计算机视觉项目的一些总结,硬件部署的大多是基于nvidia的开发板和GPU服务器上,如jetson nano,还有地平线J3J5和瑞芯微以及星辰的开发板,另外就是对实时性要求不高的部署在cpu上。有相关项目需求可以一起交流和学习。(+v 3

    2024年02月06日
    浏览(30)
  • 图像处理与计算机视觉算法

    图像处理与计算机视觉算法是实现对图像和视频内容分析、理解和操作的一系列技术。这些算法可以分为多个类别,包括但不限于以下几个主要方面: 预处理 : 像素操作:灰度化、二值化、直方图均衡化等,用于改善图像的对比度和亮度分布。 去噪:高斯滤波、中值滤波、

    2024年02月22日
    浏览(36)
  • 计算机视觉(2)——图像预处理

    二、图像预处理 2.1 介绍  2.2 特征提取方法 2.2.1 直方图 2.2.2 CLAHE 2.2.3 形态学运算 2.2.4 空间域处理及其变换 2.2.5 空间域分析及变换  (1) 均值滤波 (2)中值滤波 (3)高斯滤波 (4) 梯度Prewitt滤波 (5) 梯度Sobel滤波 (6) 梯度Laplacian滤波 (7) 其他滤波  2.2.6 频域分

    2024年02月03日
    浏览(47)
  • 图像处理/计算机视觉期刊投稿经验

    我不配,以后有机会再说吧。 我也不配,以后有机会再说吧。 2022年投过,一个月之后被编辑immediate reject, 原因是“the scope not aligning well with the theme interest and/or desired genres of TSP”。在邮件的末尾,编辑表示manuscript的选题“well motivated”并且“interesting”,主要担忧是所用到的

    2024年02月08日
    浏览(40)
  • 计算机视觉图像处理常用方法汇总

    光线进入眼睛:当光线从一个物体反射或散射出来,进入人的眼睛时,它们通过角膜和晶状体进入眼球内部。 聚焦光线:角膜和晶状体将光线聚焦在视网膜上。晶状体可以通过调整其形状来调节聚焦距离,使物体的图像清晰地映射在视网膜上。 光敏细胞感受光线:视网膜是

    2024年02月07日
    浏览(32)
  • 机器视觉、图像处理和计算机视觉:概念和区别

    机器视觉、图像处理和计算机视觉:概念和区别nbsp; 机器视觉、图像处理和计算机视觉是相关但有区别的概念。 机器视觉主要应用于工业领域,涉及图像感知、图像处理、控制理论和软硬件的结合,旨在实现高效的运动控制或实时操作。 图像处理是指利用计算机对图像进行

    2024年02月06日
    浏览(28)
  • 图像处理与计算机视觉--第五章-图像分割-Canny算子

    2.1.Canny算子简单介绍 Canny算子是一种非常常用的边缘检测算子,其效果图如下所示: 2.2.Canny算子边缘检测指标 Canny算子是基于边缘检测来实现的,那么边缘检测的指标如下所示: (1)好的信噪比,即将非边缘点判定为边缘点的概率要低。 (2)高定位,检测出的边缘要在实际边缘中

    2024年02月07日
    浏览(37)
  • 利用C++进行图像处理与计算机视觉

    在C++中进行图像处理与计算机视觉是一个有趣且具有挑战性的任务。C++是一种高效的编程语言,能够提供足够的灵活性和性能,以处理复杂的图像处理和计算机视觉算法。在本文中,我们将介绍如何使用C++进行图像处理和计算机视觉,以及一些常见的技术和库。 图像处理基础

    2024年01月16日
    浏览(33)
  • 【OpenCV】计算机视觉图像处理基础知识

    目录 前言 推荐 1、OpenCV礼帽操作和黑帽操作 2、Sobel算子理论基础及实际操作 3、Scharr算子简介及相关操作 4、Sobel算子和Scharr算子的比较 5、laplacian算子简介及相关操作 6、Canny边缘检测的原理 6.1 去噪 6.2 梯度运算 6.3 非极大值抑制 6.4 滞后阈值 7、Canny边缘检测的函数及使用

    2024年02月05日
    浏览(42)
  • 图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

      在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,

    2024年02月07日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包