介绍MATLAB与图像处理工具箱
本课程是对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矩阵。为了节省时间,这里我要做一些自动补全。如果我点击回车,你会看到它是一个简单的3乘3矩阵。你会看到中间是1和0。我们可以把它画出来。如果我们往下看这个工作区,让我把它打开。
我之前没有展示过这个,但现在我们有了一些更有趣的数据,你可以点击右键。我还可以提取更多变量,比如标准差,均值,中位数。因此,当这个矩阵变得更大更复杂时,您实际上可以提供一些有趣的属性,以便在工作区中显示。
现在我们要画出来。如果我把它高亮,然后到绘图选项卡,你会看到所有与这个数据类型相关的绘图。在我们的例子中,我们希望将其视为图像。我可以用imshow。这相当于图像界的printf。您只是在偷看或查看值。但是我想使用图像工具,或者imtool,因为这是一个非常小的图像。正如您将看到的,这个图像工具允许我放大。
这里我放大图像。你不会看到什么有趣的东西。但是你可以用图像工具做一些事情,比如测量。你可以看到我可以测量这个黑色的小方块。大概是1.39像素宽。我可以使用对比。我可以裁剪图像。但有趣的是——让我把它调整一点——我可以点击这里的这个按钮来检查像素值。如果我点击它,它会显示这就是我的矩阵。所有不同的元素,这里所有的1都是白色的。 And the center is 0, which is black. So that's essentially a picture. It's not a very interesting one. But nonetheless, my little matrix is a picture.
我们开始吧。我现在要做一些运算。记住,我提到过MATLAB把所有东西都当作二维数组或矩阵来处理。你可以对整个数组进行操作。这里我们要进行一些逻辑运算。例如,我要创建另一个矩阵- 2。我设这个等于矩阵1中所有小于1的项。
这里我要做的是,本质上,我创建了逆矩阵。这里,原来是1的现在都是0。所有的0现在都是1。我也可以把这个打印出来。我要回顾一下我的历史。我要打印出矩阵2。这里——让我们放大——是我的图像。你可以看到这是倒数。现在中间是白色的。是1。 All the surrounding pixels are black, because they're 0.
现在你可以看到我用MATLAB进行了很多交互。我输入了很多命令。虽然这一开始很好,但这可能会有点费力。当你的命令越来越密集,你想做更多的交互,你可能想转移到一个叫做脚本的东西。让我给你们展示一种方法如何得到它或者如何过渡到它。
如果我们去到命令历史记录,你可以看到我在命令窗口输入的所有东西,自从我打开这个MATLAB会话,我已经在这里捕获了。你可以说,好的,我想要捕捉这个。我按住Control键并开始高亮显示我想要的所有命令。我在这里创建了一些矩阵,叫做imtool。我可以右键点击这里。我可以求出这部分的值。这样我就能重播历史上的一切。或者我可以右键点击并创建脚本。
它打开了这个编辑器窗口。在这里你可以看到我输入的所有命令。我可以挽救它。例如,我可以保存并创建一个测试脚本。然后将所有的脚本标记为MATLAB的。m。这是我的剧本。我可以清空我的工作空间。我可以重新运行我的脚本只需要到上面的编辑器选项卡,点击运行。实际上,这是所有的变量。它们都被填充了,用我的矩阵创建了,也用imtool发射了。 And here's my little image where I can actually zoom in and see.
因此,现在转移到一个使用脚本的环境是一个很好的方法,在那里可以进行迭代。你可以调试它。你可以省下钱,让自己更有效率。所以命令窗口很好。但是当你想要变得更加自动化并保存这些内容并进行迭代时,我建议你转向脚本。
让我们继续,继续我们的图像处理例子。让我继续清理一下环境。现在,我们的图像处理例子,如果你看左边这里,我还没有给你们展示这个。这是文件夹浏览器,文件浏览器。这里我们可以看到不同的文件。我们可以导航到文件系统中的任何文件夹。这是我们的两张测试图片。让我们继续,现在将它们导入到工作区中。
如果我们双击测试图片1,我们会看到导入向导出现。这是一张JPEG图片。这其实很简单。它只告诉了我名字。它告诉我这是一个266 * 484像素的图像。它有三层。这是三层的原因,上面写着有R, G, b,红,蓝,绿三层。我们将继续,通过单击Finish将其导入到工作区中。但我应该指出,这个导入向导将根据您的数据类型自定义自己。例如,如果您有表格数据或其他类型的数据格式,您将看到帮助您控制如何以及导入到工作区中的内容的选项。 So just remember the import wizard will customize based on your data type.
让我们继续,在这里单击Finish。然后你会看到我们的测试图像填充在那里,测试图像1。让我们继续导入第二张图片。这就是。然后我们点击Finish。这里我们有两个图像。让我们继续并预览它们,以确保它们被正确地导入到环境中。如果我们点击其中一个,进入“情节”选项卡,你会看到任何相关的情节都会出现在这里。我们可以做一个简单的表演。这个,类似于printf。 We're just looking at that variable.
看,没有什么有趣的。这是我的办公室。就像你现在看到的,它相对比较干净。但你看,没什么有趣的。这里没有入侵者。一切看起来都很好。但是如果我们测试图像2,然后我们使用图像工具。我想给你们看一些有趣的东西。这是我们办公室的照片。但里面有人。 So we have someone here.
这很有趣。使用图像工具,我们可以开始做一些预处理或开始分析数据。例如,我们可以点击这个小标尺。我可以测量这个人有多高?哦,大概有150像素高。这在以后会很重要。因为我们可能想做一些基于长度的过滤,也许确保我们检测到的是一个人,而不是某人的宠物。以上就是快速测量的方法。我删掉这个距离工具。
但你也可以做一些事情,比如裁剪图像。你可以回到这个检查像素值。这里我们看到像素区域。这一次,让我继续放大,以便您能看得更清楚一些——现在它更有趣了。当我移动这个小查看窗口来查看像素区域时,这里是红色,蓝色和绿色的强度级别。为了制作这个红色的袋子,你可以看到制作这个颜色所需要的值。如果你看这里的黑色部分,你会发现它基本上都接近零。然后如果你靠近墙壁,它的强度都非常高,接近200,256,这是最高的,这基本上是纯白色的内部图像。这是很好的信息,这很重要因为你以后可能会想做基于颜色的处理,这是另一种分析数据的方法看看你将来想做什么类型的处理。
但在我们的例子中,这更直接一些。如果我回到我的另一张图片,让我关闭这个像素区域。我去拿我之前的。在我们的例子中,我们要做的是找出什么时候这里有入侵者。如果你看这两张图片,你会发现有很多的一致性。办公室的所有东西都是不变的,除了人是唯一的新东西。
这样你就有了一个背景——这是背景——和一个前景。所以这里,我们要分离这个人。我们要确定它是入侵者。我们将使用图像处理中的一种技术叫做图像分割。所以本质上,我们要试着把这个人从图像中分离出来这样我们就可以做一些分析。我们要忽略所有的常数项,因为这无关紧要。
让我们来指导你们如何分割和分析这张图像。我们来关上这里的一些窗户。通常分割图像的第一件事是你要把图像转换成灰度。你可能会问的第一个问题是,我要怎么做?一种方法是你可以直接到上面的搜索栏。你可以输入灰度。如果我这样做,你会看到一些搜索建议。或者你可以按回车键。你会看到-这里有帮助-你会看到你可以分类,根据产品类型提炼它。或者你可以向下滚动,开始检查一些函数。 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到灰色。所以帮助是一个很好的资源。你可以使用搜索栏,也可以直接导航和探索。文献中也有很多很好的例子。
让我们开始使用这个函数。我要创建两个新变量。我将它命名为image gray, imgray1。我将使用RGB。我按Tab来帮助我,它会弹出带RGB前缀的常用函数。我想让RGB变成灰色。我在测试图像上这样做,然后按Tab键。我想要测试图像1。然后我想创建另一个,图像灰度2,设这个等于RGB灰度,设这个为测试图像2。
这是我的两张灰度图。您可以看到,它们现在已在工作区中填充。我可以把它们画出来验证一下。之前。我点这里。这是后。所以我们肯定在路上了。
所以我们在这里。我们基本上被转换成灰度。现在我们要进行下一步。但在我这么做之前,请记住,如果你是在命令窗口中输入,这可能会很费力。为了节省时间,我将打开一个我之前已经写好的脚本。这就是,图像检测。
这里你会看到我在阅读图片。记得之前我只是在文件浏览器中双击图片,然后使用导入向导把它们拉进来。你也可以在MATLAB中使用这个imread函数。如果我点击F1,这会打开帮助。你可以看到它是一个读取图像或图形文件的函数。这是语法。如果你向下滚动,这里是它可以处理的不同文件类型。这是在命令行或脚本中导入图像的好方法。
所以我要清理我们的环境重新开始运行这个脚本。你可以看到我用黄色高亮显示了这部分代码。这实际上是一个代码部分。如果我点击周围,你可以看到这个黄色区域在移动。这也是MATLAB的一个有趣的方面。您可以用这些双百分号创建这些代码部分。如果是百分号,那就是注释。但是如果我用双%号,我创建了一段代码。
这本质上是一个复杂断点。黄色区域内的所有东西都是一个执行点。如果我运行这部分,它会运行里面的所有代码。我可以把它移出原来的顺序。所以我可以返回来运行前面的部分。所以这是一个非常好的迭代和快速收敛解决方案的方法。你不需要运行整个文件或整个应用程序不需要像在很多其他语言中那样按顺序或时间顺序运行所有东西,这是与环境合作的好方法。
让我们继续,一步一步地检查这个脚本。这是第一部分。切换到编辑器选项卡,点击提前运行。让我们继续运行它。在这里,我们用两张彩色图片填充了我们的工作区。现在我要给他们两个做一个印象表演。在这儿。这是我的效果图。之前。让我们把它们转换成灰色。
现在我们在工作区中又有了两张图像,用imshow将它们打印出来。在这儿呢。这就是我们要开始分割图像的地方。回到这两张图,这是灰度图。这是我的以前。这是我的。记住,这里有很多常数,对吧?两张图片的背景都是静态的。唯一变化的是我们想要分离或分割的东西。这就给我们带来了另一个简单而强大的分割方法。 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.
你也可以用imsubtract。图像减法也是一个图像处理函数。这只是告诉你们在MATLAB中有很多种方法来做同样的事情。这是一个非常灵活的环境。
我们来减去图像。让我们提前运行这一部分。剩下的是什么,这很有趣。所有的背景都变黑了。我想要分割的东西,你可以看到它开始出现了。他有点憔悴了。但是你可以看到它做得很好。我把入侵者高亮显示了。但是我们要多做一些处理这样我们才能让它更明确更容易处理。但我们的思路绝对是对的。
在这部分代码中,我们要找到最大的差值位置。所以我们要做的就是找到最高的强度。它将遍历每一行和每一列并寻找最大的像素强度。如果我们想在下一段代码中看看这是什么,这里我们用imtool来看这里的imagediff。让我们运行这一部分。我可以按ctrl - 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。这应该能让图像清晰一些。
然后运行这个section-Control-Enter。你会发现它运行得很好。所有的随机噪音都消失了。我们有一个物体,主要的那个。看起来像他的手,这可能是他影子的一部分。但除此之外,它还是很不错的。我们肯定可以用这个。让我们继续,回到这里。
在这一节中,我们要做的是图像叠加。有趣的是这个函数不是来自MATLAB。它不是图像处理工具箱的一部分。它实际上是我们从File Exchange下载的一个实用程序。这是来自我们的用户社区。世界杯预选赛小组名单让我们继续,我来告诉你我在哪里得到这个。
这是MATLAB中心。这是我们所有MATLAB的用户社区。世界杯预选赛小组名单在这里您可以找到许多很好的资源,比如代码示例。人们会问问题,讨论很多话题。但你也可以得到一些很好的工具。这是图像覆盖。如果我点击这个,你会看到一个描述。这只是简单地将一个图像覆盖到另一个图像上。你会得到非常清晰的视觉效果。你可以突出任何感兴趣的东西。 And in our case, we want to highlight our intruder. So this is a perfect function for our use case.
让我们继续回到MATLAB。这是我们的图像叠加函数。你可以看到它。我们下载它。它也在当前文件夹中。我们要传递这两张图像。让我们继续运行这部分代码- control - enter。这是我们的图像。你可以看到我们用红色标出了入侵者。这是一种很好的可视化方式向用户或任何与我们共享代码的人展示真正改变了什么以及我们在图像中识别了什么。 And here's our intruder.
我们继续,回到这里。我们再做一步处理。记住,我是在测量那个人。我在计算他们有多高。好吧,也许我们想要屏蔽掉,没有任何错误的触发,比如说,当一只猫进入视野时。这不是我们真正关心的事情。但是当有人进来的时候,我们一定要拉响警报。
所以这里我们说我们只关心长度大于或等于80像素的东西。这里我们将使用一个函数来帮助提取那个值。我们将使用一个名为regionprops的函数。如果我点击F1,你会看到这来自我们的图像处理工具箱。这是一个非常强大的函数。因为本质上它能做的是从图像中的物体中提取统计数据。通过传递图像,你可以得到像面积这样的东西。你可以找到质心,直径,像素值,强度,偏心率,物体的圆度,周长。因此,可以提取很多强大的统计数据。即使在我们的例子中,我们想要寻找坐标轴的长度,也就是这个人的高度。
如果我们调用这个函数,我们会在这里存储一些新变量。这里我们要遍历并找出所有主要轴的长度。我们将比较它们。任何大于80的数,我们都要存储它们。如果它大于80,我们将在最后一节中进行检查看看我们是否有感兴趣的东西以及图像中是否真的有什么不同。
让我们继续运行这段代码。你会看到在工作区中,我们填充了一些新变量。这里我们有我们的image stats和image stats final。如果我们打开这些数组,你会看到我有一堆主轴,所以有一堆长度。然而,我们唯一感兴趣的是这个超过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选项卡,点击add-ons,你可以看到这里有一个选择——获取硬件支持包。点击这里,会弹出一个漂亮的向导。在这里,你可以看到我们有选择。我要从网上安装。单击Next。这里是不同的选择。
这里是所有不同类型的硬件目标你可以直接从MATLAB中访问,从ARM处理器,树莓派,BeagleBoard,很多不同类型的输入,如用于优秀机器人的乐高头脑风暴。然后向下滚动,你会看到这是USB网络摄像头。如果我选中它,你会看到我已经安装了它。它只是问我是否要重新安装。它只是告诉我版本。这就是你如何继续,选择不同的支持包来支持你想要连接的硬件类型。
让我们开始处理视频。我要打开我之前写的另一个脚本。让我把这个关闭。我们可以看到左边有个分段下划线fn。这就是我之前写的图像检测算法。唯一的区别是我注释掉了所有的imshow。因为我现在不需要再调试它了。我知道所有的步骤都运行得很好。我用了很多imshow来调整我的图片。这个算法现在运行得很好。
我所做的,如果你看顶部,是使用一个关键字函数。这样做的目的是让整个文件更有用。它允许我把这个算法称为一个函数。和我调用RGB to gray函数的方法一样,我现在可以调用整个程序作为分段下划线函数。我不仅可以调用它,我还可以传入输入参数就像传入图像一样将RGB转换为灰色。在这种情况下,你可以传入,一张我办公室的参考图片,然后是一张我们正在寻找入侵者的图片。
它将运行算法。好的是你甚至会有,或者你可以有,一个返回值。这里我们要传回高亮的图像,我用了文件交换中的图像覆盖功能。向下滚动这里,可以看到我在哪里赋值。在我完成图像叠加后,我把它传递回变量,高亮图像。然后这个函数,或者这个函数被调用的地方,会返回这个高亮显示的图像。
所以,函数是非常强大的,是使你的算法更容易访问和使用的好方法。调用这个函数的地方是另一个叫security_cam的函数。安全下划线摄像头是我的下一个功能。所有这些都是设置网络摄像头我从网上下载的一个支持包。我正在准备。这里,我取我的参考图像。所以我要在别人进来之前给我的办公室拍张照片。这是我的参考或背景图像。这里,我要进入一个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,然后回车,我的直播视频就开始运行了。
你可以看到我的手被分割得很好。用红色标出。实际上,您可以在我的命令窗口中看到正在检测到一些东西。但是如果我把我的手移开,你可以看到它又变回了什么都没有。所以这真的很有说服力。我大大增加了我的数据集。现在我在做视频直播。
我要做的最后一个步骤是在我的算法上加上一个漂亮的用户界面。所以我创造了它。我已经用真实视频验证过了。现在我要创建一个漂亮的用户界面。为了做到这一点,我实际上使用了一种叫做指南的东西。导读,如果你在这里搜索,你就会明白我在说什么。在帮助中,你会看到打开一个GUI布局编辑器。图形用户界面就是GUI的简称。你会看到有不同的方法来构建这些用户界面。
这就是构建对话框的方法。你可以制作一些非常复杂的ui。所以有一种很好的方法来构建很好的接口,让你可以与算法交互,并对其进行调整。它还能让你轻松地分享这些信息。当你构建这些gui时,本质上,你是在创建一个应用程序。当你有这些应用程序时,有各种各样的方式来安装它们。你可以把它们作为安装提供给其他有MATLAB的人,这是一种很好的方式让你的代码更易于共享让你的代码成为一个完整的应用程序。
即使是所有这些小工具,如果我回到这里的MATLAB,好,让我们继续,让你们看看这里创建了什么。这是一个图形窗口。使用guide,打开这个,你会看到我们用了很多实用工具来创建这些对话框,来创建这些图表,你们马上就会看到这些图表。你们一开始就看到了。这都是跑步。我们创建了这些漂亮的滑动条,一个开始和停止按钮,甚至是获取参考图像的按钮,这是布局界面的很好的方式。
这里,我不打算用代码让你们陷入困境,但本质上,这是连接到用户界面的函数。所有的代码都在这里。在最终的结果中,如果我运行这个,你会看到会发生什么我们会得到一个非常好的界面。我可以把参考图像放在这里。你会看到那是我办公室的照片。这是我的开始按钮。如果我点击开始你可以看到,它运行得很好。但这里我有一个调谐旋钮。所以我可以移动它让它被正确分割。这里它并没有选择物体的正确长度。 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.ru-cchi.com/matlab。那里有很多有用的视频和代码示例,可以帮助您开始创建自己的应用程序并获得灵感。如果你需要任何帮助,我们当然会支持你。但MATLAB Central也是一个很好的资源,在那里你可以找到很多专家,无论是来自MathWorks还是我们的社区,他们都在帮助你回答问题,提出很棒的话题,以及分享代码,只是为了真正激励你,让你开始你的旅程。世界杯预选赛小组名单
要了解更多关于图像处理工具箱,请访问我们的网站www.mathworks.co m/products/ Image。2022世界杯八强谁会赢?在那里你会找到很多其他的视频和例子,都和图像处理有关。你们也会在右边看到我的照片。所以如果你有任何问题,也许你是这个领域的新手,只是想讨论一些功能,请随时给我发邮件。我会尽我所能回答你。
所以请留下来。这次会议即将结束。希望你们学到了一些东西,对MATLAB有了很好的介绍,看到了一些功能和可能性。请不要走开。接下来是问答环节。所以请输入你们的问题。我们休息一会儿。然后我们会回来为你们解答。再次感谢,我们一会儿见。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。