前几天看新闻得知微软为美国执法机关研发了一套基于AI识别,追踪并提取编辑视频中出现的人脸的算法,只要输入一段带人脸信息的视频文件,运行后即可输出一段所有人脸已被提取并且按要求编辑好的视频文件。当然该算法目前仍然存在局限,在人脸被部分遮挡、快速移动等情况下,无法正确识别,同时,执法机关也并非想要一个视频文件中相关不相关的所有人的人脸被获取出来,算法真正应用于实际也许还需经过一番优化。

类似上述新闻中从视频或图像中提取人脸或其它信息的学科称为计算机图形学(Computer Graphics),该门学科涵盖面很广,对于游戏爱好者来说,所看到的游戏画面精美流畅与否,与计算机的实时渲染有很大关系。另外3D游戏中模型为了呈现得更逼真的模拟现实的光照效果,AR/VR中的实时建模/渲染,都与CG悉悉相关。

于是本着学无止境的思想,尝试对计算机图形学入个门。该项目使用的是OpenCV2.4.9的库,至于为什么用这么老的库是因为我大学时下好了这个库在电脑里,并且这个项目比较初级用3+版本和2+版本没有差别。

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac
OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++
类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and
MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。

【百度百科如是说】

当然,一开始不能直接识别人脸等比较复杂多变的图形,本文是通过实现交通标志识别来做一个简单的讲解,至于更进一步的图象识别大家有兴趣可以继续学习。本次项目实现的交通标志识别主要是给予一张待识别图片,运行代码,系统提取到图中的交通标志内容并使用霍夫圆变换将其位置圈出。

识别交通标志位置的方法步骤如下:

1. 提取特征颜色 — 对图片去噪 — 提取边缘信息

2. Canny边缘检测 — Hough变换找出圆形区域

交通标志牌通常规定为红、蓝、黄三种颜色,其含义为:

1. 红色:表示禁止、停止
2. 蓝色:表示指令、必须遵守的规定
3. 黄色:表示警告、注意

一、提取特征颜色

根据这三种交通标志牌的颜色,初步确定待识别图片所要提取图片信息的颜色范围,代码中使用的是RGB颜色模型。RGB颜色模型是位于空间中的一个立体模型,如下图所示为RGB的色度坐标示意图

在特征颜色提取中,确定颜色的阈值是其中最重要的一点(HSV颜色模型可以避免光 照不同的影响,此处不讨论),经过查询资料,得到红、蓝、黄对应的阈值如下:

其中ThR=0.4;ThG=0.3,ThB=0.4,ThY=0.85

在这种情况下, G分量的值比R分量和B分量大50则判定绿色,:B分量的值比G分量和R分量大50则判定蓝色, R分量的值比G分量和B分量大50则判定为红色,找到满足条件的区域后在原图中标出,不满足条件的部分标为黑色。

首先读取图片文件代码如下:

提取颜色区域代码:

上述三个被调用的函数,作用是根据我们查得的阀值进行判断并返回值,如果在阀值范围内,则返回255:

在这种由阀值提取颜色区域的情况下,绿色极有可能混入被提取的颜色中,在背景绿叶过多的情况下,检测会比较困难。

二、图片去噪

经过上一步的提取后,留下的区域则为感兴趣的区域,由于阈值范围的问题,留下的区域并不一定都是我们所需要的区域。在现实情况中,经常会有一部分我们不需要,极容易使实验结果出错的图片部分混入颜色提取范围。这种不应该,也最好不要出现在被提取区域上的像素点,称为噪点

前人在去噪方面也有着杰出的作为,方框滤波、中值滤波以及高斯滤波,都能或多或少地起到去噪作用。为了接下来的边缘检测,我们一般采用能得到较好图像边缘的高斯滤波来对图片进行去噪,对图片信号进行平滑处理。

对于图像处理来说,常用二维零均值离散高斯函数作平滑滤波器。

二维高斯函数为:

