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