本示例说明如何使用“图像处理工具箱”来可视化和分析视频或图像序列。本示例使用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: 120​Video 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: 120​Video 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)

要完成算法,请使用regionpropsnoSmallStructures(应该仅是浅色的汽车)中来查找其中的对象的质心。使用此信息将标签放置在原始视频中的浅色汽车上。

步骤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:在交通视频中检测汽车相关推荐

  1. matlab 判断元素索引_MATLAB图像处理:08:在交通视频中检测汽车

    本示例说明如何使用"图像处理工具箱"来可视化和分析视频或图像序列.本示例使用VideoReader(MATLAB),implay和其他图像处理工具箱功能来检测交通视频中的浅色汽车. ...

  2. matlab meshc函数_MATLAB函数库大全(收藏版)

    转发朋友圈获30赞,截图发送至公众号对话框,即可获该文章的PDF版本方便阅读. 目录 1 常用命令 表1.1 管理用命令 表1.2管理变量与工作空间用命令 表1.3文件与操作系统处理命令 表1.4窗口 ...

  3. matlab norm函数_MATLAB | TAM 211 存活指南 V3.0

    点击蓝字 关注我 本文大部分内容为2019年初次接触 TAM 211时所写,后续存在少量修改与增补.叙述时间可能有点错乱,凑合着看吧. 新的学期,我们迎来了 TAM 211 , 静力学的课程.虽说这是 ...

  4. matlab hist函数_MATLAB在绘图时的用法—数据分布图(一)

    (1) 条形图 用单位长度表示一定的数量,各数据变量按照数量的多少化成长短不同的条形,便于比较分析.二维条形图按图形方向可以分为垂直条形图和水平条形图,而每种图形又都存在两种模式:累计式和分组式.其中 ...

  5. matlab里toimage函数_MATLAB图像处理函数大全

    Import, Export, and Conversion Read and Write Image Data from Files imread Read image from graphics  ...

  6. matlab std函数_MATLAB金融工具箱:11:根据基准优化投资组合

    本示例说明如何使用金融工具箱中的Portfolio对象执行投资组合优化. 尤其是,该示例说明了如何优化投资组合以相对于市场基准最大化信息比率.具体而言,将table中包含的财务数据读入MATLAB并进 ...

  7. matlab roundn函数_matlab中round函数具体用法

    展开全部 round函数 函数功能:四舍五入取整62616964757a686964616fe59b9ee7ad9431333365643661. 使用方法:B = round(A) 对数组A中每个元 ...

  8. matlab fix函数_Matlab课后答案第四章

    " m文件是matlab程序的容器." 01 - 学会使用函数m文件,程序m文件: 区别:函数m文件调用需要传入参数 函数m文件可以在命令行调用,也可以在程序m文件中调用 02 - ...

  9. matlab patch函数_MATLAB实现紧束缚近似能带结构画图

    这几天原本做电路实验的时候看到FFT的分析,然后查了一下看到了有用matlab来模拟多少个波的叠加可以得到比较好看的三角波.方波之类的,一时心血来潮,就想着要不我也来试试用matlab画出能带图,于是 ...

最新文章

  1. 2017-2018-2 20179209《网络攻防》第六周作业
  2. 面试题目集锦 -- 排序算法
  3. codeforces 486A-C语言解题报告
  4. 安徽关节式焊接机器人_上下料机器人的重要性体现在哪里?它有哪些优势?
  5. Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)
  6. php多图片上传到数组,input type=file多图片上传 原生html传递的数组集合
  7. c# 如何调用非托管函数 (转)
  8. STL应用--SORT自定义排序
  9. php旧物交易开源代码_代码收藏系列--php--生成简短唯一订单号
  10. Cross-lingual Transfer of Correlations between Parts of Speech and Gaze Features 阅读笔记
  11. Win7系统怎么开启远程桌面?Win7远程桌面怎么用(转)
  12. Pseudo-terminal will not be allocated because stdin is not a terminal
  13. General Trainning Strategy in Caffe
  14. Java常见的加密解密
  15. 万元怎样保留小数点_如何让数字以万元为单位显示并保留2位小数,且有千位分隔符...
  16. Arduino WIFI智能小车 无线视频遥控小车 课程设计
  17. H5图片切换,js图片轮播,js图片自动切换
  18. [git报错] fatal: reference is not a tree: xxx 以及 Unable to checkout ‘xxx‘ in submodule path xxx
  19. java拼图游戏系统总体方案_基于JAVA的拼图游戏的设计与实现(含录像)
  20. nii与nii.gz格式的关系

热门文章

  1. 产业洞察 | 中台,从北大战略研究所的一座小楼启程
  2. 网络访问之——HTTP
  3. [转]“子不语怪力乱神”新解
  4. 计算机启动快到桌面时屏幕黑,电脑开机后桌面黑屏怎么回事
  5. Java程序员面试技巧:这样面试通过率增加90%
  6. SSM + Activiti5 简单OA系统
  7. W77E58在GPS远程定位的应用(源代码) .
  8. windows 10 文件夹无法移动和重命名,提示找不到指定文件
  9. 【渝粤题库】陕西师范大学165103 劳动经济学 作业
  10. python自学做题记录之找数字