安迪,MathWorks
摄像头无处不在,甚至在你的手机里。你可能有一个在工程和科学应用中使用你的相机的新想法,但不知道从哪里开始。虽然图像处理看起来像是一种魔法,但是有一些关键的工作流程可以帮助你开始学习。
在本次网络研讨会中,我们将探讨使用MATLAB进行图像处理的基本原理。通过几个例子,我们将回顾典型的工作流程为:
不需要有MATLAB的基础知识。
关于主讲人:安迪在”持有学士学位来自佐治亚理工学院和学士学位电气工程在企业从肯尼索州立大学。在加入MathWorks公司之前,安迪花了12年的现场应用工程师专注于德州仪器嵌入式处理器,以及3年的产品营销经理的IntervalZero实时软件。
您好,欢迎到图像处理一点通网络研讨会。我的名字叫安迪,我在这里The MathWorks公司是一个技术营销经理。图像和视频处理是一个非常受欢迎的领域,你看到它被集成到了很多不同的应用从医疗到机器人,汽车,机器视觉空间,任何东西的。这份名单是相当不已。
不幸的是,所有这些集成都带来了许多挑战。很多人对图像处理都是新手,因此我们会遇到很多问题,比如:如何处理所有这些不同的文件格式?我如何创建和测试我的算法?我如何形象化,也许能找到问题的原因?最后,如何处理大的图像并加快算法的执行速度?
在这个网络研讨会上,我们将讨论你在这里看到的前四个主题。所以这次网络研讨会的目标是,我们希望为你们提供一些常见的策略,你们可以把它们应用到非常典型的图像和视频处理工作流程中。有了这些,如果你看到下面这张图,你会觉得这只是一些简单的玩具和糖果。我们会在很多例子中用到这张图。我会有三个主要的例子来给你们讲解。
但是使用这个简单的图像,我们将使用几种处理技术。到最后,你们将会看到,在右手边,我们如何极大地简化图像并真正地分割它并且能够做一些统计分析来从图像中得到一些细节。
今天的议程是我们要花点时间来复习一下介绍。我们将进行图像增强。我们会做一些图像分割。然后我们会做图像注册,然后我们会有一个简短的总结。让我们回顾一下典型的图像和视频处理工作流。
当然,在一开始,您需要获取数据。这就是我们所说的访问。它可以以文件的形式出现,比如JPEG图像。可以来自其他软件的输出形式。当然,还有硬件,比如相机。这很常见,如果你想在飞行中处理实时图像和视频,这很常见,如果你想在飞行中处理实时图像和视频,这很常见。
一旦你获得了你的数据,当然,你会想要探索它并且做一些发现,找出你需要做什么来创建那个算法。所以很多时间将会花在这里,实际上,制作你的应用程序和你的算法。最后,你要分享它。
因此,您将以文档的形式与同事共享。也许这是他们将要使用的一种库的形式。它可以用于第三方软件,你可以用它来设计一个最终产品,例如,一个摄像机,或者某种汽车视觉应用。
虽然我展示了一条流线型的路径,但实际上这是一条迭代的路径。所以一旦你获得了数据,你可能会去开发算法,然后你会回来获取更多的数据,增加你的数据集来巩固和验证你的算法。
一旦发达,你要分享,当然,得到的反馈。你可能打算来上回和迭代优化您的应用程序。因此,这确实需要实现自动化。有了MATLAB,你会发现,MATLAB不仅是语言,但它也是一种脚本语言,所以你就可以自动完成整个过程。
我们将使用整个除了MATLAB所有的这些示威活动是什么图像处理工具箱。所以有很多的功能。有在您的处置200的功能。但在较高的水平,你就可以做的事情一样显示和探索的图像。我们会做一些增强,一些图像分析,形态学算-这是基于形状基于形状的处理,或过滤的图像配准,几何变换,并且基于区域的处理。
而在这些演示,以及我们将在本次网络研讨会中,我们会涉及很多的这些主题以蓝色高亮显示。所以这给我们带来了我们的第一个话题。什么是图像增强?如此简单,这是调整图像,使得结果更不仅适于显示,而且还用于进一步处理的过程。所以,当你的相机的人图像中看到了,你可以做这样的事情深模糊,或者你可以做一些过滤,否则称为预处理。这可以是一个初步的步骤,你以后怎么办更多增强的处理或更高级的处理。
这样把我们带到我们的第一个示范,我们实际上是要采取陆地卫星图像。因此,这是巴黎的卫星图像。而你在左边看到有肯定这里的一些问题。我们看到很多紫色的,而不是大量的对比。在右边的是我们想开车朝。
所以我们的目标是,导入这幅巴黎地图。我们将纠正差的对比度和不平衡的颜色,使图像,希望,更多的可用性。这是MATLAB。为了不让它太复杂,我只会讲到MATLAB的一些方面,或者说是特性,当我遇到它们的时候。我们继续。在开始图像增强演示之前,我将向您展示一些基本特性。
这里,我们有玩具和糖果的图像。它是一个JPEG文件。我可以将它导入到环境中,就像I = imread一样,然后这个模型就完成了。你会看到我创建了这个变量I,我导入了图像。你可以看到,它在工作区里面。这就是所有变量的存储位置。
你会看到这是一张2400×2800像素的图片,有三层。之所以有三层是因为有一个红层,一个蓝层,一个绿层,三种颜色。我们可以看到这个图像,只是为了验证它在那里。如果我们点击它,你可以去绘图,这里是你可以使用的不同的绘图工具。
因此,我们可以简单地做一个IM表演。而在这里,我们有图像。因此,这里有玩具,还有糖果。您也可以在输入了什么命令行看到。所以,如果你喜欢在一个命令行操作的事情,你有这样的选择也是如此。
所以我要使用的另一个工具——让我把这个窗口关闭——就是使用IM工具函数。使用相同的变量,我要点击IM工具。你会看到,它在IM工具中输入了变量i,它看起来像一个类似的窗口,除了这是一个很好的应用程序,它在图像处理工具箱中。
这就给了你一个机会,比如说我们想测量距离。我可以点击这个标尺我可以简单地连接并画出这些距离线。那辆车大概有700像素长,266 7像素宽。这些糖果有多大?所以这种像素信息和测量是非常有用的,我们稍后会用到它,因为我们会做一些,基于形状的处理。给你们一点铺垫,让你们知道我们之后要做什么。
而且,你可以做这样的事情一些更详细的分析。因此,这里的按钮,检查像素值。如果我点击的是,你会看到,让我动这个过度时,会出现这个小十字线。这里是什么准星所指向的变焦。实际上,我们看到这个小六角错误的像素值,这是我们展示的RGB值,或强度值。
我来放大一下,这样你们就能或多或少地看到发生了什么。你会看到,当我拖动这些准线时,我可以检查准线指向的像素点。这里,你可以看到RGB值很低因为这块糖基本上接近黑色。
所以当你移动到桌面,这里更接近白色。这就是为什么RGB值要高得多的原因。十六进制甲虫是绿松石色的。这是那个颜色的RGB值。这是探索图像的一种很好的方式也给了你们一些策略你们以后可能会想要处理基于一些基于形状的处理,你们可以看到这些颜色。我们也会做一些基于颜色的处理。
所以如果我们看第一个,这是一个你会在产物内部找到的例子。我们在这里处理的实际上是多光谱数据。这是一张陆地卫星的图片。如果我向下滚动一点,你会看到我是如何读《想象》的。因为这是多频带数据,我们将使用一个函数,而不是imread,叫做多频带读。
并拉起帮助任何东西,你可能里面MATLAB的希望,你可以打F1,并且简单地说,它会弹出帮助窗口。你可以看到这是从二进制文件中读取带状联盟间的数据。所以在这里,它会告诉你不同的参数,描述,展示你在这里不同的乐队,一个漂亮的图形。然后这里是语法和告诉你什么是不同的参数,甚至给你一个例子。所以很多不同的方式来获得帮助。一个是刚刚通过点击F1。当然,你可以点击里面的文档,或在这里搜索栏为好。好的。
但是让我们继续运行这段代码。所以我们就在这里。我要运行,这里我们说,提前运行下一层。这里是前进按钮。这就是MATLAB的好处,我可以运行所谓的代码段。所以每次你看到这些双百分号,就表示另一个部分。一个百分比符号是注释。MATLAB的妙处就在于你可以不按顺序运行代码只需要移动这些不同的部分。
所以我们在这部分的内部。我要继续前进,跑到下一个。这里我们看到的是陆地卫星图像的影像。这是我们之前展示的图像。不是很好的图像。所有东西都是紫色的。这是一个很难处理的问题。让我们把它关掉,试着分析一下这幅图是怎么回事。
所以我想使用iamhist功能。所以,这是什么 - 我只是打开它,它只是要给我的图像数据的直方图。因此,让我们继续前进,并运行此部分,前进。然后我们会看到这里,这是我们展示哪里出了问题的From到来。所以我们在这里看到,所有的数据都聚集在一起,在这里,50左右,因此这是红带。而这正是给了我们相当多的对比度差。
为了更详细地查看数据,我们要做一些其他的事情。我们要做一个散点图。这就是在三维图中绘制红,蓝,绿三种颜色。这是所有的数据点。你可以看到,这并不难。这也意味着,看看问题是什么。在这三个平面上,我们看到所有的东西都聚集在这条直线上。再一次,不是很好。你可能想要看到一些,像这里的分布,得到一些更动态的范围,看到不同的颜色。
因此,让我们继续前进,看看我们如何能够纠正这一问题。如果我们在这里向下滚动,这就是我们要尝试做什么叫做对比度拉伸。所以这是一个用函数调用imadjust,或图像调整。你会看到这里,创下F1,我要调整颜色映射的强度值。
所以你只需通过它在这里,你会向下滚动。下面是它只是另一个例子。我将要传递的真实颜色,然后你会看到,我只是将做一个伸展限制器。你会在这里看到这片极限是什么,该功能。它找到的限制的图像的对比度拉伸。
我们会把它传进去,然后运行它。你可以立刻看到,我们有了一个更好的图像。我们实际上有一些阴影,甚至是深的,深绿色的,一直到一些白色的阴影。这是一张非常漂亮的图片。我们可以对它进行一些处理。我们真的可以利用它。
但我们可以更进一步。如果你看一下,虽然有一些很好的对比,但就颜色而言,还是很柔和的。我们看看能不能让颜色更有活力。所以这是一个伟大的进步,只是使用了一个对比拉伸。我们来看看柱状图,看看为什么会这样。所以你在这里看到,在此之前,记住,所有的东西都聚集在一个狭窄的地带,大约在50。现在,我们看到直方图分布得很均匀,这就是为什么我们可以看到更多的细节。
因此,要进一步走一步,也许固定的颜色,我们要做些什么,什么叫做去相关拉伸。所以这是要加强整个高度相关渠道分色。记得早些时候,散点图,一切都在一行带状,或相关的,紧实。
所以这个解相关拉伸来继续运行这个,在下一节中,您将看到,再一次,我们不仅有一个好一点的对比差异,现在我们有一个漂亮的动态范围的颜色,从这些漂亮的动态绿色蓝色色调的红色。所以我们有很多可以处理的实际数据。实际上,您可以直接使用图像,或者继续沿着这条路径进行更多的图像处理。
让我们从绘图的角度最后看一下这些数据。看这里,这是散点图。你可以立即看到,我们有一个很好的颜色分布,这就是为什么我们有这样一个动态的图像。
总结一下我们的图像增强的例子,你可以看到我们不仅能够可视化图像,而且能够查看直方图和散点图来帮助分析图像中的问题。然后在此基础上,我们可以做一些性能增强,比如对比度拉伸,以及去相关拉伸。所以,从本质上讲,我们从这张插图很差的全是紫色的图片转移到这张漂亮的动态图片,它有很多颜色的深浅,以及正确的对比。
这就引出了下一个主题。我们要讲的是,什么是图像分割?图像分割就是将图像分割成多个部分的过程。通常,这既是前景也是背景。此过程通常用于帮助识别和隔离对象,以便您可以使用其他函数从图像中提取有意义的信息。
在下面,你可以看到一个密集的图像。我们使用分水岭分割来分离并开始计算这个新图像中的一些物体。你可以看到我们对它进行了分割,这里有一个很好的二值图像我们可以对它进行分析,甚至可以根据大小计算出这里有多少钱。
让我们进入演示环节。我们要处理我们的玩具车,糖果和十六进制虫子的图像。我们将对图像进行分割和分析。我们要把它转换成这个二元图像我们所关心的一切,然后我们要从中提取一些统计信息。
我们将继续并打开我之前编写的脚本。这里,你可以看到我做的和你之前看到的一模一样。我要读的玩具和糖果形象。好吧。我们把它停靠在这里,这样更容易看到。我将最小化这个工具条,只是为了在这里腾出更多的空间。
接下来我要做的是把它转换成灰度。我们来转换一下。你看这里,我去掉了所有的颜色。如果我看一下我的工作空间,你可以看到我从三层移到了一层。所以我不再有一个红,蓝,绿的层,只是一个灰度图像,每个像素只有一个强度。
最后我要做的是一个im2bw函数。这是一个阈值函数。这可能是最简单的细分形式之一,但它也很强大。如果我们看这个函数,我们继续看我们的文档,im2bw。我要这样做。
而我在这里,帮助内。如果我看一下这个功能,你可以看到这个转换灰度图像为二值图像,并使用水平。所以这个电平值,从本质上讲,设定截止。因此,它是0和1之间就在这里。然后这个地方是截止,一切截止以上是要去白,到1的值,一切都在它下面是要去为0,这就是使得二值图像。
在我结束之前,我要给你们展示一下,如果你们以这种方式去看文档,这是另一种导航到你们可能关心的函数的好方法;例如,图像增强。这就是对比度调整。这些是我们之前处理过的一些函数。再一次,这是另一种帮助和得到一些真正指导的方法,只要你能做什么。
因此,让我们继续前进,做到这一点。所以我要开始设置这个级别的数值为0.5。我只是在中间点。而我们要做的im2bw创造这一宝贵ithresh。因此,让我们继续前进,并运行此部分。所以,我只是打控制输入,只需运行该部分。
你可以看到,让我把这个放大,我们有了原始的图像。这是我们的阈值图像。所以我们做得很好,你可以看到,仅仅是把水平设为4。5。我们有一些糖果,其中一些分割得很好。我们有车。然后,你可以看到,其中一些,我们开始失去它。所以这些较浅的阴影也不会进入门槛。我们没有选择正确的值。但至少我们得到了边缘。
但有个问题。你可以看到糖果。大部分是分段的,除了这些黄色的。你可能会猜到这是为什么,那是因为汽车,和这些糖果一样,黄色的很接近桌面。所以当你有非常接近的颜色像这样,阈值可能是有点挑战性和棘手的。当你有高水平的对比,基本的阈值很容易做到。但是,当你有接近的颜色时,它们可能只会随着几个不同的强度水平而变化。所以这是非常具有挑战性的。
让我们进一步思考一下。在此之前,我们仍然可以进行实验。看看这个水平值。我们可以右键点击它,我们可以说,increment value和run section。这是一个弹出的小窗口。我可以说,我想要增加0。1,所以十分位。然后我们继续增加它。
你可以看到,当我点击它,你看到正在发生的变化。现在我让一些更黑在这里。你可以看到,这个问题是我得到了很多更多的噪音。然而,有些事情被分割得很好。但我还是不能让这些黄色的块糖展现出来更好。所以肯定有一些问题。但好处是我可以迭代很快,看看什么是工作,什么不是。所以你看0.6还不错,但是,它仍然是不够好。我还是不能让这些黄色的块糖。
这就引出了一个问题。我们真的需要退一步想想,这幅图有什么独特的属性或特征我们可以加以利用吗?如果你仔细观察,你会发现什么?
一个是物体的大小。与糖果相比,我们的汽车质量相当大。十六进制的虫子在中间。我们有合适的尺寸。我们也可以做一些基于形状的图像处理,对吧?我们有这些非常长方形的物体,有玩具车和十六进制的虫子,但是糖果实际上是圆的。所以我们可以利用基于形状的处理,也许是利用形态学。
然后最后,还有一点我们可以看看是颜色。有相当多的被这里所代表的颜色。所以这是一个前处理技术,很多人忽视,但它实际上是相当有利的。因此,让我们用实际颜色开始。所以,如果我回来这里,我居然写了这个功能早了,这就是所谓的色彩空间点米
如果我把这个打开,让我把它最小化,你可以看到我要把糖果想象读进去。但这要做的是我们要打印出每一个颜色空间。记住,我说过这里有三层。我们要打印出红色,绿色和蓝色。你们可以看到,这是我画的图。
因此,让我们继续前进,在这里运行此节。你可以看到这些容易。这里是我的原始图像,但现在,这里是从颜色平面中的每一个灰度图像的每一个。所以,实际上,我打算做预处理的颜色,然后我要去阈值不同的色彩平面中的每一个。
所以在这里回来我们的帮助,你可以看到,如果我们去图像处理工具箱,你可以看到有颜色上的一整节。你可以处理像的ICC色彩配置文件,该LAP色彩空间。你甚至可以对付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中心的文件交换中找到它们。
这就引出了我们最后一个话题,那就是图像配准。什么是图像配准?简单地说,这就是对来自不同数据集的图像进行对齐的过程,用于视觉比较或计算分析。你可以从下面的图片中看到,你可以在地图上使用图像配准,可能是从多个卫星上收集的。也许是同一颗卫星。在右边,我们有3D医学成像,你可以注册多个图像,给你一个更全面的数据,这样你也可以做更多的处理。
因此,当涉及到图像自动配准的话题,实际上是两大类。一是强度为主。这正是它的声音。实际上,你会根据强度要对准两个图像。在这种情况下,它可能对准头骨。你可以在这里看到,强度非常明亮,也许具有高强度存在以及另一幅图像。然后在地图上,这正是回事了。它对准之类的东西街道,房屋,任何形式的图像特性,其中的强度去排队的。
另一种类型的注册是基于特征的。所以基于特征的,就是它听起来的样子。你提取不同的特征;例如,角落。可以是边。可能是其中独特的特征。而两者的区别在于基于强度的配准算法可以在图像处理工具箱中找到。由于特征是计算机视觉的重要组成部分,因此在计算机视觉系统工具箱中可以找到特征。我要给你们看的例子是基于强度的自动配准,它来自图像处理工具箱。
所以在这个演示中,就是我要告诉你的是如何与工作,在这种情况下,摄像头图像和红外图像。而这个例子的目的是因为我们要测量体温的两个图像登记在一起。而且由于眼睛的内眼角的位置是最准确的地方,测量体温,我们要登记这些图像这样的话我可以运行网络摄像头图像上的算法来找出眼睛的位置都和然后我就可以进行相关的红外图像上,准确的位置读取正确的体温。
让我们回到MATLAB。这是我们的脚本。你会看到我所做的是把这两个图像导入到我的工作空间。我将以固定图像的形式读取红外图像。所以它是静止的。然后我要读一下网络摄像头的图像。这是一个移动的图像这是一个试图在固定图像上移动和画线的图像。
我们来读一下。接下来我要做的是imshowpair。在这里,向你们展示这两张图片。同样,我们想要注册这两个。我们要做的是调用这个函数imregconfig来配置它。
所以这是真正的投入。如果我打了F1,你可以看到它的唯一希望,真的,一个输入参数。您可以看到,这里的形态。因此,所有这意味着,在您的图片来自一台摄像机,或单个设备拍摄的?如果是这样,那么你使用的输入参数单峰。如果它是从不同的设备拍摄的,像我们这里,一个摄像头和红外线相机,那么我们要输入多模态。所以这是我们的输入参数,是多模态。您可以继续运行此。
然后我们要进行第一次注册。我们将使用imregister函数。你可以看到这里它将做基于强度的图像配准。首先,我们要选择的变换类型,就是平移。所有这些意味着,它会将移动的图像向xy方向移动看它是否能将两者对齐。
因此,让我们继续前进,并运行。你可以在这里看到,这是我们的结果。所以在这里,我们正在做什么叫做伪色的imshowpair。因此,我们覆盖它们。而这种给你,至少,一些漂亮的颜色,看看发生了什么事情。你看它做了右手边一个相当不错的工作,但肯定有一些问题。你看这个鬼影这里,甚至连肩部错位。
让我们这样做的另一个观点。让我们做一个融合,而不是伪色的。这给了我们一个好一点的观点。所以,你可以在这里看到,有实际缩放回事的问题。因此,它对准正确右侧在这里,但在左侧,可以看到其中一张图片显然比其他的大。
所以简单的转换,默认的转换,是行不通的。我们来改变一下。我们要把变换类型改为仿射。如果你向下滚动到这里,只是为了提醒你这是什么。所以我们用平移。没有工作。
仿射更高级。它将使用旋转,以及将改变规模和一些透明以及。让我们运行一下,看看会发生什么。所以你看这里,哦,它变得好一点了。所以我们没有太多的鬼影在头部,但我们仍然有问题在这里的脖子和耳朵。就连肩膀似乎也有点脱臼了。但是你可以看到图像被旋转了。所以这部分成功了。
我们越来越接近了,但我们试试别的。我们看看能不能尝试一个不同的变换。我们要尝试这个相似变换。而这一切只不过是一个额外的改变。它将处理非反射相似性。但它仍然会做平移,旋转和缩放,但它不会玩透明。简单一点。
我们来试试这个。这是结果。你可以立刻看出这是一个很好的配准。所以你看,头部对齐得很好。你看肩膀。这里有一点差距,但说实话,这是我们真正想要的,我们希望眼睛能非常准确地对准。因为我们想要检测眼睛的位置,这样我们就可以准确地读出体温。
最后一步是我们要用到计算机视觉系统工具箱中的一个函数,那就是级联对象检测器。如果你看这里,如果我点击F1,你会看到它使用的是Viola-Jones算法,这是一个处理人脸的很好的算法。它不仅能识别人脸的位置,还能帮助识别面部特征,比如眼睛、鼻子、嘴巴和上半身。
你可以在这里看到,我们会尝试去寻找一双眼睛。因此,如果我们继续前进,运行的部分,然后我们要计算眼睛附近的温度。因此,这是它会转换。而我们将在这里做的是我们要嵌入的温度,做一个文本插入,并把它写在屏幕上,因此很容易让用户看到。所以,如果我们回到我们的形象,我们在这里有我们的美好注册图像,我们有眼睛周围一个很好的边框。而你看到这里的温度读取为98华氏度,这完全是正常的。而这个人没有发烧。
为了总结演示,您看到了我们如何获取图像,包括红外图像和标准的网络摄像头图像。我们可视化数据,在我们的算法之前和整个过程中。我们使用自动图像注册来对齐图像。最后,一旦对齐,我们使用特征检测,使用计算机视觉系统工具箱中的Viola-Jones检测器。最后,我们找到了相对温度我们把它写在用户的图像上。
更多信息,这里有一些很棒的资源。首先,我们有一个产品页面。我们也有Steve的博客,与图像处理相关的技术专家之一Steve Evans撰写了这个博客。那里有很多有趣的话题。如果你刚接触图像处理,用MATLAB进行数字图像处理,也是Steve Evans的合著者,是学习图像处理的关键概念以及如何在MATLAB中实际执行的一个很好的资源。
最后,是一个产品测试,你可以尝试今天看到的很多例子,也可以用你自己的算法做实验。我们的网络研讨会到此结束。首先,我想说谢谢你的时间,希望你觉得这个会议有帮助,也许你走开了一些新的技术或想法,你可以实现在自己的图像和视频处理工作流程。再次感谢。
记录:2014年10月15日