使用去噪函数的代码如下:

该函数是OpenCV库中自带的滤波函数,可以直接调用

三、提取边缘信息

Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法。Canny边缘检测算法以Canny的名字命名,被很多人推崇为当今最优的边缘检测的算法。

Canny边缘检测的步骤一般分为下列4步:
  • 消除噪声(一般情况下,使用高斯平滑滤波器卷积降噪)
  • 计算梯度幅值和方向(略复杂不做详述)
  • 非极大值抑制(这一步排除非边缘像素,仅仅保留了一些细线条,做为候选边缘)
  • 滞后阈值(滞后阈值需要两个阈值(高阈值和低阈值)):

    如果某一像素位置的幅值超过高阈值, 该像素被保留为边缘像素。如果某一像素位置的幅值小于低阈值, 该像素被排除。如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
    

对于Canny函数的使用,推荐的高低阈值比在2:1到3:1之间

四、Hough圆变换

霍夫圆变换的基本原理和上面讲的霍夫线变化大体上是很类似的,只是点对应的二维极径极角空间被三维的圆心点x, y还有半径r空间取代。

对直线来说, 一条直线能由参数极径极角表示. 而对圆来说, 我们需要三个参数来表示一个圆, 也就是:

在open_cv中一般通过霍夫梯度法来解决圆变换问题,原理如下:

  • 首先对图像应用边缘检测,用canny边缘检测。
  • 然后,对边缘图像中的每一个非零点,考虑其局部梯度,即用Sobel()函数计算x和y方向的Sobel一阶导数得到梯度
  • 利用得到的梯度,由斜率指定的直线上的每一个点都在累加器中被累加,这里的斜率是从一个指定的最小值到指定的最大值的距离
  • 标记边缘图像中每一个非0像素的位置
  • 从二维累加器中这些点中选择候选的中心,这些中心都大于给定阈值并且大于其所有近邻。这些候选的中心按照累加值降序排列,以便于最支持像素的中心首先出现
  • 对每一个中心,考虑所有的非0像素
  • 这些像素按照其与中心的距离排序,从到最大半径的最小距离算起,选择非0像素最支持的一条半径
  • 如果一个中心收到边缘图像非0像素最充分的支持,并且到前期被选择的中心有足够的距离,那么它就会被保留下来

这个实现可以使算法执行起来更高效,或许更加重要的是,能够帮助解决三维累加器中会产生许多噪声并且使得结果不稳定的稀疏分布问题,但该算法同样不完美。

在程序中使用的函数为HoughCircles(),使用此函数可以很容易地检测出圆的圆心,但是它可能找不到合适的圆半径

通过以上这几步,基本能在一张图片中找到交通标志牌的位置了,下面是示例效果:

A.原图

B.提取颜色区域后

[如图所示,代码中所要实现的提取红蓝黄区域已经实现,而不足之处在于,无关的区域也被提取了进来,例如蓝色的天空,红色的交通柱,以及少部分绿叶和车辆轮廓,但对于识别交通标志颜色而言是没有影响的]

C.边缘检测

[该图是对提取颜色区域后的图进行了边缘检测,清晰地把交通标志牌和其它的一些图片轮廓给勾勒出来。这近一步地方便了下一步进行圆变换的操作]

D.霍夫圆变换

[在对边缘检测后的图进行了高斯滤波去噪之后,对图片进行了HoughCircles()的操作,可以看出,交通标志的位置被很准确地勾勒出来]

