【交通标志识别】SIFT交通标志识别【含Matlab源码 717期】

这篇文章详细介绍了使用MATLAB进行交通标志识别的过程,包括SIFT特征提取、图像预处理(如二值化、边缘检测)、交通标志位置确定、模板匹配算法,以及如何通过色彩特征和形态学操作进行交通标志的分类和切割。
摘要由CSDN通过智能技术生成

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、SIFT交通标志识别

1 交通标志识别介绍
1.1 选题背景
随着交通技术的日益完善和交通工具的多样化发展,交通安全成为当前最热门的问 题,道路交通关系着人们的生命以及财产安全。

交通标志的识别是保证交通安全的一个重要环节。交通标识包含丰富的道路交通信 息,为驾驶员提供警示、指示等辅助信息,对减轻驾驶员的驾驶压力、降低道路的交通 压力、减少交通事故的发生起着重要的辅助作用。

如果完全依靠驾驶员注意和发现交通标识并做出正确的反应,难免会增加驾驶员的 负担,加速疲劳,严重地可能导致交通事故。道路交通标识识别是通过用安置于车辆前 方的摄像头(这里常借助车道保持辅助系统中的摄像头),检测道路标识(限速、禁止超 车),通对交通标志的采集、处理、识别,将所获取的信息以最快的速度第一时间传送给 驾驶员或直接对汽车采取相应的操作.从而降低了交通安全隐患并节省了人力资源。

1.2 识别的交通标志要求
(1)图片中交通标志位置不固定,可以居中、倾斜
(2)交通标志类型以及颜色不唯一,做到多类型多颜色的交通标志识别
(3)识别出交通标志的图形,并显示出对应的标志含义

2 设计思想
2.1 主要步骤
①寻找交通标志所在位置
②二值化处理
③边缘检测提取边缘
④腐蚀、膨胀
⑤切割交通标志
⑥模板匹配
在这里插入图片描述

2.2 各模块算法设计
2.2.1 寻找交通标志所在位置

本文的交通标志识别算法主要是针对大陆交通标志来识别。 在汽车行驶过程中,利用安装于汽车上的数字摄像机对远处的交通标志进行动态拍 摄,将拍摄到的连续图片传送给计算机,计算器通过逐行扫描法完成对预处理图像采集。 在提取交通标志位置的时候,我们可以利用交通标志的颜色特征来确定其位置,即特征 色彩提取法。主要的实现是用 MATLAB 工具箱中的颜色阈值器 Color Thresholder 确定标志位置。

在 GB5768.2—2009《道路交通标志和标线:第 2 部分道路交通标志》中,对交通 标志的分类、特征颜色、轮廓、尺寸大小、内部包含的字符、数字、几何图样和数量等 作了明确的规定.每种交通标志具有鲜明的颜色特征和明确的含义.每种交通标志具有 明显的背景和内景颜色特征.禁令标志、指示标志、警告标志的背景特征颜色分别为红色、蓝色、黑色,禁令标志、指示标志、警告标志的内景特征颜色 分别为白色、白色、 黄色.因此,标准交通标志的背景和内景特征颜色作为提取和识别交通标志的依据。

设计核心思想是对图像首先进行分块处理,提取色彩特征点,计算出每一块颜色所占比例;人为设置一个颜色阈值,使得交通标志有效区域可以保留;经过对图像的颜色 筛选,可以计算出图像中颜色区域的大致位置。

2.2.2 对图像进行二值化处理
得到交通标志图像后,进行二值化处理,得到二值图像。二值图像又称黑白图像, 图像的每个像素只能是黑或者是白,也就是说,其每个图像的像素值只有两个状态.即: 0 和 1,二值图像的表示是用 0 和 1 组成的二维矩阵来表示的。

2.2.3 对图像进行边缘检测
数字图像处理中的边缘检测是图像处理过程中关键的一步,边缘是目标与背景的分 割线,只有进行边缘检测提取边缘,才能将目标物与背景分开,因此是图像分割、图像 识别分析领域的基石。

