matlab floor函数_MATLAB图像处理:08:在交通视频中检测汽车
本示例说明如何使用“图像处理工具箱”来可视化和分析视频或图像序列。本示例使用VideoReader
(MATLAB),implay
和其他图像处理工具箱功能来检测交通视频中的浅色汽车。请注意,VideoReader
具有面向特定于平台的功能,在某些平台上可能无法读取提供的Motion JPEG2000视频。
步骤1:使用VideoReader读取视频
VideoReader
函数构造一个多媒体读取对象,该对象可以从多媒体文件读取视频数据。请参阅VideoReader
以了解您的平台所支持的格式。
使用VideoReader
访问视频并获得其基本信息。
trafficVid = VideoReader('traffic.mj2')trafficVid = VideoReader with properties:General Properties:Name: 'traffic.mj2'Path: '/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/images/imdata'Duration: 8CurrentTime: 0NumFrames: 120Video Properties:Width: 160Height: 120FrameRate: 15BitsPerPixel: 24VideoFormat: 'RGB24'
get方法提供有关视频的更多信息,例如以秒为单位的持续时间。
get(trafficVid)obj = VideoReader with properties:General Properties:Name: 'traffic.mj2'Path: '/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/images/imdata'Duration: 8CurrentTime: 0NumFrames: 120Video Properties:Width: 160Height: 120FrameRate: 15BitsPerPixel: 24VideoFormat: 'RGB24'
步骤2:使用IMPLAY浏览视频
在implay
中浏览视频。
implay('traffic.mj2');
步骤3:算法开发
在处理视频数据时,可以从视频中选择一个具有代表性的帧并在该帧上开发算法。然后,该算法可以应用于视频中所有帧的处理。
对于此汽车标记应用程序,需要检查包含浅色和深色汽车的帧。当图像(例如在交通视频帧中)具有许多结构时,在尝试检测感兴趣的对象之前尽可能地简化图像会很有用。对汽车标记应用程序执行此操作的一种方法是,抑制图像中不是浅色汽车的所有对象(深色汽车,车道,草地等)。通常,需要采用多种技术组合才能删除这些无关的对象。
从视频帧中删除深色汽车的一种方法是使用该imextendedmax
函数。此函数返回一个二进制图像,该图像标识强度值高于指定阈值(称为区域最大值)的区域。图像中像素值低于此阈值的所有其他对象将成为背景(灰度图像中,像素强度值越低,表达的颜色越深)。要消除深色汽车,请确定图像中这些对象的平均像素值。(rgb2gray
用于将原始视频从RGB转换为灰度。)您可以使用像素区域工具implay
查看像素值。调用imextendedmax
时,将平均像素值(或稍高的值)指定为阈值。对于此示例,将该值设置为50。
darkCarValue = 50;darkCar = rgb2gray(read(trafficVid,71));noDarkCar = imextendedmax(darkCar, darkCarValue);imshow(darkCar)figure, imshow(noDarkCar)
在经过处理的图像中,请注意在移除大多数深色汽车对象的同时,也残留了许多其他无关的对象,尤其是车道标记。区域最大值处理将不会删除车道标记,因为它们的像素值高于阈值。要删除这些对象,可以使用形态函数imopen
。此函数使用形态学处理从二进制图像中删除小对象,同时保留大对象。使用形态学处理时,必须确定操作中使用的结构元素的大小和形状。由于车道标记是细长的物体,因此请使用半径等于车道标记宽度的圆盘形结构元素。您可以在implay
中使用像素区域工具估算这些物体的宽度。对于此示例,将该值设置为2。
sedisk = strel('disk',2);noSmallStructures = imopen(noDarkCar, sedisk);imshow(noSmallStructures)
要完成算法,请使用regionprops
在noSmallStructures
(应该仅是浅色的汽车)中来查找其中的对象的质心。使用此信息将标签放置在原始视频中的浅色汽车上。
步骤4:将算法应用于视频
汽车标记应用程序每循环一次,处理一帧视频。(由于典型的视频包含大量帧,因此一次读取和处理所有帧会占用大量内存。)
可以一次处理一小段视频(如本例中的视频),并且有许多函数可以提供此功能。
为了更快地处理,请预先分配用于存储处理后的视频的内存。
nframes = trafficVid.NumberOfFrames;I = read(trafficVid, 1);taggedCars = zeros([size(I,1) size(I,2) 3 nframes], class(I));for k = 1 : nframessingleFrame = read(trafficVid, k);% Convert to grayscale to do morphological processing.I = rgb2gray(singleFrame);% Remove dark cars.noDarkCars = imextendedmax(I, darkCarValue);% Remove lane markings and other non-disk shaped structures.noSmallStructures = imopen(noDarkCars, sedisk);% Remove small structures.noSmallStructures = bwareaopen(noSmallStructures, 150);% Get the area and centroid of each remaining object in the frame. The% object with the largest area is the light-colored car. Create a copy% of the original frame and tag the car by changing the centroid pixel% value to red.taggedCars(:,:,:,k) = singleFrame;stats = regionprops(noSmallStructures, {'Centroid','Area'});if ~isempty([stats.Area])areaArray = [stats.Area];[junk,idx] = max(areaArray);c = stats(idx).Centroid;c = floor(fliplr(c));width = 2;row = c(1)-width:c(1)+width;col = c(2)-width:c(2)+width;taggedCars(row,col,1,k) = 255;taggedCars(row,col,2,k) = 0;taggedCars(row,col,3,k) = 0;endend
步骤5:结果可视化
获取原始视频的帧率,然后将其用于在implay
中查看taggedCars
。
frameRate = trafficVid.FrameRate;implay(taggedCars,frameRate);
注:本文根据MATLAB官网内容修改而成。
欢迎您进一步了解以下MATLAB系列文章:
吃小羊:MATLAB作图实例:00:索引zhuanlan.zhihu.com
吃小羊:MATLAB金融工具箱:00:索引zhuanlan.zhihu.com
matlab floor函数_MATLAB图像处理:08:在交通视频中检测汽车相关推荐
- matlab 判断元素索引_MATLAB图像处理:08:在交通视频中检测汽车
本示例说明如何使用"图像处理工具箱"来可视化和分析视频或图像序列.本示例使用VideoReader(MATLAB),implay和其他图像处理工具箱功能来检测交通视频中的浅色汽车. ...
- matlab meshc函数_MATLAB函数库大全(收藏版)
转发朋友圈获30赞,截图发送至公众号对话框,即可获该文章的PDF版本方便阅读. 目录 1 常用命令 表1.1 管理用命令 表1.2管理变量与工作空间用命令 表1.3文件与操作系统处理命令 表1.4窗口 ...
- matlab norm函数_MATLAB | TAM 211 存活指南 V3.0
点击蓝字 关注我 本文大部分内容为2019年初次接触 TAM 211时所写,后续存在少量修改与增补.叙述时间可能有点错乱,凑合着看吧. 新的学期,我们迎来了 TAM 211 , 静力学的课程.虽说这是 ...
- matlab hist函数_MATLAB在绘图时的用法—数据分布图(一)
(1) 条形图 用单位长度表示一定的数量,各数据变量按照数量的多少化成长短不同的条形,便于比较分析.二维条形图按图形方向可以分为垂直条形图和水平条形图,而每种图形又都存在两种模式:累计式和分组式.其中 ...
- matlab里toimage函数_MATLAB图像处理函数大全
Import, Export, and Conversion Read and Write Image Data from Files imread Read image from graphics ...
- matlab std函数_MATLAB金融工具箱:11:根据基准优化投资组合
本示例说明如何使用金融工具箱中的Portfolio对象执行投资组合优化. 尤其是,该示例说明了如何优化投资组合以相对于市场基准最大化信息比率.具体而言,将table中包含的财务数据读入MATLAB并进 ...
- matlab roundn函数_matlab中round函数具体用法
展开全部 round函数 函数功能:四舍五入取整62616964757a686964616fe59b9ee7ad9431333365643661. 使用方法:B = round(A) 对数组A中每个元 ...
- matlab fix函数_Matlab课后答案第四章
" m文件是matlab程序的容器." 01 - 学会使用函数m文件,程序m文件: 区别:函数m文件调用需要传入参数 函数m文件可以在命令行调用,也可以在程序m文件中调用 02 - ...
- matlab patch函数_MATLAB实现紧束缚近似能带结构画图
这几天原本做电路实验的时候看到FFT的分析,然后查了一下看到了有用matlab来模拟多少个波的叠加可以得到比较好看的三角波.方波之类的,一时心血来潮,就想着要不我也来试试用matlab画出能带图,于是 ...
最新文章
- 2017-2018-2 20179209《网络攻防》第六周作业
- 面试题目集锦 -- 排序算法
- codeforces 486A-C语言解题报告
- 安徽关节式焊接机器人_上下料机器人的重要性体现在哪里?它有哪些优势?
- Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)
- php多图片上传到数组,input type=file多图片上传 原生html传递的数组集合
- c# 如何调用非托管函数 (转)
- STL应用--SORT自定义排序
- php旧物交易开源代码_代码收藏系列--php--生成简短唯一订单号
- Cross-lingual Transfer of Correlations between Parts of Speech and Gaze Features 阅读笔记
- Win7系统怎么开启远程桌面?Win7远程桌面怎么用(转)
- Pseudo-terminal will not be allocated because stdin is not a terminal
- General Trainning Strategy in Caffe
- Java常见的加密解密
- 万元怎样保留小数点_如何让数字以万元为单位显示并保留2位小数,且有千位分隔符...
- Arduino WIFI智能小车 无线视频遥控小车 课程设计
- H5图片切换,js图片轮播,js图片自动切换
- [git报错] fatal: reference is not a tree: xxx 以及 Unable to checkout ‘xxx‘ in submodule path xxx
- java拼图游戏系统总体方案_基于JAVA的拼图游戏的设计与实现(含录像)
- nii与nii.gz格式的关系