基于OpenCV的交通标志识别相关推荐

  1. matlab交通标志神经网络识别,基于神经网络的交通标志识别方法

    Municipal & Traffic Construction SCIENCE & TECHNOLOGY FOR DEVELOPMENT 149 基于神经网络的交通标志识别方法 赵丹 ...

  2. Python基于YOLOv5的交通标志识别系统[源码]

    1.图片演示: 2.视频演示: [项目分享]Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]_哔哩哔哩_bilibili 3.标注好的数据集: ...

  3. Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]

    1.图片演示: 2.视频演示: 3.标注好的数据集: 4.YOLO网络的构建: 网络结构是首先用Focus将计算图长宽变为原先1/4, channel 数量乘4.再用bottlenectCSP 提取特 ...

  4. 毕业设计-基于机器视觉的交通标志识别系统

    目录 前言 课题背景和意义 实现技术思路 一.交通标志识别系统 二.交通标志识别整体方案 三.实验分析 四.总结 实现效果图样例 最后 前言

  5. 基于YOLOV3实现交通标志识别(Pytorch实现)

    训练样本准备 中国交通标志检测数据集(CCTSDB),百度网盘:https://pan.baidu.com/s/1-se8J8fQ0FgmUalu8873CQ, 提取码:9fov 图片制作 1.按图片 ...

  6. 【YOLOv5实战2】基于YOLOv5的交通标志识别系统-自定义数据集

    实战博客指引: 实战环境搭建 自定义数据集 模型训练 模型测试与评估 YOLOv5整合PyQt5 项目源代码可联系博主获取. 一.数据准备 1.1 从官网下载YOLOv5 打开官网YOLOv5,使用g ...

  7. 【YOLOv5实战3】基于YOLOv5的交通标志识别系统-模型训练

    实战博客指引: 实战环境搭建 自定义数据集 模型训练 模型测试与评估 YOLOv5整合PyQt5 项目源代码可联系博主获取. 一.参数说明 再经历前两个步骤后,开始进行模型训练与测试.首先进行模型训练 ...

  8. 基于Keare的交通标志识别

    前两天体验了一下腾讯云的在线实验,内容如题,在这里记录一下一些必要知识( 水 实验步骤 这个实验分为训练过程和测试过程两部分. 训练过程流程及实现: 解析脚本输入参数:使用argparse解析,由ar ...

  9. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

最新文章

  1. cat、tac、more、less、head、tail、cut
  2. CVE-2021-29454——Smarty模板注入
  3. 国内HuggingFace,预训练模型镜像使用
  4. 2017苏州太湖国际马拉松 半程成绩单
  5. 用户反馈KB3189866累积更新出现卡在95%进度情况
  6. python drop_duplicates_Pandas drop_duplicates方法不起作用
  7. hql mysql查询语句,HQL查询语言的使用介绍
  8. 不装了,摊牌了,月薪10571元的我是新生代农民工中的一员
  9. java 递增 实现_Java编程实现递增排序链表的合并
  10. RSA总裁:2010年需重点关注云计算安全
  11. python创建数据集_python 生成环形人工数据集
  12. cmake-3.17 cmake-3.18.2下载
  13. 获取全国所有省份,市区县的中文名和英文名
  14. MongoDB概念集合
  15. 《Android开发偶遇有趣算法问题》---获得地图方圆r米内的一个随机坐标点(求单位圆内随机点)
  16. 第二讲 中国古代密码艺术
  17. STM32MP157驱动开发——Linux 音频驱动
  18. Python学习关键tip记录
  19. Java基础93 - 八, 十六进制转二进制
  20. 《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(六)

热门文章

  1. 广东茂名农林科技职业学院计算机网络技术,广东茂名农林科技职业学院有哪些专业 附好的重点专业名单...
  2. 在WIN7中找回你熟悉的记事本字体Fixedsys
  3. 黑白影片智能上色,复原历史重现经典
  4. 浪潮虚拟化服务器参数,浪潮英特尔首发四核服务器虚拟化应用标准
  5. 数据科学指南#基础篇 Matplotlib 入门
  6. 【ADV5】adv绑定不想创建那么多骨骼怎么设置
  7. SQL SERVER的表一直查询卡住
  8. 双极型晶体管(BJT)学习总结
  9. 3D MAX制作游戏高端人物模型
  10. 调查显示,年轻人才仍最看重“未来高收入”,“找到安全的就业”重要性急剧上升|美通社头条...