边缘检测的方法有很多种,如:Roberts 算子、Prewitt 算子、Canny 算子、Sobel 算 子、Log 算子等。Roberts 算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏 感。Prewitt 算子和 Sobel 算子分别是平均滤波、加权平均滤波,且检测的图像边缘可能 大于 2 个像素,两者对灰度渐变低噪声的图像又较好的检测效果,但对于混合多复杂噪声图像处理效果并不理想。

本识别系统将采取 Canny 算子进行边缘检测,Canny 算子是边缘检测中最具有代表 的一种局部极值边缘检测,具有滤波、增强效果,无论从视觉效果还是客观评价来看, 提取的边缘线性连接程度较好,对线类的边缘提取的比较完整,边缘线很细腻。

2.2.4 腐蚀、膨胀
膨胀与腐蚀处理是形态学操作的一部分,膨胀就是求局部最大值的操作,即用一个 结构元素 B,对原始图像 A 的每一个像素进行扫描,再用结构元素 B 与其覆盖的图像 A 做“或”操作, 其中结构元素 B 可以是方形结构也可以是圆盘结构。经过膨胀处理后 的图像会“变胖”,因为 其在运行的过程中,用结构元素 B 中心点与图像 A 中的像素一 个一个的对比,一旦结构元素 B 中有一点属于 A 中,则结构元素 B 被 A 所吸收, 所以 原始图像会变胖膨胀一圈,其膨胀的大小由结构元素的大小所决定。

而与膨胀具有相反意义的腐蚀就是求局部最小值的操作。同样是用结构元素 B 对原 始图像 A 中的每个像素进行扫描,但此时结构元素 B 与原始图像 A 做的是“与”运算, 即结构元素 B 中心点与原始图像 A 一个一个的对比,只有当结构元素 B 中的所有点都 包含在 A 中时,结构元素 B 才会被保留,所以原始图像经过腐蚀运算后,图像会“变瘦” 部分边界像素会被删除。

本文运用的识别系统是先进行腐蚀后进行膨胀的运算,也叫开运算。开运算能够消除一些孤立的小点、毛刺等细小的点,而总的位置和形状不发生改变。所以,开运算也 能够达到滤波降噪,改善图像视觉质量的效果。

放入几篇通俗易懂的blog:数字图像处理—通俗理解腐蚀与膨胀;形态学操作:膨胀与腐蚀;图像的膨胀indilate和腐蚀imerode

2.2.5 切割交通标志
对图像分割我们首先找到它的轮廓图,根据交通标志 5 类图形轮廓进行有效部分的切割,由于交通标志的形状有 5 种,分别是正三角形、圆形、倒三角形、八边形和矩形。 通过对轮廓图的研究分析提取出符合这五种形状的有效区域,为下面图像的有效区域的 裁剪识别提供基础。

在获取了边缘图和轮廓图后,根据边缘图和轮廓图上的圆形、正三角形、倒三角形、 八边形和矩形进行有效部分的切割,提取出图片上的交通标志。

2.2.6 模板匹配
模板匹配作为图像分析和处理的一项重要手段,在计算机视觉和模式识别的众多领 域获得广泛的应用。模板匹配的基本思想是利用模板叠放在待搜索图 上平移,模板覆盖下的那块待搜索图成为子图,记为 ,其中i、j为子图的左上角像点在S中的坐标,通过比较模板与搜索子图的匹配度,进行目标的搜索。

3 核心算法
3.1 特征色彩提取法

在 MATLAB 中,彩色图像大多数是基于 RGB 三色彩模型。交通标志的特征颜色有 三种。我们需要提前选定交通标志的颜色,利用颜色作为特征点,提取出整个图像中该 颜色最大区域。以红色为例,对于一个 RGB 图像,我们可以分三通道 R、G、B 分别提 取颜色,在该算法下,我们采取分别提取三通道色彩信息,然后红色信息加倍,与蓝色、 绿色区域相减,这样可以得到一副只含有红色的图像。然后在利用区域生长法,找出最 大红色区域,即为交通标志所在区域。

主要的实现是使用 MATLAB 工具箱中的颜色阈值器 Color Thresholder 中的 RGB 颜 色空间,在点云上绘制 ROI 选择图像颜色并且分割图像,从而确定标志位置。

