复杂交通场景下的交通标志识别算法的研究与实现

1、背景

本次课题题目为“交通标志的识别”,要求使用C++作为开发语言,可使用Open CV库,能够实现在复杂交通环境中,能对指定的交通标志给予识别。
交通标志识别实际上包括交通标志的检测和识别两个过程,检测是在图像中寻找到感兴趣目标并定位,识别是对感兴趣目标进行分类。

2、开发环境介绍

 操作系统:macOS Big Sur 11.2.3
 集成开发环境:CLion 2020.3.2
 Open CV版本:4.5.2
 CMake版本:3.17.5

3、算法设计思路

为了实现能够在复杂场景下对禁止掉头交通标志的识别,需要对图片进行预处理。

首先调用imread()方法读入图像,然后对图像进行处理,将图像转为H S V模型。交通标志的一个典型特征就是其由一个红色的圆环作为轮廓,因此本算法的处理办法就是,将图片红色部分转为白色,其余部分转为黑色处理。

然后为了保证图像的真实度,控制图像的噪声,这里使用了Open CV库中的medianBlur方法进行中值滤波处理。利用中值滤波将数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。

接下来就是对图像的腐蚀处理,图像的膨胀(dilation)和腐蚀(erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。其中膨胀类似与 ‘领域扩张’ ,将图像的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大。腐蚀类似 ‘领域被蚕食’ ,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。

接下来就是找出交通标志,并进行比对。前面说过,交通标志的典型特征就是其轮廓为一个红色的圆圈,经过前面的处理,图像真实度得到了提高和噪度明显降低,接下来,就是找出所有的检测对象,这里使用对白色圆圈进行填充cv :: floodFill(Temp, Point(0, 0), Scalar(255))。然后就是框出检测对象,一个图像可能存在多个检测点,这里使用Open CV 中提供的findContours找出检测对象,并使用drawContours方法用蓝色方框将检测对象标出。
在这里插入图片描述
经过上面的处理,我们已经找到了我们的检测对象,最后需要进行的是图像的识别。

ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。其中,Fast 和 Brief 分别是特征检测算法和向量创建算法。ORB 首先会从图像中查找特殊区域,称为关键点。关键点即图像中突出的小区域,比如角点,比如它们具有像素值急剧的从浅色变为深色的特征。然后 ORB 会为每个关键点计算相应的特征向量。ORB 算法创建的特征向量只包含 1 和 0,称为二元特征向量。1 和 0 的顺序会根据特定关键点和其周围的像素区域而变化。该向量表示关键点周围的强度模式,因此多个特征向量可以用来识别更大的区域,甚至图像中的特定对象。

4、系统演示

在这里插入图片描述

5、源代码:

欢迎Star感谢大家。
https://github.com/MicahKong/TrafficSignRecognition

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值