安迪,MathWorks
这一节是对MATLAB的介绍®,一种用于数值计算、可视化和编程的高级语言和交互环境。
MATLAB包括内置的数学函数基本解决工程和科学问题,和交互式环境理想的迭代探索,设计和问题解决。一个图像处理示例用于展示如何开始使用MATLAB。
亮点包括:
录音时间:2014年3月26日
大家好,欢迎来到MATLAB简介。我叫Andy The,是MathWorks的产品营销经理。在这节课中,我们将通过一个图像处理的例子来介绍MATLAB。但是在我们开始之前,我们先来谈谈MATLAB。
MATLAB本质上是一种高级语言。不仅如此,它还是一个完整的交互式开发环境。这让你能够编写脚本,进行数值计算,像你在右边看到的那样进行可视化,使用绘图和许多不同类型的绘图工具。此外,它还允许您进行算法开发和编程,最后是应用程序部署。
因此,让我们走一步,谈谈典型的技术计算工作流程。传统上,您将从访问数据开始。这可以以文件的形式出现,也许从第三方软件输出,甚至可能是硬件。获取数据后,您将进入我们所谓的探索和发现阶段。这是您要做很多算法的开发,并做像图形,查找趋势和开发应用程序的事情。然后最后,分享它。你要分享你的想法。您将以报表和文档的形式与同事分享您的算法,或者可能以C文件,库,可以由其他第三方应用程序消耗的输出的形式分享。
虽然我把它表示成一条线性路径,但实际上这是一条迭代路径。您通常会在这些不同的阶段之间移动,增加数据集的大小,进行更多的开发,优化算法和应用程序,共享结果,获得反馈,然后再次进行更多的优化。在这节课中我要向你们展示的是MATLAB非常适合这种工作流程。
今天演示的目标是构建一个入侵者检测系统。使用MATLAB和图像处理工具箱,我们将探索图像创建和分享这个应用程序。我们将首先使用静态图像。我们将发布报告来帮助分享算法。最后,我们将使用现场视频。
让我先给你们预览一下我们将要构建的东西。如果你看这里,这实际上是一个运行着很好的用户界面的应用程序。我们让算法运行。这是没有入侵者的参考图像。在右手边,你可以看到用红色标记的入侵者。最后,我们会看到如何将整个应用程序组合在一起。
这是在MATLAB中。对于那些刚接触这个环境的人,我会在演示过程中讲到不同的特性。让我们开始吧。在命令窗口这里,您可以开始与环境进行交互。例如,你可以开始赋值一些变量,比如a = 3, b = 5。我们可以创建另一个变量c让它等于a乘以b,没有什么复杂的,答案是15。
但我想指出的是MATLAB将所有这些变量存储在工作空间中。如果我双击打开它,你会看到我创建的变量,a = 3, b,等等。这就是你可以储存它们的地方;您可以对它们进行操作。但更重要的是,双击这个,你会看到一些有趣的东西。MATLAB本质上把所有的变量当作矩阵或二维数组来处理。在这种情况下,变量a是一个值3,但它是一个1 × 1矩阵。所以当你做线性代数之类的事情时,这是非常有用的,或者在我们的例子中,图像处理,每个图像本质上都是一个矩阵。
让我们再做一些数学运算,让你们看看我们能做什么。我创建了这个快捷按钮来清除工作空间中的环境。顺便说一下,你可以创建你喜欢的快捷方式。你可以在这里创建一个标签。您可以输入任何可能输入的常用输入命令。这能帮助你提高工作效率,加快工作速度。
现在我要创建一个矩阵。我们称之为矩阵1。我们要创建一个3 × 3矩阵。为了节省时间,这里我要做一些自动补全。现在如果我点击Return,你会看到它是一个简单的3乘3矩阵。你会看到中间是1和0。我们可以把它画出来。如果我们往下看,在这个工作区让我打开这个。
我之前没有给你们看这个,但现在我们有了一些更有趣的数据,你可以右键点击。我还可以再找一些变量,比如标准差,均值,中位数。所以当这个矩阵变得更大更复杂时,你实际上可以提供一些有趣的属性在工作空间中显示出来。
现在我们要把它画出来。如果我选中它,然后到plot选项卡,你会看到所有与这个数据类型相关的plot。在本例中,我们希望将其视为图像。所以我可以使用imshow。这相当于成像世界中的printf。你只是在偷看或看价值。但我想使用图像工具,或imtool,因为这是一个非常小的图像。你会看到,这个图像工具可以让我放大。
所以这里我要放大图片。你看不到什么有趣的东西。但是你可以用图像工具做一些事情,比如测量。在这里你可以看到我可以测量这个黑色的小正方形。它的直径约为1.39像素。我真的可以玩对比。我可以裁剪图像。但也有意思的是让我继续,并正确的大小这一点-我可以点击这个按钮在这里检查像素值。如果我点击它,这里会显示这是我的矩阵。所有不同的元素这里所有的1都是白色的。中心是0,这是黑色的。所以这基本上是一张图片。这不是一件很有趣的事。但尽管如此,我的小矩阵是一幅图画。
我们开始吧。现在我要进行一些运算。记住,我提到过MATLAB把所有东西都当作二维数组或矩阵来处理。您可以对整个数组进行操作。这里我们将继续执行一些逻辑运算。例如,我要创建另一个矩阵- 2。我要让这个等于矩阵1中的所有项,比方说,小于1。
所以我要做的是,本质上,我创建了逆矩阵。这里,原来是1的都变成了0。所有的0现在都是1。我也可以把这个打印出来。我要回顾一下我的历史。我要打印出矩阵2。这里,放大,这是我的图像。你可以看到它的倒数。现在中间是白色的。是1。 All the surrounding pixels are black, because they're 0.
现在你可以看到,我已经和MATLAB进行了一些互动。我输入了很多命令。虽然一开始这很好,但这可能会有点费力。当你的命令变得更强烈,你想要做更多的交互,你可能想要移动到一个叫做脚本的东西。让我给你们展示一种方法如何得到它或者如何转换到它。
如果我们转到命令历史,你可以看到我在命令窗口输入的所有东西,自从我打开MATLAB的这个会话,我已经在这里捕获了。你可以说,好吧,我想要捕捉这个。我按住Control键,开始高亮我想要的所有命令。我在这里创建了一些矩阵,叫做imtool。我可以右键点击这里。我可以计算这部分的值。这样我就能重播历史了。或者右键点击,创建脚本。
它会打开这个编辑器窗口。这里你可以看到我输入的所有命令。我可以保存这个。例如,我可以保存并创建一个测试脚本。然后所有的脚本都被标记为。m。这是我的剧本。我可以清理我的工作空间。我可以重新运行我的脚本只要到编辑器选项卡,点击运行。实际上,这是我所有的变量。它们都已经被填充,用我的矩阵创建,也发射了imtool。 And here's my little image where I can actually zoom in and see.
因此,这是一个很好的方式,可以转移到一个使用脚本的环境中,在那里您可以进行迭代。您可以使用它进行调试。你可以节省,让自己更有效率。所以命令窗口很棒。但是,如果您想要更加自动化,保存这些内容并进行迭代,我建议您使用脚本。
让我们继续看图像处理的例子。让我来清理一下环境。现在看我们的图像处理例子,如果你看左边,我还没有给你展示。这是文件夹浏览器,文件浏览器。这里我们可以看到不同的文件。我们可以导航到文件系统中的任何文件夹。这是我们的两个测试图像。让我们继续,现在将它们导入到工作区中。
因此,如果我们双击TestImageOne,我们将看到导入向导出现了。这是一张JPEG图像。所以这其实很简单。它所做的只是告诉我它的名字。它告诉我这是一张266×484像素的图像。它有三层。之所以有三层,它说有一个R,一个G,和一个B-a红,蓝,绿层。我们将继续并通过单击Finish将其导入工作区。但是我应该指出,这个导入向导将根据您的数据类型进行自定义。例如,如果您有表格数据或其他类型的数据格式,您将看到一些选项,这些选项将帮助您控制导入工作区的方式和内容。因此,请记住导入向导将根据您的数据类型进行自定义。
让我们继续,在这里单击Finish。然后你会看到我们的测试图像被填充在这里,测试图像1。让我们导入第二张图片。就在这里。然后点击Finish。这里我们有两个图像。让我们预览它们,以确保它们正确地导入到环境中。如果我们点击其中一个,到plot选项卡,你会看到任何相关的plot都会出现在这里。我们可以做一个简单的即兴表演。这个就像printf一样。 We're just looking at that variable.
看,没有什么有趣的。这是我的办公室。正如你所看到的,今天这里相对干净。但你看,没有什么有趣的。这里没有入侵者。看起来一切都很好。但如果我们去测试图像2,然后使用图像工具。我想给你们看一些有趣的东西。这是我们办公室的照片。但有人在里面。 So we have someone here.
所以这很有趣。使用图像工具,我们可以开始进行一些预处理或开始分析数据。例如,我们可以点击这里的这把小尺子。我可以测量这个人有多高?哦,大约150像素高。所以这在以后可能很重要。因为我们可能想做一些基于长度的过滤,可能要确保我们检测到一个人,而不是某人的宠物。这就是你可以快速测量的方法。让我继续删除该距离工具。
但是你也可以做一些事情,比如裁剪图像。您可以返回此对话框检查像素值。这里我们看到了像素区域。这次让我继续放大,这样你可以看得更清楚一点,现在更有趣一点。当我移动这个小观察窗口来观察像素区域时,这里是红色、蓝色和绿色的强度级别。所以要制作这个红色的袋子,你可以看到制作这个颜色所需要的值。如果你看这里的黑色,你可以看到它基本上都接近零。然后如果你靠近墙壁,它的强度都非常高,接近200256,这是最高的,在这张图像里面基本上是纯白色的。这是非常重要的信息,因为你以后可能想做基于颜色的处理,所以这是另一种分析数据的方法,看看你将来可能想做什么类型的处理。
但在我们的例子中,这更简单。如果我返回到另一张图像,让我关闭这个像素区域。我要去拿我的。所以在我们的例子中,我们要做的是我们要弄清楚什么时候这里有入侵者。如果你看这两幅图,你会发现有很多一致性。办公室里所有的人都是不变的,只有一个人是新的。
本质上,你有一个背景,这是背景,还有一个前景。这里,这个人,我们要孤立。我们想确认它是入侵者。我们将在图像处理中使用一种叫做图像分割的技术。本质上,我们要试着把这个人从图像中分割出来这样我们就可以做一些分析。我们要忽略所有常数项,因为这是无关紧要的。
让我们继续,一步步地告诉你我们将如何分割和分析这幅图像。让我们关闭一些窗口。通常分割图像的第一件事就是将图像转换为灰度。你可能会问的第一个问题是,我要怎么做?一种方法是你可以直接到搜索栏。你可以输入灰度。如果我这样做,你会看到一些搜索建议。或者你可以点击Return。你会看到,这里有帮助,你会看到你可以按产品类型分类,提炼。或者您可以向下滚动并开始检查一些函数。 And you'll see here, here's an RGB to gray. So this sounds like what I want. If I click on it, you'll see the description—convert RGB image or color map to grayscale.
这就是我想要的。这里有一个语法示例,您可以看到它的来源,图像处理工具箱导入、导出和转换。这是一种图像类型转换。在我回去使用这个函数之前,我想在更高的层次上展示给你们,如果我点击这里,这是浏览图像处理工具箱所有不同类别函数的一个很好的方法。这也适用于所有其他工具箱。如果你去帮忙,如果你看看所有不同类型的工具箱,你可以得到一些关于如何使用不同功能的非常好的指导。
如果我们回到图像处理工具箱,你会看到它们是如何分类的。你可以看到图像增强函数。你可以点击这里。有对比的调整。如果你想要类型转换,你可以回来导入,导出,转换。这是我们想要的函数,从RGB到灰色。所以帮助是一个很好的资源。你可以使用搜索栏,或者只是浏览和探索。文档中也有很多很好的例子。
所以让我们前进并开始使用该函数。所以我要创造两个新的变量。我要把它称为灰色,所以imgray1。我要使用RGB。而且我点击标签到有点帮助我 - 好的,所以它带来了以RGB为前缀的常见功能。所以我希望RGB变成灰色。而且我将在测试图像和命中选项卡上执行此操作。我想要测试图像1.然后我想创建另一个,图像灰色2,并将其设置为等于RGB灰色,并将其设置为测试图像2。
这是我的两张灰度图。您可以看到,它们现在已填充到工作区中。我可以继续画出来,只是为了确认它们在那里。这是以前的事。让我点击这里。这是后面的。因此,我们肯定在路上。
所以我们在这里。我们基本上是转换成灰度的。现在我们要进入下一个步骤。但在此之前,请记住,如果你在命令窗口中输入,可能会很费力。为了节省时间,我要打开一个我之前写过的脚本。这就是图像检测。
在这里,你会看到我正在阅读图片。因此,请记住,在我之前,我只是在文件浏览器中双击图像,并使用导入向导将其拉入。你也可以在MATLAB中使用这个imread函数。因此,如果单击F1,将显示我们的帮助。你可以看到,这是一个读取图像或图形文件的函数。下面是语法。如果向下滚动,下面是它使用的不同文件类型。因此,这是一种在命令行或脚本内部导入图像的好方法。
所以我要继续清理我们的环境,从头开始运行这个脚本。你可以看到我用黄色高亮显示了这部分代码。这实际上是一个代码部分。如果我点击周围,你可以看到这个黄色区域在移动。这也是MATLAB的一个有趣的方面。您可以使用这些双百分号创建这些代码段。如果我用一个百分号,这只是一个注释。但是如果我使用双倍百分号,我创建了一段代码。
这实际上是一个复杂的断点。黄色区域内的所有东西都是一个单独的执行点。如果我运行这个section,它会运行里面的所有代码。我可以按顺序移动。所以我可以回来运行前面的部分。所以这是一种非常好的迭代和快速收敛的方法。你不需要运行整个文件或整个应用程序像在其他语言中那样,按顺序或时间顺序运行所有东西,这是一个很好的环境处理方法。
让我们一步一步地看一下这个脚本。这是第一部分。我要到编辑器选项卡,点击“提前运行”。让我们运行它。在这里,我们用两个彩色图像填充了我们的工作区。现在我要给他们两个都做一个imshow。在这儿。这是我的遗像。之前。让我们把它们转换成灰色。
这里我们在工作区中还有两张图片,用imshow打印出来。在这儿呢。这就是我们要开始分割图像的地方。回到我们的两个图像,这是灰度图。这是我的before。这是我的。记住,这里有很多常数,对吧?这两张图片的所有背景都是静态的。唯一改变的是我们想要分离或分割的东西。这就给我们带来了另一个简单而有力的细分方法。 And that's background subtraction.
我们要把参考图像从第二张图像中减去它。希望我们能得到这里的不同之处。如果我们回到MATLAB,你会在这一节看到,减去图像,有多种方法来做这个。我在这里做的一种方法,就是运行的方法,我有两张图像,之前和之后。我要用一个减去另一个。我要做一个绝对值来确保没有负数。这只是用了基本的数学。记住,MATLAB把所有东西都看成矩阵。这只是一个简单的数学运算。没有for循环。 There's nothing really tricky. Just by doing a simple subtraction, I'm able to remove the background.
你也可以用减法。所以图像减法也是一个图像处理函数。这只是向你们展示了在MATLAB中有多种方法来做同样的事情。这是一个非常灵活的环境。
所以让我们继续减去图像。所以让我们提前继续这一部分。现在你剩下的 - 所以这非常有趣。所有的背景都变黑了。和我想要分割的事情,你可以看到他开始出现。他有点褪色。但是你可以看到它做得很好。我实际上有intruder突出显示。但我们将不得不做更多的处理,所以我们可以真正使这个更加定义,更容易处理。但我们绝对是在正确的赛道上。
在这段代码中,我们要找出最大的差值。所有这些都是为了找到最高的强度。它会遍历每一行每一列寻找最大的像素强度。如果我们想在下一段代码中看它是什么,这里我们使用imtool来看imagdiff。让我们继续运行这部分。我可以按Control-Enter来运行这段代码。这是我们的图像。我们继续放大一点。
如果我们点击这里的检查像素按钮,这是强度。我可以把它拖过来。我们可以看看这里。我们可以看到,在黑色区域,当然,它接近于零。在这个人身上,你可以看到大约在40到150之间。所以你可以看到强度在哪里。有些人还挺低的。但有些甚至高达150,最高的在256左右,我们离这个距离还很远。
我们要做的是运行这段代码。所以你看到我在这里乱了阵脚。让我们继续寻找最大差异的位置。如果我们运行这个,你会看到这里,这是我的图像。我们画了一个漂亮的小星星,在这里我们有最高的强度。我相信我们在使用imtool的时候看到了。我们看到大约是155。所以这个,本质上,就是标记这个物体的质心或者质心。我们继续,我们已经用过imtool了。让我们继续,移动到阈值区域。
阈值是另一种简单而强大的图像处理技术。本质上,我要做的是把这个灰度图像转换成只有1和0的二值图像。我要做的是创建一个新的变量image thresh。我要取像差l我会说所有强度值大于8的,我要把它变成1。所有小于8的,设为0。所以,这是一个临界值,如果你愿意的话。如果你还记得一些强度,大多数都在20或40甚至更高。然后所有的背景都变成了黑色。所以我们应该会有好的结果。让我们继续运行这一节。 Again, I'm just going to hit Control-Enter.
你可以看到,嗯,现在明显多了。我们的目标,我们的入侵者,在这里,非常突出。这是我们的质心确保我们找到了正确的物体。然而,我们确实有一些随机噪声泄漏出来。所以这可能是由于相机的移动或者背景被减去后留下了一些残余。所以我们要把它清理干净。因为一旦我们进入下一个步骤,我们希望这个图像非常干净。因为要做区域分析或对象分析,所有这些小点,本质上都是小对象。这确实会让我们的一些计算混乱。
让我们继续在图像上多做一些工作。在填充区域这一节中,我们将使用一个名为bwareaopen的函数。所以这个函数实际上是一个形态算子。形态学实际上只是一个关于基于形状的过滤器的花哨的词。这是一种图像处理技术。如果我按F1,这就是我们可以根据形状过滤图像的地方。
在这种情况下,它更灵活一些。我们要在这里输入黑白图像。但是字母p或者输入值是什么,是我们要筛选的对象的大小?面积是多少?所以你要在像素区域中设置你想要屏幕的像素区域。在我们的例子中,我们想说,这是我们的二值图像。我们将把它作为变量传入。我们要保留所有大于等于15像素的区域。低于这个的部分,我们就去掉,然后变成0。这应该能让图像清晰一些。
我们继续运行这部分- control - enter。你会发现它运行得很好。所有的杂音都消失了。我们有对象,主要的对象。看起来像他的手,这可能是他影子的一部分。但除此之外,它还是相当不错的。我们肯定可以用这个。让我们回到这里。
在这一节中,我们将做一个被称为图像叠加的事情。关于这个函数有趣的是,这个函数不是来自MATLAB。它不是图像处理工具箱的一部分。它实际上是我们从文件交换下载的一个实用程序。这是来自我们的用户社区。让我们开始吧,我会告诉你我从哪里得到这个。
这是在MATLAB中心。这是MATLAB的用户社区。在这里你可以找到很多有用的资源,比如代码示例。人们会问问题,讨论很多话题。你也可以得到一些很好的实用工具。这是图像覆盖。如果我点击这个,你会看到一个描述。这只是将一个图像覆盖在另一个图像上。你会得到一个很好的视觉效果。你可以突出任何感兴趣的东西。 And in our case, we want to highlight our intruder. So this is a perfect function for our use case.
所以让我们继续前进并回到Matlab。所以这是我们的图像覆盖功能。你实际上可以看到它。我们下载了它。它也在当前文件夹中。我们打算通过这两张图像。所以让我们继续前进并运行这部分代码控制输入。在这里,我们在这里有我们的形象。你可以看到我们在红色我们的入侵者中突出了。因此,现在这是一种很好的视觉方式,以显示用户或我们将代码与真正改变的代码以及我们在图像内部识别的内容进行分享。 And here's our intruder.
让我们回到这里。我们要做另一个处理步骤。记住,我在测量那个人。我在计算他们有多高。好吧,也许我们想要屏蔽,不要有任何错误的触发,比如说,当一只猫进入视野。这不是我们真正关心的事情。但当有人进来时,我们一定要拉响警报。
所以在这里我们说我们只关心大于80像素的长度或更多像素。所以这里我们将使用一个函数来帮助提取该值。我们将使用称为RegionProps的函数。如果我击中F1,那么你会看到这是来自我们的图像处理工具箱。这是一个非常强大的功能。因为基本上它能做什么是从图像中的对象中提取统计信息。因此,通过传递图像,您可以获得像地区这样的东西。您可以找到质心,直径,像素值,强度,偏心,圆形的东西,周边。所以可以提取很多强大的统计数据。甚至在我们的情况下,我们想要寻找轴长度,所以这个人有多高。
如果我们调用这个函数,我们要在这里存储一些新变量。这里我们要检查并找出所有的主轴长度。我们来比较一下。任何大于80的,我们都要储存起来。如果它大于80,我们会在最后一部分做检查看看我们是否有什么感兴趣的东西以及图像中是否真的有不同的东西。
让我们继续运行这段代码。你会在工作空间中看到,我们填充了一些新变量。这里我们有图像统计和最终图像统计。如果我们打开这些数组,你会看到我有一串长轴,所以有一串长度已经找到了。然而,我们唯一感兴趣的是这个大于80的,107。为了验证过滤是否有效,我们可以看到主轴大于80。我们发现它。这是107。
如果这是正常的,如果我们运行这里的最后一段代码,这就是说如果这个矩阵是空的我们会说没有什么不同。在我们的例子中,有一些东西。所以我们应该能够打印出图像中的东西。让我们运行最后一部分。如果我进入命令窗口,你可以看到这里打印的输出主要长度大于80。它是107年。图像中有一些东西。
我们看到我们的算法现在运行得很好。这是一个很好的阶段,我们可以开始分享它并得到反馈。有很多方法可以共享代码。你当然可以把MATLAB文件分发出去。如果你的同事有MATLAB他们可以运行和测试它。但另一种很好的分享方式是,如果你点击这里的代码,我们就在编辑器窗口。你可以看到我们有一个新的编辑器标签。这就是我在不同区域控制所有步进的那个。但有趣的是,我们还有Publish标签。
这里你会看到,你可以做一些突出显示的事情,在代码上做更多的强调。因为你在MATLAB文件中放入的。m文件,会出现在你的最终报告中。所以你可以做很多额外的注释来提供更多的描述和上下文。
这里,如果我们去发布,让我们继续发布图像检测。本质上,当你这样做的时候,它会运行整个算法。让我们来运行它。现在你得到了一个很好的HTML文件。这份文件现在可以与他人共享。如果您还记得以前,我们创建了那些带有双百分号的代码段——那里的每一个注释现在都成为了这个目录中的一个导航点。这部分叫做读取图像。你会在这里看到它。这是那部分的代码。这是显示的彩色图像。 And you can see the output from that section of code, and so on.
这是记录工作的好方法。您可以很容易地向您的同事展示您是如何逻辑地得出您的解决方案或聚合您的结果的。这是一个很好的形式,不仅是为了分享,也是为了你自己的笔记,帮助你记录你的工作,这是一个很好的分享方式。
现在让我们来看看现场视频。虽然这很有趣——我们使用了一些静态图像。我们认为,算法的关键是什么。现在,我们想进一步扩大规模,以推进我们的入侵者检测系统。所以最重要的部分就是现场视频。所以我们将使用一些低成本的硬件,比如简单的网络摄像头。为了做到这一点,我们将继续验证我们有正确的硬件连接。
如果我们在这里的Home标签并点击附加组件,你会看到这里有一个选择-获取硬件支持包。万博1manbetx点击这里,会出现这个很好的向导。这里,你可以看到我们有选择。我要在网上安装。单击Next。这里是不同的选择。
这里是所有不同类型的硬件目标,你可以直接从MATLAB访问,从ARM处理器,树莓派,BeagleBoard,很多不同类型的输入,如Lego Mindstorm机器人。然后往下滚动,你会看到这里有USB摄像头。如果我突出显示它,你会看到我已经安装了它。它只是问我要不要重新安装。它只是告诉我版本。这就是你继续的方式选择不同的支持包来支持你想要接口的硬件类型。万博1manbetx
所以让我们前进并开始使用视频。所以我将打开我早些时候写过的另一个脚本。所以让我前进并关闭这个。我们将在左侧看到这里,我有这个称为分段下划线fn。所以这一切都是我在前写的相同图像检测算法。唯一的区别是我评论了所有的IM显示。因为我在这一点上不需要调试它。我几乎了解所有步骤都很好地工作。我用imshow来调整我的图像。所以算法现在工作得很好。
我所做的,如果你看顶部,是使用一个关键字function。这使得整个文件更有用了。它的作用是允许我把这个算法称为一个函数。就像我调用RGB到灰色的函数一样,我现在可以调用整个例程作为段下划线函数。很好的是,我不仅可以调用它,我还可以传递输入参数,就像传递图像一样,将RGB转换为灰色。在这种情况下,你可以传入一张之前的,我办公室的参考图像,然后是之后的图像,我们正在寻找的入侵者。
它会运行这个算法。更妙的是,你甚至可以有一个返回值。这里我们要传递回高亮的图像,就是我在文件交换中使用图像覆盖函数的那个。往下看,可以看到我是在哪里做的作业。在我执行图像叠加之后,我把它传递回这里的变量,高亮图像。然后这个函数,或者这个函数被调用的任何地方,都会返回这个高亮的图像。
再说一次,函数非常强大,是让算法更容易访问和使用的好方法。调用这个函数的地方是另一个函数security_cam。下一个函数是安全下划线摄像头。所有这些都是为了设置我从网上下载的网络摄像头作为支持包。万博1manbetx我正在设置。这里,我取了我的参考图像。所以我要在有人进来之前给我的办公室拍张照片。这是我的参考图像或背景图像。这里,我要进入for循环。当我进行循环的每一次迭代时,我将拍摄一个新的快照来寻找入侵者。 And then I'm going to call my segmentation function. I'm going to pass my reference image as well as my newly taken picture, and I'm going to hopefully come back with nothing. But if it does detect an object, it will return it here and will print that out to the display.
这就是全部内容。我在引用我的算法。我把它变成了一个函数。我在这个漂亮的for循环中运行。这里我也做了这个安全函数。我可以到这里的命令行,输入这个。如果我输入security_cam,点击Return,我的实时视频就会运行。
你可以看到我的手被分割得很好。它是用红色标出的。你可以在我的命令窗口看到一些东西正在被检测。但是如果我把我的手移开,你可以看到它又回到了什么都没有的状态。所以这很有说服力。我大大增加了我的数据集。现在我用的是直播视频。
我要做的最后一步是,在算法上加上一个很好的用户界面。所以我创建了它。我已经用真实的视频验证过了。现在我要创建一个漂亮的小用户界面。为了做到这一点,我实际上使用了一种叫做guide的东西。指南,如果你进入我们的搜索,你会看到我在说什么。所以在“帮助”中,你会看到打开一个GUI布局编辑器。图形用户界面是GUI的缩写。这里有不同的方式来构建这些用户界面。
有很多方法可以构建对话框。您可以制作一些非常复杂的ui。所以有一种很好的方法可以建立很好的界面,让你可以与算法进行交互并进行调整。你也可以很容易地分享这个。当你构建这些gui时,本质上,你在创建一个应用程序,当你有这些应用程序时,有各种方式安装它们。你可以把它们作为安装提供给其他有MATLAB的人,这是一个非常好的方式,让你的代码更易于共享,并使你的代码成为一个完整的应用程序。
即使是所有这些小工具,如果我回到MATLAB,好的,让我们继续,给你们看这里创建了什么。这是一个图形窗口。使用指南,打开这个,你会看到我们用了很多实用工具来创建这些对话框,来创建这些图形,你们一会就会看到填充了。你们一开始就看到了。这一切都在运行。我们创建了这些漂亮的滑动条,一个开始和停止按钮,甚至还有一个获取参考图像的按钮,这些都是布局界面的好方法。
这里,我不想用代码让你们陷入困境,但本质上,这是连接到用户界面的函数。所有的代码都在这里。最后,如果我运行这个,你会看到会发生什么我们会得到这个非常好的界面。我可以在这里取我的参考图像。你会看到这是我办公室的照片。这是我的开始按钮。点击开始可以看到,它运行得很好。但这里我有调谐旋钮。所以我可以移动它让它到达正确分割的位置。这里,它实际上并没有选择物体的正确长度。 So let's go ahead and tune this till we get an alert. And now we've essentially tuned it. And we have a really nice working system.
这里我们有一个很好的用户界面。我们的算法在下面运行。我们和它有很好的相互作用。我们也可以和我们的用户分享一个发布的HTML文件来帮助记录你做了什么。让我们继续,回到我们的演讲。
为了总结我们的演示,我们回到典型的技术计算工作流。你们看到了我们是如何访问数据的。首先,我们处理标准JPEG图像。我们使用导入向导导入了它们。我们做了一些开发。后来我们甚至用一个低成本的网络摄像头集成了一些硬件。我们做了算法开发。我们用漂亮的发布函数来分享它。所以我们能够在不同的阶段中移动。你们看到了我们如何使用脚本来帮助自动化。 And in doing so we used MATLAB and some of the functions from the Image Processing Toolbox to make our intruder detection system.
想了解更多关于MATLAB的知识,请访问我们的网站www.tianjin-qmedu.com/matlab。在这里,你会发现许多有用的视频和代码示例,让你开始创建自己的应用程序,并受到启发。如果你需要任何帮助或帮助,当然我们有支持。万博1manbetx而且MATLAB的中央是一个巨大的资源,你就会发现很多专家,从MathWorks以及在我们的社区,帮助回答问题,把伟大的主题,以及共享代码只是为了真正激发,并让您开始您的旅程。
要了解有关图像处理工具箱的更多信息,请访问我们的网站www.mathworks.co m/products/Image。在那里你会发现很多其他的视频和例子,都与图像处理有关。你也可以在右边看到我s manbetx 845的照片。因此,如果您有任何问题,也许您是该领域的新手,只想讨论一些功能,请随时给我发电子邮件。我会尽力回答你。
所以请坚持下去。我们来到本届会议结束。希望你已经学到了一些东西,对Matlab有一个很好的介绍,看到了一些能力以及可能性。请坚持下去。我们有Q&A会议即将到来。所以请输入您的问题。我们会休息一下。然后我们会回来回答你。再次感谢,并在一分钟内见到你。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。