3.2 交通标志分类处理
为了将交通标志切割分类,我们可以采取以下算法:首先,对车牌图像进行二值化; 其次对图像进行边缘检测,采取 Canny 算子进行边缘检测,分为四个步骤:噪声处理、 计算梯度图像、对图像进行非极大值抑制处理和双阈值检测及边缘连接;随后对图像不 断进行腐蚀、膨胀操作,使得交通标志中噪声、杂质点消除,同时使图像更加突出。

3.3 模板匹配识别法
为判断识别交通标志,采样基础的模板匹配法。它是通过将所有像素值看成一个坐 标(无论它是多少维的),通过最小化这两个坐标的欧式距离来确定最终在原始图像上 匹配的位置。所谓欧式距离算法,既是对两幅图像中的每一块进行相减再平方,得出其 欧式距离作为相似性的判断依据,从而利用计算两幅图像的欧式距离得出相似性,取最优解,最终识别出交通标志的含义。

⛄二、部分源代码

close all;
clear;
clc;
[filename pathname]=uigetfile(‘*.jpg’,‘Open File’);
Image=imread([pathname filename]);
image(Image);
[imshowage,flag,Im1,Im2,Im3,Im1_1,Im2_1,Im3_1]=extraction(Image);

if imshowage1
if(flag
1)
figure,imshow(Im1_1);
end
if(flag2)
figure, imshow(Im1_1);
figure, imshow(Im2_1);
end
if(flag
3)
figure,imshow(Im1_1);
figure,imshow(Im2_1);
figure,imshow(Im3_1);
end
% [image, descriptors, locs] = sift(imageFile)
%
% This function reads an image and returns its SIFT keypoints.
% Input parameters:
% imageFile: the file name for the image.
%
% Returned:
% image: the image array in double format
% descriptors: a K-by-128 matrix, where each row gives an invariant
% descriptor for one of the K keypoints. The descriptor is a vector
% of 128 values normalized to unit length.
% locs: K-by-4 matrix, in which each row has the 4 values for a
% keypoint location (row, column, scale, orientation). The
% orientation is in the range [-PI, PI] radians.
%
% Credits: Thanks for initial version of this program to D. Alvaro and
% J.J. Guerrero, Universidad de Zaragoza (modified by D. Lowe)

function [image, descriptors, locs] = sift(image)

% Load image
% image = imread(imageFile);

% If you have the Image Processing Toolbox, you can uncomment the following
% lines to allow input of color images, which will be converted to grayscale.
if size(image,3)>1
image = rgb2gray(image);
end

[rows, cols] = size(image);

% Convert into PGM imagefile, readable by “keypoints” executable
f = fopen(‘tmp.pgm’, ‘w’);
if f == -1
error(‘Could not create file tmp.pgm.’);
end
fprintf(f, ‘P5\n%d\n%d\n255\n’, cols, rows);
fwrite(f, image’, ‘uint8’);
fclose(f);

% Call keypoints executable
if isunix
command = '!./sift ';
else
command = '!siftWin32 ‘;
end
command = [command ’ <tmp.pgm >tmp.key’];
eval(command);

% Open tmp.key and check its header
g = fopen(‘tmp.key’, ‘r’);
if g == -1
error(‘Could not open file tmp.key.’);
end
[header, count] = fscanf(g, ‘%d %d’, [1 2]);
if count ~= 2
error(‘Invalid keypoint file beginning.’);
end
num = header(1);
len = header(2);
if len ~= 128
error(‘Keypoint descriptor length invalid (should be 128).’);
end

% Creates the two output matrices (use known size for efficiency)
locs = double(zeros(num, 4));
descriptors = double(zeros(num, 128));

% Parse tmp.key
for i = 1:num
[vector, count] = fscanf(g, ‘%f %f %f %f’, [1 4]); %row col scale ori
if count ~= 4
error(‘Invalid keypoint file format’);
end
locs(i, 😃 = vector(1, 😃;

[descrip, count] = fscanf(g, '%d', [1 len]);
if (count ~= 128)
    error('Invalid keypoint file value.');
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值