定量视频分析:测量液体的容器灌装
今天的文章是由客人博客艾萨克·布鲁斯。艾萨克已经自2019年以来MathWorks课程开发人员。他从马塞诸斯州大学阿默斯特博士在计算物理学。艾萨克已经帮助启动和支持几个课程Coursera,话题如金宝app机器人、机器学习和计算机视觉。艾萨克的文章是基于一个教训
图像处理工程和科学Coursera专业化
。
介绍
在这篇文章中,我将分析一个视频容器灌装的液体。现在,这听起来或许不像是世界上最令人兴奋的事情,但是想象一下,例如,你是一个质量控制工程师负责确保灌装瓶的速率是一致的。你需要确定这个速度是常数或随时间变化。要回答这个问题,你需要处理每一个帧的视频文件。但是你从哪里开始呢?
![movie-player.gif](http://www.tatmou.com/blogs/steve/files/VideoAnalysisBlogPost_01.gif)
创建一个分段函数
的目标测量容器内的液体,我需要一个分段函数,可以从背景中分离液体。为了确保我开发一个健壮的算法,我出口几代表帧来创建和测试一个分段函数。
![export-frames.gif](http://www.tatmou.com/blogs/steve/files/VideoAnalysisBlogPost_02.gif)
的
颜色阈值的应用
是一个交互式分割图像基于颜色的有力工具。这个程序是特别有用的图像有明显的颜色差异感兴趣的对象和背景。在本例中,我使用了区域选择工具来突出感兴趣的像素在L * a * b *颜色空间。这让我隔离暗紫色背景和白色的液体泡沫顶部。
![color-thresholder.gif](http://www.tatmou.com/blogs/steve/files/VideoAnalysisBlogPost_03.gif)
一旦我满意我的阈值结果,我出口这个分段函数的应用”。m”文件名为“liquidMask”。
检查分段函数
v = VideoReader (“liquidVideo.mp4”)
而hasFrame (v)%遍历所有帧
img = readFrame (v);%读一个框架
bw = liquidMask (img);%应用自定义细分功能
蒙太奇({img, bw},“BorderSize”(20、20),“写成BackgroundColor”,0.5,0.5,0.5);
drawnow
结束
![mask-generation.gif](http://www.tatmou.com/blogs/steve/files/VideoAnalysisBlogPost_04.gif)
结果分割视频帧看起来太棒了!进一步的形态学操作更好的部分感兴趣的地区是可行的,但要获得一个简单的例子,他们不需要运行。
分析液体的比例
现在我可以继续最后一部分:计算容器盛满水的比例在每一帧。
开始,我需要倒带视频一开始使用CurrentTime VideoReader的财产。
v。CurrentTime = 0;
接下来,我为每一帧初始化两个变量来存储值:容器的百分比,和时间戳。
nFrames = v.NumFrames;
9 = 0 (nFrames, 1);
* = 0 (nFrames, 1);
现在我准备使用一个for循环通过视频,读段每个图像,计算容器的比例在每一帧。百分比的计算是通过计算像素的数量充满液体和除以总数量的像素。
为我= 1:nFrames%遍历所有帧
img = readFrame (v);%读一个框架
bw = liquidMask (img);%使用自定义函数创建二进制掩模
liquidPart = nnz (bw);%计算液体(true)像素的数量
perc = liquidPart /元素个数(bw);%计算百分比充满液体
时间= v.CurrentTime;%马克当前时间
9 (i) =全氯乙烯;%保存填写百分比值
(我)=时间;%保存时间戳
结束
现在已经收集的数据,我阴谋容器的比例和时间如何快速液体填充容器。
图
情节(次,9 * 100)
标题(装有液体的容器与时间的百分比)
包含(的时间(秒))
ylabel (“填充比例”)
看那!填充率不一致。从情节,我看到周围的流动减慢8秒,15秒增加,再次放缓在20秒。
___
谢谢,以撒!
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。