安迪,MathWorks
相机到处都是,甚至在你的手机上。也许你有在工程和科学应用使用相机新的想法,但不知道从哪里开始。虽然图像处理似乎是一个黑色的艺术,有几个关键的工作流程,以学习,将让你开始。
在本次网络研讨会中,我们将探讨使用MATLAB进行图像处理的基本原理。通过几个例子,我们将回顾典型的工作流程为:
不需要MATLAB的以前的知识。
主持人:他拥有乔治亚理工学院(Georgia Institute of Technology)的电气工程学士学位和肯尼萨州立大学(Kennesaw State University)的工商管理学士学位。在加入MathWorks之前,Andy在德州仪器(Texas Instruments)做了12年的嵌入式处理器领域应用工程师,在IntervalZero做了3年的实时软件产品营销经理。
记录:2014年10月15日
您好,欢迎到图像处理一点通网络研讨会。我的名字叫安迪,我在这里The MathWorks公司是一个技术营销经理。图像和视频处理是一个非常受欢迎的领域,你看到它被集成到了很多不同的应用从医疗到机器人,汽车,机器视觉空间,任何东西的。这份名单是相当不已。
不幸的是,这一切整合而来的,是很多挑战。很多人是新的图像处理,因此,我们得到了很多的问题,比如:如何处理所有这些不同的文件格式?如何创建和实际测试我的算法?如何想象,也许找到问题的原因是什么?然后终于,我该如何处理大量的图像和加快我的算法的执行?
在这个网络研讨会上,我们将讨论你在这里看到的前四个主题。所以这次网络研讨会的目标是,我们希望为你们提供一些常见的策略,你们可以把它们应用到非常典型的图像和视频处理工作流程中。有了这些,如果你看到下面这张图,你会觉得这只是一些简单的玩具和糖果。我们会在很多例子中用到这张图。我会有三个主要的例子来给你们讲解。
但是使用这个简单的图像,我们将使用多种处理技术。并通过它的结束,你就可以看到,在右手边,我们怎么可以大大简化图像,真正段,并能够做到的,也许,一些统计分析,得到一些细节出来的图片。
所以,今天的议程是我们要花费一些时间去在一个介绍。我们将通过图像增强。我们会做一些图像分割。然后我们会做图像配准,然后我们将有一个简单的总结。让我们在一个典型的图像和视频处理工作流程。
当然,在一开始,您需要获取数据。这就是我们所说的访问。它可以以文件的形式出现,比如JPEG图像。可以来自其他软件的输出形式。当然,还有硬件,比如相机。这很常见,如果你想在飞行中处理实时图像和视频,这很常见,如果你想在飞行中处理实时图像和视频,这很常见。
一旦你获得你的数据,当然,你会想探索它,也做了一些探索,找出你需要做的创建算法是什么。所以很多的时间将是在这里度过的,实际上,使您的应用程序和算法。最后,你要分享。
所以,你与同事共享,无论是在文档的形式。也许这是图书馆的一种形式,他们将消耗。并且它可以被消耗的第三方软件,你可能会使用到设计最终产品,例如,摄像机,或者一些类型的汽车视觉应用的。
所以,虽然我展示了一个单一的流线型路径,但现实是,这是一个真正的迭代路径。所以,一旦你获得的数据,你可能会开发的算法,然后你要回来,并获得更多一些,增加你的数据集,真正巩固和验证算法。
一旦它被开发出来,你就会去分享它,当然,也会得到反馈。您可能会再次访问它并对其进行迭代,以优化您的应用程序。所以这真的需要自动化。使用MATLAB,您将发现MATLAB不仅是一种语言,而且还是一种脚本语言,因此您将能够使整个过程自动化。
除了MATLAB之外,我们将在所有这些演示中使用图像处理工具箱。有很多函数。有200多种功能供你使用。但在高层次上,你将能够做一些事情,如显示和探索图像。我们将做一些增强、一些图像分析、形态学操作符(这是基于形状的处理,或基于形状的筛选)、图像配准、几何变换和基于区域的处理。
在这些演示中,以及我们在这个网络研讨会中要做的,我们将会涉及很多这些用蓝色高亮显示的主题。这就引出了我们的第一个话题。什么是图像增强?因此,简单地说,这是一个调整图像的过程,使结果不仅更适合显示,而且更适合进一步处理。当你在摄像人的图像中看到下面,你可以做一些事情,比如深度模糊,或者你可以做一些过滤,也就是预处理。这可以是您以后进行更多增强处理或更高级处理的初步步骤。
这就是我们的第一个演示,我们要拍一张陆地卫星的照片。这是巴黎的卫星图像。你看,在左边这里肯定有一些问题。我们看到很多紫色,没有很多对比。右边是我们想要的方向。
所以我们的目标是,导入这幅巴黎地图。我们将纠正差的对比度和不平衡的颜色,使图像,希望,更多的可用性。这是MATLAB。为了不让它太复杂,我只会讲到MATLAB的一些方面,或者说是特性,当我遇到它们的时候。我们继续。在开始图像增强演示之前,我将向您展示一些基本特性。
所以在这里,我们有我们的玩具和糖果,图像就在这里。这是一个JPEG文件。我可以导入到环境中,简单地等于我imread,然后这个模型完成,然后在那里。还等什么,你将看到的是我创造了这个变量一,我导入的图像。你可以在这里看到,它的内部工作区。因此,这是我所有的变量存储。
你会看到它是关于2400按2800 pixeled图像,并有它的三层。为什么有三个层次的原因是有一个红色,蓝色和绿色层,使所有三种颜色。因此,我们可以看到这个图片,只是为了验证它的存在。如果我们点击它,你可以去情节,在这里你可以使用不同的绘图工具。
所以我们可以做一个IM秀。这里,我们有图像。这些是玩具,还有糖果。您可以在命令行中看到输入的内容。因此,如果您喜欢在命令行中操作,您也可以使用该选项。
所以我要使用的另一个工具——让我把这个窗口关闭——就是使用IM工具函数。使用相同的变量,我要点击IM工具。你会看到,它在IM工具中输入了变量i,它看起来像一个类似的窗口,除了这是一个很好的应用程序,它在图像处理工具箱中。
什么是让你访问是一样的东西,比方说我们要测量距离。因此,我可以点击这个标尺,我可以简单地连接并绘制这些距离线。因此,约700个像素长,那车,约266个七个像素宽说的。有多大,这些块糖?因此,这类型的像素信息和测量是非常有帮助的,后来我们就玩一点点这个,因为我们做了一些,也许,基于形状的处理。所以只是一种给你的东西,我们会在后面做一个小小的伏笔。
你也可以做一些更详细的分析。这是检查像素值的按钮。如果我点击它,你会看到——让我把它移到这边——这个小十字准星出现了。这是那个十字准星指向的地方的放大图。我们实际上在这个小十六进制错误上看到像素值,这显示给我们RGB值,或者强度值。
我来放大一下,这样你们就能或多或少地看到发生了什么。你会看到,当我拖动这些准线时,我可以检查准线指向的像素点。这里,你可以看到RGB值很低因为这块糖基本上接近黑色。
所以,当你移动到桌面,这里的接近白色。这就是为什么RGB值高了很多。然后是十六进制的错误是一个阴影绿松石。这里是,基本上为RGB的色值。如此反复,这仅仅是一个探索的图像和真的给你一些策略,你可能希望以后基于也许一些基于形状的处理来解决的非常好的方式,你在这里看到这些颜色。我们要真正做一些基于色彩处理为好。
所以如果我们看第一个,这是一个你会在产物内部找到的例子。我们在这里处理的实际上是多光谱数据。这是一张陆地卫星的图片。如果我向下滚动一点,你会看到我是如何读《想象》的。因为这是多频带数据,我们将使用一个函数,而不是imread,叫做多频带读。
在MATLAB中打开任何你想要的帮助,你可以点击F1,它会打开帮助窗口。你可以看到这是从二进制文件中读取带状联盟数据。这里,它告诉你不同的参数,一个描述,给你展示不同的波段,一个很好的图形。然后这里是语法,告诉你不同的参数是什么,甚至给你一个例子。所以有很多不同的方法来获得帮助。一个是通过点击F1。当然,你可以点击文档里面,或者搜索栏。好吧。
但是让我们继续运行这段代码。所以我们就在这里。我要运行,这里我们说,提前运行下一层。这里是前进按钮。这就是MATLAB的好处,我可以运行所谓的代码段。所以每次你看到这些双百分号,就表示另一个部分。一个百分比符号是注释。MATLAB的妙处就在于你可以不按顺序运行代码只需要移动这些不同的部分。
所以在这里我们在这里本节内。我将继续运行,并前进到下一个。在这里,我们看到我们的地球资源卫星图像的imshow。因此,这是我们之前展示的形象。不是一个真正的伟大的形象。一切看起来的那种紫色。这是一种与工作非常困难。因此,让我们继续前进,并关闭了,让我们试着来分析一下是怎么回事与该图像。
我要用iamhist函数。我把它打开,它会给我一个图像数据的直方图。让我们运行这一节,前进。然后我们会看到,这告诉我们问题来自哪里。我们看这里,所有的数据都聚集在这里,大约50个。这是红色的部分。这就是为什么我们的对比很差。
而对于看数据更详细一点,我们要人在这里做一些事情。我们要实际运行的散点图。原来这就是正在策划红色,蓝色和绿色为我们三维图。因此,这里的所有数据点。你可以看到,它并不难。这意味着,还有,看看是什么问题。在所有三个平面,我们看到的一切都在这里沿着这条线聚集。如此反复,不是真的很棒。你有种想看到一些,就在这里分布,得到一些更大的动态范围,并看到不同的颜色。
因此,让我们继续前进,看看我们如何能够纠正这一问题。如果我们在这里向下滚动,这就是我们要尝试做什么叫做对比度拉伸。所以这是一个用函数调用imadjust,或图像调整。你会看到这里,创下F1,我要调整颜色映射的强度值。
所以你只需通过它在这里,你会向下滚动。下面是它只是另一个例子。我将要传递的真实颜色,然后你会看到,我只是将做一个伸展限制器。你会在这里看到这片极限是什么,该功能。它找到的限制的图像的对比度拉伸。
我们会把它传进去,然后运行它。你可以立刻看到,我们有了一个更好的图像。我们实际上有一些阴影,甚至是深的,深绿色的,一直到一些白色的阴影。这是一张非常漂亮的图片。我们可以对它进行一些处理。我们真的可以利用它。
但我们可以更进一步。如果你看一下,虽然有一些很好的对比,但就颜色而言,还是很柔和的。我们看看能不能让颜色更有活力。所以这是一个伟大的进步,只是使用了一个对比拉伸。我们来看看柱状图,看看为什么会这样。所以你在这里看到,在此之前,记住,所有的东西都聚集在一个狭窄的地带,大约在50。现在,我们看到直方图分布得很均匀,这就是为什么我们可以看到更多的细节。
为了进一步修正颜色,我们要做一件事,叫做去相关拉伸。所以这将加强在高度相关的通道上的分色。还记得之前的散点图吗,所有东西都是带状的,或相关的,在一条线上紧密相连。
所以这个解相关拉伸来继续运行这个,在下一节中,您将看到,再一次,我们不仅有一个好一点的对比差异,现在我们有一个漂亮的动态范围的颜色,从这些漂亮的动态绿色蓝色色调的红色。所以我们有很多可以处理的实际数据。实际上,您可以直接使用图像,或者继续沿着这条路径进行更多的图像处理。
让我们从绘图的角度最后看一下这些数据。看这里,这是散点图。你可以立即看到,我们有一个很好的颜色分布,这就是为什么我们有这样一个动态的图像。
所以刚才总结我们的图像增强例子,你看到我们能够想象,不仅图像,但我们能够在直方图和散点图寻找帮助分析图像中的问题。再此基础上,我们能够做一些性能增强,像对比度拉伸,以及去相关拉伸。因此,我们本质上,从这个说明这里不良形象,是全紫与丰富的色彩深浅,以及正确的对比这个漂亮的动态图像的举动。
因此,这需要现在我们的下一个主题。我们要谈的,什么是图像分割?图像分割是简单地将图像划分为多个部分的过程。而通常情况下,这是一个前景和背景。该方法通常用于帮助识别和隔离对象,以便您可以使用其他功能,从图片中提取有意义的信息。
所以在这里下面,你在这里看到密密麻麻的图像。而我们使用分水岭分割基本上分离,并开始在此创造的形象在这里计数的一些对象。你可以看到,我们分割它,我们有一个很好的二进制图像在这里,我们实际上可以做分析,以甚至这里算多少钱根据大小。
因此,让我们继续前进,进入示范这里。所以,我们要对付我们的玩具汽车和糖果和十六进制的错误形象。而且我们要段和图像分析。我们打算把它变成这个二进制映像这里的一切,我们关心的,然后我们会从中提取一些统计信息。
我们去进取,不断开拓的脚本我之前写的。所以在这里,你可以看到我在做什么你看到我做的更早。我会在玩具和糖果,图像阅读。好吧。让我们继续前进,停靠它们,让它们更容易一点看。而且我要这个工具条最小化,只是做一些更多的空间在这里。
接下来我要做的是把它转换成灰度。我们来转换一下。你看这里,我去掉了所有的颜色。如果我看一下我的工作空间,你可以看到我从三层移到了一层。所以我不再有一个红,蓝,绿的层,只是一个灰度图像,每个像素只有一个强度。
然后我会做的最后一件事是im2bw功能。所以这是一个阈值函数。因此,这是可能的分割的最简单的形式之一,但它也相当强大。如果我们看一下这个function--,让我们继续前进,去我们的文档,im2bw。我会做这种方式。
而我就在这里,在帮助之中。如果我观察这个函数,你可以看到它将灰度图像转换成二进制图像并使用了一个level。所以这个水平值,基本上,设定了截止时间。所以它在0和1之间。然后不管这条分割线在哪里,分割线以上的所有点都是白色的,取值为1,分割线以下的所有点取值为0。这就是形成二值图像的原因。
而且,在我走之前,我就告诉你这里,如果你到文档这种方式,这是导航尽可能为您可能关心的功能的另一个伟大的方式;例如,图像增强。我们在这里,对比度调节。这些都是我们处理与早期的功能。如此反复,而只是另一种方式去帮助,并得到一些实际的指导,只要你实际上可以做。
我们来做一下。一开始我要把这个值设为0。5。我才走了一半。我们要做一个im2bw来创造这个有价值的it。让我们继续运行这个部分。我按ctrl +回车,运行那个section。
你可以看到,让我继续前进,这个失败了,在这里,我们有我们的原始图像。在这里,我们有我们的阈值图像。所以我们做了很好的工作,你可以看到,也可以放到4.5的水平。我们有一些糖果,其中一些相当不错分割。我们有车。然后,他们中的一些,你可以看到,我们开始失去它。因此,这些较浅的颜色没有门槛为好。我们没有选择正确的值。但至少我们得到的边缘。
但有个问题。你可以看到糖果。大部分是分段的,除了这些黄色的。你可能会猜到这是为什么,那是因为汽车,和这些糖果一样,黄色的很接近桌面。所以当你有非常接近的颜色像这样,阈值可能是有点挑战性和棘手的。当你有高水平的对比,基本的阈值很容易做到。但是,当你有接近的颜色时,它们可能只会随着几个不同的强度水平而变化。所以这是非常具有挑战性的。
因此,让我们继续前进,想想这多一点。我们这样做之前,我们仍然可以尝试,但。所以看这个电平值。它我们可以单击鼠标右键,我们可以说,增加值和运行区段。下面是弹出一个小窗口。我可以说,我想用0.1来增加这一点,所以在十位。然后让我们继续前进,并增加与。
你可以看到,当我点击它的时候,你可以看到正在发生的变化。我现在让更多的黑色进来。你可以看到问题是我得到了更多的噪音。然而,有些东西分割得很好。但是我还是不能让这些黄色的糖果更好的显示出来。所以肯定有一些问题。但好的方面是,我能够很快地迭代,看看哪些是有效的,哪些是无效的。0。6很好,但还是不够好。我还是拿不到这些黄色的糖果。
这就引出了一个问题。我们真的需要退一步想想,这幅图有什么独特的属性或特征我们可以加以利用吗?如果你仔细观察,你会发现什么?
一个是物体的大小。与糖果相比,我们的汽车质量相当大。十六进制的虫子在中间。我们有合适的尺寸。我们也可以做一些基于形状的图像处理,对吧?我们有这些非常长方形的物体,有玩具车和十六进制的虫子,但是糖果实际上是圆的。所以我们可以利用基于形状的处理,也许是利用形态学。
最后,我们还可以看看颜色。这里有很多颜色。这是一个被很多人忽视的预处理技术,但它实际上是非常有益的。我们从颜色开始。如果我回到这里,我之前写过这个函数,这叫做颜色空间点m。
如果我打开这件事,让我继续前进,最小化,你可以看到我将刚才读我的糖果想象。但是,这是要做的事情就是我们要打印出色彩空间的每一个。请记住,我说,这是在这里三层。好了,我们要打印出的红色,绿色和蓝色。您可以看到,这里是我在做,以及该地块。
因此,让我们继续前进,在这里运行此节。你可以看到这些容易。这里是我的原始图像,但现在,这里是从颜色平面中的每一个灰度图像的每一个。所以,实际上,我打算做预处理的颜色,然后我要去阈值不同的色彩平面中的每一个。
回到我们的帮助,你可以看到,如果我们到图像处理工具箱,你可以看到有一整个部分是关于颜色的。你可以处理像ICC颜色配置文件,重叠颜色空间。你甚至可以处理HSV的色调。有很多不同的方法可以根据颜色进行处理。
我们回到MATLAB。我要打开另一个文件。这是相似的。它是我前面编写的颜色处理文件或脚本以及阈值处理文件的组合。除了这里,我们只需要读取图像。我们要做的是之前我们画出三个颜色空间时做的。
然后现在,我们究竟要在门槛层的每一个。所以在这里,让我们继续前进,打开这个了,你可以看到我做了一个IM为黑色和白色,im2bw,红色飞机,绿色平面,蓝色平面。我们挑选会得到正确隔离对象,而在背景带来太多的噪音值。而我们所做的是我们总结并添加所有的飞机一起。因此,我们有一个正确,尽量剔出的影像。我的意思是,仍然有一些噪音在这里,但我们会在一分钟内面对这一切。
如果你回头看看我们的脚本,你可以看到发生了什么。本质上,再次,对每个不同的颜色平面进行阈值。这是红色,绿色和蓝色,然后我把它们加起来。我只是把它们放在一起然后把它们画出来。
我下一步做的是,如果你看这里,这很好,但更直观的是用黑色作为背景,白色作为前景。所以我要补充图像。这就是我们要做的。我要调用一个叫做imfilled的函数。所以填充是一个形态函数。记住,我提到过形态学是研究形状的。
这是一个基于形状的过滤器。这样做是为了填满这些洞。所以你在图像中看到的所有这些洞都将被填满,变成固体。我们来做一下。你可以看到,它很好地填满了所有的洞,但是我们仍然有一些随机噪声。我们有这些磨损的边缘。我们有这些小点。所以我们要处理更多的形态运算符,或者基于形态的滤波。
在讲这个之前,我先给你们看一下这个函数,然后我们再讨论它的实际作用。如果我们看这里,下一节将使用一个叫做imopen的形态学操作符。这将打开图像。所有的形态运算符都倾向于使用一种叫做结构元素的东西。
如果我点击F1,你可以看到这个结构元素本质上是你要选择的形状来帮助你进行处理。所以你看到了这个结构元素。你可以像捡球一样捡东西。您可以选择菱形、磁盘、线条、八角形等等。我们要处理一个圆盘。
我们来运行一下。这里,我要开一个口。你可以看到,如果我回到我的图像,你可以看到它被清理了很多。所有的小点都不见了。所有磨损的边缘都清理干净了。这是一个分割得很好的图像。你可以看到——让我先暂停一下——我本可以再多研究一下这个结构元素。
我把它放大,这样你们能看得更清楚。我可以再次右键点击磁盘的大小。这是半径。你可以说,increment value section。我可以说5个。现在如果我点击,我可以让它变成30 35 40。最终,你会发现圆盘的大小会变得太大而无法容纳这些糖果,彩虹糖。
所以你会看到,65,70,75,现在你看到它可能不适合在任何糖果的,所以它不会重新绘制的像素。而现在,它只能适合在十六进制错误和汽车,所以这是我的方式可以处理基于形状或像素密度,尽可能过滤,我可以不断递增,直到所有的十六进制的错误都没有了。
所以,你可以看到一个二进制文件的形态如何运营商是非常强大的。你真的可以做一些很好的清理,以及一些基于形状的过滤。因此,让我们继续前进,其移回那是什么。其实我要糖果的各个部分,以及十六进制的错误。我要改回25和运行区段。所以,我所拥有的一切回来。
然后最后一步,就是我要做的就是我要提取一些细节。所以我要利用函数被调用区域的道具,或区域属性。这是一个非常强大的功能。所以打F1。你可以看到什么使得它如此强大是事实,你可以从一个二进制图像中提取出大量的细节。
你可以得到一些东西,例如面积,一个特定对象有多少像素。你可以找到像质心、中心、偏心距、直径、实际像素的强度这样的东西。你可以从中提取很多东西,甚至是二进制图像中实际物体的数量。用这个区域性质函数可以得到很多简洁的统计量。
我们要运行这个。最后,最后一步是我们要画一些漂亮的边界框并给它们加上标签,还要数一数有多少个物体。你可以看到,我在所有对象周围画了漂亮的边框,方便用户识别。同时,我们数了一下,我们看到图像中有18个物体。
你们可以看到,通过使用玩具和汽车的图像以及MATLAB中的许多特性,我们能够识别出一些独特的属性。首先,我们做了一些基本的阈值。我建议这样做,因为这是一种非常简单的分割图像的方法。你看,我们这里的颜色有些问题,尤其是这些黄色的糖果。他们制造了问题,因为没有足够的对比。
我们做了一些预处理。我们做了一些基于颜色的处理。我们将颜色空间分为红色、蓝色和绿色。现在我们在每个不同的平面上都做了阈值。结果,我们可以把它们加起来,得到一个完整的分割图像,所有我们想要分离的东西。
最后,我们做了一些区域属性函数来收集一些统计信息,来计算对象,并为用户用漂亮的边界框来包围它们,以便于识别。最后我讲了形态运算符。这是一个非常强大的预处理和后处理工具,但你也看到了我如何真正分割一个图像基于大小不同的结构元素。我可以根据形状来过滤。
这就引出了一些其他的东西,其他的实用工具和工具可以帮助你。你看到我在玩imtool。MATLAB中心有很多很棒的应用。这是我们的在线社区,在这里你可以看到很多人在做贡献。例如,这里有很多工具。你可以使用,例如,分割工具,变形工具玩形态学,图像注册应用程序。
因此,这些工具不仅可以帮助您探索,而且可以真正地集中于解决方案。您可以使用不同的参数。这些工具中有很多都会输出MATLAB代码,这样你就可以直接将其集成到你的应用程序中。我鼓励你们去看看这些,你们会在MATLAB中心的文件交换中找到它们。
所以这给我们带来了我们的最后一个话题,那就是图像配准。那么,什么是图像配准?如此简单,这是比对来自不同数据集的图像或者用于视觉比较或计算分析的过程。你可以在这里看到,从下面的图片,你可以使用地图图像配准,从多个卫星收集的可能。也许是同一颗卫星。在右边,我们有三维医学成像,在那里你要注册多个图像,给你一个更全面的数据,所以你可以做一些更强大的处理为好。
所以说到自动图像配准这个话题,实际上有两大类。一个是灰度。这就是它听起来的。实际上,你将会根据强度对两幅图像进行对齐。在这种情况下,可能是调整头骨。你可以看到,这里的亮度很亮,可能另一张图像也有很高的亮度。而在地图上,也正是如此。它将街道,房屋,图像中任何类型的特征都对齐,在这些地方强度会对齐。
其他类型的注册是基于特征的。因此,与基于特征的,这也正是它听起来像。你提取不同的特征;例如,角部。这可能是边缘。可能是在它特定的独特功能。和这两者之间的差是基于强度的配准算法在图像处理工具箱找到。基于特征的,因为功能是计算机视觉的重要组成部分,在计算机视觉系统工具箱中找到。所以,我对例子来说明您是基于强度的自动注册,并从图像处理工具箱的。
在这个演示中,我要给你们展示的是如何使用,在这个例子中,一个网络摄像头图像和一个红外图像。这个例子的目的是将这两幅图像记录在一起因为我们想要测量体温。因为眼睛的内心角落的位置是测量体温最准确的地方,我们想要注册这些图片然后我可以在摄像头图像上运行一个算法,找出眼睛的位置在哪里,然后我就可以关联确切位置的红外图像读取正确的体温。
因此,让我们继续前进,回到MATLAB。所以这里这里是我们的脚本。你会看到我在做什么是我进口的两个图像到我的工作区。我要在红外图像中被读为固定图像。这就是那将保持不动的人。然后,我会在网络摄像头图像的读取。因此,这是一个最运动图像和一个那将尝试移动和线本身对固定图像。
我们来读一下。接下来我要做的是imshowpair。在这里,向你们展示这两张图片。同样,我们想要注册这两个。我们要做的是调用这个函数imregconfig来配置它。
这就是输入。如果我点击F1,你可以看到它只需要一个输入参数。你可以看到,这是模态。那么,这一切意味着,你的图像是从一个单一的相机,或单一的设备捕获的吗?如果是,则使用输入参数monomodal。如果它是从不同的设备上拍摄的,就像我们在这里,一个网络摄像头和一个红外摄像头,然后我们会输入多模式。这就是我们的输入参数,是多模态的。你可以运行这个。
然后,我们将在注册做我们的第一次尝试。所以我们要使用imregister功能。你可以在这里看到它会做基于强度的图像配准。的第一件事情,变换类型,我们打算先挑,简直是翻译。等所有的手段,它会移动的运动图像中的XY方向,看它是否能够对齐两个。
我们来运行一下。你可以看到,这是我们的结果。这里,我们用假颜色做了一个imshowpair。我们把它们重叠起来。这至少给了你一些好看的颜色来看看发生了什么。你可以看到它在右边做得很好,但是肯定有一些问题。你可以看到这里的重影,甚至肩膀都没有对齐。
让我们从另一个角度来看。我们用混合色代替伪色。这给了我们一个更好的视角。你可以看到这里实际上有缩放的问题。所以它在右边是对齐的,但是在左边,你可以看到其中一个图像明显比另一个大。
因此,简单的翻译,默认转换,是行不通的。因此,让我们继续前进,改变的东西。因此,我们要改变转换类型仿射。如果你在这里向下滚动,只是提醒你那是什么。所以我们用翻译。没有工作。
仿射更先进。这将轮换使用,以及将要变化的规模和一些纯粹的为好。因此,让我们继续前进,运行,看看会发生什么。所以你在这里看到,哦,它得到更好一点。因此,我们有没有头部周围的很多重影,但我们仍然在这里有在脖子和耳朵的问题。就连肩膀似乎断了不少。但是你看到的图像旋转。所以这部分工作。
我们越来越近了,但让我们试试别的。让我们来看看,如果我们可以尝试不同的变换。我们要试试这个相似变换。和一切仅仅是一个额外的变化。这将处理不反光的相似性。但它仍然会做平移,旋转和缩放,但它不会与纯粹的玩。这是稍微简单一些。
我们来试试这个。这是结果。你可以立刻看出这是一个很好的配准。所以你看,头部对齐得很好。你看肩膀。这里有一点差距,但说实话,这是我们真正想要的,我们希望眼睛能非常准确地对准。因为我们想要检测眼睛的位置,这样我们就可以准确地读出体温。
因此,这里的最后一步是我们将使用来自计算机视觉系统工具箱的功能,这是一个级联的对象检测器。如果你看看这里,如果我打的F1,你看到它的使用维奥拉 - 琼斯算法,这是任何处理将面临着巨大的算法。而且不只是检测其中的脸都是,但它有助于检测面部特征,如眼睛,鼻子,嘴巴,上半身。
你们可以看到,我们要找的是这对眼睛。如果我们继续运行这部分,然后我们要计算眼睛附近的温度。这就是它要转换的地方。这里我们要做的是嵌入温度然后做一个文本插入器把它写在屏幕上这样用户很容易看到。回到我们的图像,这里我们有一个很好的注册图像在眼睛周围有一个很好的边界框。你看这里的温度读数是98华氏度,这是完全正常的。这个人没有发烧。
总结演示,你看到我们是如何获得的图像,红外线和摄像头的标准图像。我们之前和我们整个算法的过程可视化的数据。我们使用了一个自动图像配准来对齐图像。然后终于,一旦对齐,我们采用特征检测,使用计算机视觉系统工具箱中的维奥拉 - 琼斯探测器。然后终于,我们找到了相对温度,我们写了用户的图像上。
而对于更多的信息,下面一些重要的资源。首先,我们有一个产品页面。我们也有史蒂夫的博客,史蒂夫·埃文斯,我们与图像处理相关的技术专家之一,作者这个博客。而且有很多伟大的有趣的话题出现。然后书,明智的,如果你是新的图像处理,数字图像处理利用MATLAB,也是Steve Evans的合著者,是学习图像处理的关键概念以及如何在MATLAB中实际执行的一个很好的资源。
然后终于,一个产品试用,你可以尝试很多你今天看到的例子,以及与自己的算法实验。这给我们带来了我们的网络研讨会结束。首先,我只想说谢谢你的时间,并希望您发现此届有益的,也许你带走了一些新的技术或想法,你可以在自己的图像和视频处理工作流程执行。再次感谢。
你也可以从以下列表中选择一个网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。
本网站使用Cookies来改善您的用户体验,个性化的内容和广告,并分析网站流量。通过继续使用本网站,您同意我们使用Cookie。请参阅我们的隐私政策要了解更多关于cookie和如何更改设置。