从系列:用MATLAB实现计算机视觉
MathWorks阿维纳什•尼希米
在此介绍研讨会,您将学习如何使用计算机视觉算法来解决现实世界中的成像问题。计算机视觉应用图像和视频检测,分类和追踪,以了解真实世界场景中的对象或事件。
你会发现如何:
我们将通过真实世界的例子来演示关键特性,包括:
本次网络研讨会假设有一些使用MATLAB的经验,而没有使用计算机视觉的经验。我们将专注于计算机视觉工具箱。
关于主讲人:阿维纳什尼希米适用于在MathWorks公司的技术营销计算机视觉应用。在加入MathWorks公司,他花了7年的算法开发人员和研究人员设计用计算机视觉算法对医院安全和视频监控。他拥有卡内基梅隆大学获得电子工程硕士学位。
欢迎来到本次网络研讨会上计算机视觉变得容易。我的名字是阿维纳什尼希米,我对计算机视觉在这里MathWorks公司的产品营销经理。在我们开始之前,这里就是我要谈谈接下来的40分钟左右的快速概览。
我将通过定义计算机视觉和显示你计算机视觉的几个有趣的例子开始。然后,我会向你展示它是多么容易使用MATLAB和计算机视觉系统工具箱解决实际的计算机视觉问题。我要告诉你如何解决问题,如杂乱的场景的图像中定位对象,分析在繁忙的街道交通的流量,并在视频跟踪人的动作。
那么什么是计算机视觉呢?计算机视觉扩展了图像处理,通过检测、分类和识别对象和事件,使用图像和视频来理解真实世界的场景。在这个视频中,我使用图像处理通过调整输入图像的对比度和锐化图像来提高图像质量。然后我用计算机视觉来检测和计数移动的物体。我想指出的是,这是一个问题,我将向你展示如何解决在这个网络研讨会稍后。
多年来,我们的客户非常成功地利用计算机视觉解决了各种各样的问题。例如,宝马使用计算机视觉创建了一个停车辅助系统。美国国家航空航天局利用计算机视觉帮助火星探测器着陆。
在我们开始之前,这里有一些提示,以帮助您得到最出此次研讨会。我们将可在网络研讨会结束的代码,我真的建议你检查出来。现在,让我们解决一些问题。对于我的第一个问题,就是我想要做的是左边检测书的对象的图像中,右侧的杂乱场景的图像。
现在有解决这个问题的一些挑战。对象可以出现在现场旋转。有可能是一个规模的变化,其中对象可能出现比模板大或变小。或者你可以有混乱,或者你有可能隐藏你正在寻找可能混淆你的算法对象的部分,或confusers其他对象。
现在什么都这个手段是你不能使用标准的图像处理技术,如模板匹配,来解决这个问题。你需要找到一个算法,是一个有点更加复杂和强大。我选择了解决这个问题的方法是工作流称为特征检测,提取和匹配。现在我挑选这种做法的理由是,这是计算机视觉中一个非常基本的工作流程,并可以用来解决各种各样的问题。
第一步是检测在左侧的对象有趣的特点,并且这是由红色标记所示。下一步是把周围检测到的特征区域以及有关地区的一些信息编码到你所说的特征向量。然后你做同样的事情在右边的图像。在这之后,你找相应的特征向量,你的两个图像计算之间的匹配。
一旦有了一组匹配特征,就可以估计对象在场景中的位置。在我们开始使用MATLAB之前,我想非常快地讨论一下什么是一个好特性。因此,一个好的特征可以检测出一个清晰的图像区域,这会导致在其他图像中有一个明确的匹配,并且随着时间的推移可以在许多图像中重复。所以对于这张白色汽车的图片,它可能是一个角落,或者是汽车本身的模板,或者是更现代的东西,比如检测斑点的冲浪功能,或者检测区域的MSER功能。
现在我们从MATLAB开始。现在我要做的第一件事是读取我想要检测的对象的图像并将其导入到我的MATLAB工作空间中。为此,我要右键点击一个图像,点击导入数据,MATLAB会给我一个向导让我把这些数据导入到我的MATLAB工作空间。
你可以看到一个名为LostBook3变量在我的工作区露面。现在我要做的下一件事就是我要去尝试和可视化这一数据,只是为了确保我写正确的形象。因此,要做到这一点,我会点击这个变量,我要在MATLAB图选项卡。什么MATLAB所做的是它给我情节,将这个变量,我已经点击工作清单。所以我要点击imshow,这是怎么回事要显示的图像,我只是阅读。
现在作为一个快速的边注,这本书,数字图像处理与MATLAB,是一个很好的介绍图像处理。如果你刚接触图像处理和计算机视觉,我强烈建议你去看看。
现在您不必总是使用这个点击式界面将数据导入到MATLAB中。也可以使用imread函数读入图像。这和我刚才用导入向导做的完全一样。
现在对我来说,下一步就是这种彩色图像转换成灰度。现在,我想这样做的原因是很多的计算机视觉算法,尤其是配备了检测算法,更喜欢灰度数据。所以我要利用rgb2gray功能来做到这一点。现在,当我在幻灯片中提到,在我的工作流程的第一步是发现有趣的功能。
现在我知道我想要检测的功能,但我不完全知道是什么功能的MATLAB有让我做。那么让我告诉你一个简单的方法来发现。所以我要去上右上角的搜索栏,和我要的类型,“检测功能。”当我按下Enter键,这打开了文档中心,这列出了所有我可以在MATLAB用来检测特征的功能。
所以我要选择检测SURF特征,这是要告诉我相当多的东西,我需要知道有关检测SURF在MATLAB功能。它要给我函数语法,功能的说明,以及有关参数的更多信息。如果我再向下滚动了一下,这其实表明了我的,我怎么能使用MATLAB检测SURF设有一个例子。
让我向你们展示MATLAB帮助的一个很酷的东西。我能做的是我能在这里突出显示一行代码,我能右键点击它然后点击评估部分。它所做的是将代码插入命令窗口并运行它。你可以看到,它在图像I上运行了检测SURF功能,它返回了可变点。如果我在我的工作空间中查看这个点变量,它实际上是2048个冲浪点,或者略多于2000个冲浪点。
现在让我回到我的帮助,帮助实际上显示了我如何能可视化冲浪特征。这段代码所做的就是将检测到的2000个特征中的10个最强的特征可视化。因此,如果我评估这一部分,你可以看到,10个最强大的功能,实际上是在文字的数字图像处理。你有许多功能在信上。你有几个字母M,在字母N,和一个字母r和这些图像中非常独特的地区,你可以想象,这些将使它很容易匹配图像。
现在有一件事你可能已经注意到的是围绕这些检测到的特征圆的半径是不同的。现在出现这种情况的原因是特征检测算法告诉你周围的功能区有多大,你需要解压到您的形成特征向量。因此,让我们想象这是一个好一点,看看周围这些检测功能这些地区。
为了做到这一点,我将把图像I中20个最强大的特征可视化,如你所见,所有这些特征都存在于数字图像处理书的文本中。最强大的特征似乎在字母I周围。字母M和N中有很多。再说一遍,这些都是纹理非常丰富的区域,你可以想象这些区域很容易在图像之间匹配。
现在,你可以看到,MATLAB是一个很好的环境,只是为了导入数据,探索数据,只得到更多地了解这个问题,你解决。但MATLAB也是一个很好的脚本语言。因此,让我开,我已经写来帮助我更好地解释这个问题的其余部分脚本。首先,我要收出当前文件夹浏览器,只是让我们有更多的空间里看到的代码。
现在你可以看到这个代码已经被分裂成一些不同的部分。这是在MATLAB中一个非常,非常酷的功能,您可以运行这些部分失灵。所以,你可以运行第3节,然后你就可以回去和运行区段1,然后就可以按照由运行区段2。现在这是为你们谁来自C和C ++的世界里,非常不同的,如果你造了你的代码的改变,你必须重新编译你的项目,你不能真正运行任何东西坏了。
所以我要从清理我的工作空间开始。然后我要读我的两个图像。我要读的对象和场景。有一件事我想指出的是,我的模板,我试图检测的对象是非常不同的,它是如何出现在我的场景。我的意思是,这本书有一个不同的颜色封面,它实际上是这本书的不同版本。
然后我将检测SURF特性,就像我在命令行中展示的那样。之后,我将使用提取特征函数来提取特征。您可以看到在我的工作区中出现了两个变量,分别称为feats1和feats2,它们的大小与检测到的SURF功能点相同,但是它们的元素宽度为64个。
因此,这意味着我用64元来表示所检出的功能区,而我的特征向量是64元长。现在,因为我实际上已经显示这些功能,我将本节跳过,我要去下一节。现在,作为我前面提到的,最后一个步骤是匹配两个图像之间的检测到的特征。因此,要做到这一点,我将使用匹配功能的功能。
现在让我告诉你,你正在使用你的编辑器另一种快捷方式了解功能的更多信息。要做到这一点,你可能只是一个功能,右键单击单击帮助上的选择,或按F1,并为您提供了该功能的帮助。所以,你可以看到如何匹配功能的帮助下,和它给你一个功能说明,而且给你提供了如何使用该函数的例子。
我要做的是用匹配特征函数来匹配两个特征向量,特征1和特征2。然后我将使用show match features函数来显示匹配的特性。太棒了!正如你所看到的,我们在匹配左边的书和场景中的书的特征方面做得很好。
但这里有一个小问题。正如你可以看到,有一吨出现外书的虚假匹配的。这是一个问题,因为如果你用这些比赛来估算在本书,你基本上有一个边框,这是该图像的一半,这是不完全准确。所以,让我告诉你如何解决这个问题。
为了解决这个问题,我们将使用一种叫做RANSAC的算法。RANSAC是随机样本一致性的缩写。RANSAC是一种对数学模型进行估计,同时滤除异常值的方法。这意味着什么呢?对于这些数据和左边的这张图片,如果你想估计直线的方程,RANSAC将会帮助你做什么估计直线的方程在蓝色的右边,而过滤掉所有的点在红,或离群值不为寻找直线的方程。
现在,在我们的情况下,其实我们要做的是估计从图像的点的几何变换,或者对象,对不起,在场景中。因此,让我们回到MATLAB。在这里,我使用的估计几何变换使用RANSAC引擎盖下的功能找出哪些我的正常值,并告诉我的对象和场景之间的转换。因此,让我运行,然后我将使用show匹配功能的作用再次显示匹配。
太棒了!你可以看到,RANSAC做了一个非常棒的工作,过滤掉了我的异常值,这些异常值是伪造的匹配,现在我有更少的匹配,但所有这些匹配都是非常好的匹配。你已经在左边的物体和右边的场景之间找到了精确的匹配。
现在我要做的最后一步是在场景中定位物体。为了做到这一点,我将使用我用RANSAC计算出的变换。我要把边界框的方程从物体变换到场景中。我要用一个叫做变换点向前的函数来做这个。我们来看看它是什么样的。你可以看到它做了一件很棒的工作在场景中定位这本书。尽管我们为这本书使用的模板与我们现有的非常不同。我们有一个模板,书的封面是完全不同的颜色。
现在大约有脚本的其他伟大的事情是我可以非常迅速地通过这个改变一个变量,并运行不同的数据,看看有多好我的算法的工作。所以我要到刚刚在不同的图像读取。我只是要运行整个事情。我不打算通过一步一步一步像我一样以前。正如你所看到的,这本书在左边,算法做在右侧同一场景中找到它的出色的工作。
如前所述,这种提取和匹配特征的工作流程在许多应用程序和计算机视觉中都得到了应用。让我给你们看一个不同应用的例子。为了做到这一点,我要做的是打开Doc center通过点击这里的问号。我要点击“计算机视觉系统工具箱”。然后我要打开“示例”选项卡,这里列出了大量的示例,这些示例向您展示了许多不同的计算机视觉问题。
点击视频马赛克。视频拼接是,你从不同的角度拍摄一个场景的图像,然后你把它们缝在一起,形成一个马赛克的场景。现在,特征检测提取和匹配被用于视频拼接,以找出如何将图像拼接在一起。这些特征在左边的图像中从一帧匹配到另一帧,这被用来估计帧之间的转换,然后用来创建你在图像中看到的漂亮的视频马赛克。
所以在最后,以一个杂乱的场景的图像中定位对象,我们使用功能检测,提取和匹配。我们发现,该算法是真正稳健的旋转,缩放变化,即使是轻微的闭塞。我们学习了如何使用RANSAC帮助消除异常值。我们还了解到,该算法在许多应用中,如图像配准和自主机器人,机器人已经实际使用这个精确算法来帮助找到它们的充电站。
现在,在最后一个例子,我向您展示如何可以检测特定的对象和图像。在接下来的例子,我将告诉你如何探测到移动物体。而我们将利用这些信息来帮助分析在繁忙的街道的交通流。要做到这一点在MATLAB中,我要检测移动物体。然后,我要计数每个视频帧运动物体的数量。
现在有一件事你可能已经注意到的是这个例子和上次不同,是在这个例子中,我使用的视频流,而不是最后一个例子,我在那里用一对静止图像。协助处理MATLAB的流数据,我们使用一种叫做系统对象。现在,系统对象和MATLAB对象被设计以处理流数据,如视频。他们可以代表算法或输入输出功能。
现在,要记住的关键是系统对象都有用于处理数据和运行系统对象的步骤方法。现在关于系统对象的很酷的事情是它们形成MATLAB和Simulink之间的桥梁。金宝app因此,系统中的对象,你在MATLAB使用可以在Simulink中被使用。金宝app因此,让我告诉你一个简单的例子,以系统对象的方式工作。
所以我有这个剧本我要去哪里使用vision.VideoFileReader系统对象读取视频文件。然后我会使用视频播放系统对象,以显示视频。我将使用isdone方法。现在isdone方法是特定于VideoFileReader对象,它可以让你知道当你到达视频的结尾。
现在我要循环播放,直到视频结束。我将使用阶跃函数来读取下一帧视频。然后我要用阶跃函数来显示这个视频。我来运行一下,看看能得到什么。
如您所知,MATLAB已经使用系统对象读取了视频,并将其显示出来。现在你可能已经注意到了,这个视频实际上比实时播放快得多。这样做的原因是MATLAB正在尽可能快地从硬盘读取数据并将其显示到屏幕上。
因此,让我们回到我们的问题。现在,你需要做的第一件事就是找视频的每一帧的运动像素。因此,要做到这一点,我们将使用名为背景减法的算法。现在背景减法,它的作用是它估计背景的统计模型。所以这个图像中的背景通常是建筑,天空,道路的部分。基本上,这是不随时间变化和像素可以被认为是背景的一部分。
所以,如果你有一个输入图像,如果你减去你已经学背景的模型,你会得到的是一个二进制掩码。并且这也被称为前景掩模,或运动面罩,其中由一个所表示的像素是实际上是与背景不同的像素。因此,在这种情况下,你会看到车,该车的位置,是由像素作为一个代表。因此,让我们跳进MATLAB来看看如何做到这一点。
我要打开另一个脚本,我有一个名为countingCars。我要通过清除我的工作区启动。然后我要创建一个视频文件读者我的数据读取。然后我实际上是创建两个视频文件显示,一个显示的前景,以及一个显示视频。
我要做的下一件事是创建一个系统对象的前景探测器。现在前台检测系统对象执行背景减法。让我们打开帮助来更好地了解它的作用。正如你所看到的,愿景。前景探测系统目标采用高斯混合模型对前景进行探测。
这里我要做的是运行前75帧视频通过前景探测系统对象。我这样做的原因是我想给它足够的时间来学习前景。在那之后,我要停下来,我要看一下视频的第75帧,我也要看一下前景。
我来运行这个部分。正如你所看到的,对于这张图,前景实际上很好地表现了哪些像素在移动,哪些像素没有移动。所以背景减法在学习背景和找出哪个像素是前景方面做得很好。
然而,有一个点点问题。如果你看一下所有的噪音这些小斑点,如果你使用这个数据从这个前景来计算移动物体的数量,你就会有上百个对象,因为噪声会被算作移动的物体了。这将是非常不准确的。所以,接下来要做的事情实际上是过滤掉来自前景的噪音。
现在要做的是,我要用一种叫做图像形态学的方法。现在形态学是图像过滤的一种形式,它帮助过滤二值图像并将其清除,去除一些噪声。为此,我将使用在imopen函数中实现的opening词法操作符。我要用一个过滤元件,一个半径为1的圆盘。所以让我来看看它看起来怎么样。哇,你可以看到它在去除所有噪音方面做得很好,而且它实际上保持了我想数的所有物体的完整性。
所以,现在我们知道,我们需要使用图像的形态,让我告诉你我是如何得出这一结论的,我想用口操作与特定的结构元素。现在要做到这一点,我要点击MATLAB中的应用程序选项卡上。这列出了所有的应用程序,我已经安装在MATLAB。现在大多数MATLAB工具箱配备了一套应用程序。但实际上,我将使用称为morphTo的应用程序。这个程序是由Brett Shoelson,谁在MathWorks公司的应用工程师在这里创建。这是在提供免费的MATLAB文件交换。
那么我现在要做的是我会从我的工作空间中导入一个变量,在这种情况下将是前景。并希望morphTo应用所做的是它让我尝试了所有在MATLAB提供的不同形态的操作,所以我可以找出我的问题是什么在起作用。所以,我要首先尝试的扩张功能。正如你所知道的,这让我的噪声情况更糟。这是不理想!
侵蚀函数实际上消除了所有的噪声,但它实际上破坏了一些我想要保留的移动像素。这也不理想。然后我尝试了imopen函数,这是一个先腐蚀后膨胀的函数,它在去除噪声和保持所有移动对象完整方面做得非常好。我还将尝试其他可用的操作,但如您所见,它们没有imopen做得那么好。
我要选择imopen,然后我要做的下一件事是尝试所有不同的过滤元素和过滤元素的不同大小,在我最终确定一个半径为1的磁盘之前,因为那似乎给我最好的结果。这就是我如何计算出我想要对半径为1的圆盘的过滤元素使用打开操作的方法。
现在,一旦你有了一个干净的前景,下一步要做的是把移动的像素分组在一起,这样你就可以把它们分割成不同的移动对象。为了做到这一点,我将使用一种叫做连接组件分析的方法。这是在另一个名为blob分析的系统对象中实现的。让我们看一下帮助来进一步了解它。
因此,大家可以看到,斑点分析计算连通区域的二进制图像的统计信息。所以在这种情况下,二进制图像将是干净的前景。让我们看看统计它给了我们。所以,它会告诉你的东西,如地区,质心,边界框,在长轴和短轴的尺寸和取向的面积。
所以我要创建的系统对象。我打算把它列出所有的连接组件的边框。而且我还要告诉它过滤掉其像素面积小于150。因此,这是真的给我一些额外的过滤很好,我是不是能够实现我的形态的所有对象。因此,让我跑的那款。
现在,让我们继续我们的主处理循环。所以你可以看到,我做的第一件事是我在视频帧由步进视频文件读取器读取。然后我传递视频帧透过前景检测器,以及我从前景检测器的输出,以及我在其上执行断开操作。我然后通过斑点分析系统对象传递洁净照片。基本上这是什么做的是它列出了每一帧的连接组件的所有边界框。
所以接下来我要做的就是简单地计算边界框的数量,它告诉我每帧中有多少个移动对象。我还将使用这些边界框中的信息在每个移动对象周围绘制绿色矩形,以便更好地可视化哪些对象正在移动。所以让我们运行这个处理循环,看看我们得到了什么。
还有就是我们的清洁前景的视频。而且有结果,你可以看到我画中的运动物体周围的绿色长方形。而且我实际显示在屏幕上出现的顶部左手边的移动物体的计数。
现在检测移动对象实际上是在分析流量的流量只是第一步。接下来要做的是实际跟踪通过视频这些运动物体的身影,他们要去哪个方向,他们正在移动的速度有多快。我要谈的对象在下一节跟踪多一点点。现在让我告诉你我是如何延长当前的例子,在这里我们简单地检测对象。
现在我所做的是我用卡尔曼滤波器来跟踪检测的对象。和卡尔曼滤波器实际上给我的车是移动的方向的预测。我用这个信息来改变汽车周围的边框的颜色。
因此,在总结,分析流量的流量,我们学习了如何使用背景减法来检测移动像素。然后,我们了解了如何使用形态清理前景蒙,然后如何使用连接成分分析来分割这些对象。然后,我们也谈到了真正简单介绍一下如何扩展该分析对象跟踪。
现在,我的最后一个例子,我将告诉你如何跟踪一个人从框移动到视频帧。所以我要在这里采取迪马的这部影片。现在迪马是计算机视觉工具箱的开发商之一。我还会来检测他的脸,然后跟踪有他从帧移动到帧这部影片。
这是一个两步的过程。我首先需要检测我试图跟踪的person对象,在本例中是Dima的脸。然后我将使用点跟踪算法来跟踪人从一帧到另一帧的运动。现在,为了在检测Dima的脸下执行对象检测,我将使用一种称为级联对象检测器的东西。
现在,这是基于维奥拉 - 琼斯算法。而且它是人脸检测等五官,像你的鼻子和眼睛特别好。而且中提琴 - 琼斯算法实际检测对象的类别,因此它可以识别图像中的所有面。现在有一两件事我想指出的是这种算法没有做脸部识别。它可以简单地检测人脸,但不能识别特定的阶段。
现在让我们进入MATLAB,看看怎么做。这里我有一个脚本叫facetrack。所以我要从清理我的工作空间开始。然后我将在视频中阅读,创建一个视频播放器来显示我的结果。然后我将读取视频的第一帧并显示它。
所以你看这是迪马的脸出现的图像。然后我将建立一个系统对象,级联对象检测系统对象,实际执行的人脸检测。所以我通过这个级联对象检测系统对象去一步,我要画一个边界框周围的任何结果。因此,让我试试。
正如你所看到的,它做了大量的工作,检测迪马的脸。现在,当我在幻灯片中提到,该级联对象检测器是用于检测其他五官真的很好。因此,让我们看看帮忙看看还有什么我可以检测使用级联目标物检测。让我向下滚动,并且在那里,如果我改变了分类模型,其实我可以检测不同的特点。所以,我能察觉的上半身,这听起来很有趣,眼睛对。OK,我有眼对大的分类模型。因此,让我看看,如果我可以用它来检测迪马的眼睛。
哇,你去那里。因此,大家可以看到,级联对象检测器进行检测迪马的眼睛一个很好的工作,这也是尽管事实上,迪马的戴眼镜。因此,让我却步,让我穿上面临着回来。
另一件我想快速提及的事情是计算机视觉系统工具箱附带了许多预先训练过的对象检测器。但我们也有功能和一个应用程序,你可以用来训练自己的探测器。因此,如果您想训练我们的检测器来检测咖啡杯,我们提供了框架来帮助您做到这一点。
因此,让我们回到我们的例子,让我再次运行此节。好。为我做的另一接下来的事情就是发现有趣的功能对我来说,跟踪,用我点跟踪算法。现在执行这一功能检测,我将使用一种叫做分钟的本征特性。现在,我用这些分本征特性的原因不是SURF功能,比如我做了我的第一个例子,这是最小的本征特性被称为是用于跟踪特别好。在一些其他的工具,最小本征特性被称为良好的功能来跟踪。
所以我要用特征最小特征检测函数来检测特征。这里有一些有趣的事情。我有一个论点说我只会给它ROI,或者感兴趣的区域。它只检测感兴趣区域内的特征,在这个例子中,是我检测到的物体的边界框,或者是Dima的脸。让我快速地讲一下。在这里你可以看到这些点只在检测Dima的脸的边界框中被检测到。
现在,下一步是初始化一个点跟踪系统对象,这是发生了什么事情来帮助我们跟踪这些组点的逐帧,那则使我们可以通过这个视频跟踪迪马的动作。因此,让我们再次打开帮助正好看到这点跟踪器做什么。你可以看到它跟踪使用卡纳德 - 卢卡斯 - 托马西算法,或KLT点和视频。
对于那些你谁是越来越成为计算机视觉,你会看到KLT算法很多,因为这真的是可用的更稳健点跟踪算法之一。如果你在帮助向下滚动,它实际上告诉你到底如何构建系统对象,如何与特征点初始化,然后你需要做的,使用该系统的对象几乎一切。
所以,我要先走了,我会用我刚刚检测,最小本征特征点的点初始化点跟踪器系统对象。因此,让我运行这个真正的快。让我们来看看我们的加工循环之前,我运行它。所以我要通过使用我的视频文件读取的图像读取启动。然后我会在这架通,通过我点跟踪系统对象。
当我通过它时,它会给我两个变量作为输出。它给了我一组点和一组称为validity的标志,告诉我哪些点是可见的,哪些点是不可见的。所以我将使用有效性标志来删除下一帧中不再可见的点,这样我只跟踪每帧可见的点。
其实这是很常见的,当你跟踪点,是,像,说,如果迪马将他的脸,他脸上的一侧一整套点将不再是可见的,这就是为什么你需要保持跟踪这点不再是从帧到帧是可见的。然后,我只是插入一个绿色加号,只是为了纪念点是我要追踪,这样我就可以有一个更好的感觉如何以及该算法工作。让我跑的过程中,并期待看到它是如何工作的。
正如你所看到的,它做跟踪的大多数功能上迪马的脸做得非常好。但有一个问题。就像你可以在这里看到,我们所坚持的是不是真的在迪马的脸上点了几个异常值。现在,过滤这些的时候,我们实际上可以依靠同样的方法,RANSAC,我们在第一个例子用来过滤掉不属于迪马脸上的异常值。因此,我们可以筛选出异常帧与帧。因此,让我告诉你如何这样做了。
所以,现在要做到这一点,我其实有一个叫做faceTrackRANSAC一个单独的脚本。而且这等同于以前的剧本的权利,直到这一点,在这里我再取我的两个点集从我的前一帧和我目前的框架。我用RANSAC来估计从帧的点的几何变换帧。而这样做是RANSAC居然给了我一组的内围,过滤掉不处在迪马脸上的异常值后。因此,让我跑这来看看它如何工作。
正如你所看到的,现在它做跟踪迪马的脸一个更好的工作,没有太多的异常值周围迪马的脸区域之外。现在,这是做跟踪,但让我告诉你,说明做跟踪的完全不同的方式从计算机视觉系统工具箱另一个例子的一种方式。
因此,要做到这一点,我要回到我的文档中心,我要去点击计算机视觉系统工具箱,我要去去例子标签。让我向下滚动到所有跟踪的例子是,你可以看到有一个巨大的各种跟踪的例子。现在,我要点击这个基于运动多目标跟踪。
这是一个非常非常酷的例子。我觉得它很酷的原因是它给了你一个框架你可以用它来跟踪移动的物体。你可以用这个例子,来解决一些相当复杂的问题。这个跟踪算法和我在上一个例子中提到的是一样的,它使用Kalman filers来跟踪对象。
现在卡尔曼申报者是目标跟踪和计算机视觉非常受欢迎的。而这有很多原因。一,卡尔曼滤波器的工作很好的实时性。其二,卡尔曼滤波器实际上给你的输出的预测,其中一个目的是,即使你无法看清物体,这是计算机视觉,在很多时候的目的可以通过别的东西被遮挡很大。
因此,让我们只需打开这个例子,看看它是什么样子。因此,让我运行。你可以看到我有合适的我的背景相减的结果,并在左边我的跟踪结果。而且它要开始跟踪的人,当他们进入现场,这将给予他们唯一的ID,that--这些都是在上面的数字。正如你所看到的,因为他们去的观点出来,他们不再是可见的,卡尔曼滤波器实际上是尝试预测它们的位置。这是真正的关于使用卡尔曼滤波器最有趣的功能之一,就是他们不会让你继续跟踪,即使对象不是几帧可见。
现在你们中的一些人可能会想我已经学会了三种方法来做对象检测,为什么我不从一帧检测到另一帧,而不是经历对象跟踪的麻烦呢?这样做有三个主要原因。第一,物体探测器并不完美。他们确实时不时地失败。第二,如果你有一个应用程序需要在帧与帧之间维护一个对象的标识,那么对象检测器就不能做到这一点。
第三,这是非常关键的,一般来说,目标跟踪算法比目标检测需要更少的处理能力。所以如果你想把你的算法部署到移动设备上,你可能需要做更少的目标检测和更多的目标跟踪。
下面是我们用来追踪一个人运动的算法的一个快速总结。我们用级联目标检测器来检测迪玛的脸。然后,我们使用最小特征来寻找被检测对象上的特征点。我们使用了KLT点跟踪器,它是在vision.point tracker系统对象中实现的,可以在一帧到另一帧之间实际跟踪对象。
因此,在总结,你为什么要使用MATLAB计算机视觉?嗯,首先,MATLAB是探索和发现的一个大环境。但是,简单的编程语法,使您能够实现公平在短短复杂的系统,30行代码,由脸部追踪例子就是证明。然后有全面的文档,我一直在利用整个网络研讨会的过程。然后还有一个巨大的例子目录,你可以用它来了解更多关于计算机视觉和你甚至可以适应于自己的工作。
现在,这里为大家介绍一些建议的后续步骤。我强烈建议你尝试从本次网络研讨会的代码。请浏览上显示的链接的更多计算机视觉的例子。而且还检查了这两个研讨会,图像处理变得容易与计算机视觉与MATLAB进行目标检测与跟踪。最后,如果您有任何疑问,请向我们提供您的问题在下面的链接,我们将很乐意回答他们。
记录:2014年3月6日