简化图像处理
概述
了解MATLAB如何使开始图像处理变得容易。
图像处理是构建基于视觉的相机系统的基础。你可能有一个在工程或科学应用中使用相机的新想法,但不知道从哪里开始。虽然图像处理看起来像一门黑艺术,但有一些关键的工作流程可以帮助您入门。
在这次网络研讨会中,我们将使用现实世界的例子,演示MATLAB如何使其容易:
- 使用增强和过滤技术预处理图像
- 使用分割技术分离感兴趣的对象
- 在大量的图像上测试你的算法
不需要MATLAB的相关知识。
突出了
- MATLAB帮助文档和示例帮助您快速上手
- 交互式应用程序和实时脚本使探索不同的技术成为可能
- 广泛的内置图像处理算法库
- 算法在大数据集上的自动化测试
的主持人
Sandeep Hiremath是MathWorks公司图像处理和计算机视觉领域的产品经理。在MathWorks工作的13年里,他曾担任过各种面向客户的角色,支持MATLAB和Simulink用户。在他之前在MathWorks的工作中,他是支持MATLAB学术用户的技术传道者。他拥有美国克莱姆森大学机械工程硕士学位和印度马德拉斯大学电气工程学士学位。
记录:2020年10月21日
欢迎参加“简化图像处理”网络研讨会。我叫桑迪普,是MathWorks公司产品营销团队的一员。图像处理是一个非常受欢迎的领域,我们看到我们的许多客户广泛使用它来设计基于视觉的系统,跨越各种不同的应用领域,如自动驾驶、机器人、机器视觉和医疗成像等。在这些应用程序中,图像处理主要用作预处理步骤。但通常,设计完整的基于视觉的解决方案需要的不仅仅是图像定价技术。
那么什么是图像处理呢?图像处理或数字图像处理涉及对图像执行某些操作,以便在对其进行进一步分析之前获得增强图像或从中提取一些有用的信息。就像在这个简单的例子中,主要目标是检测视频中的邮票,可能是谴责,图像处理已经用于噪声去除、边缘检测和滤波操作,以预处理视频中的帧。
这些处理过的帧可以用计算机视觉或者深度学习技术来检测邮票。在这个视频中,我们将看到一些基于视觉的例子,我们将主要关注图像处理部分。
我们看到许多工程师和科学家想在他们自己的项目中使用图像处理。然而,对于这个领域的新手来说,开始时会遇到许多挑战。其中一些典型的挑战是——我该如何开始?或者我如何学习不同的技巧?或者我如何探索解决问题的方法?或者我如何在大量的图像数据集上测试我的想法?
在这次网络研讨会中,我们的目标是通过一些真实的例子帮助您开始在您的项目中应用图像处理,并向您展示如何使用MATLAB使开始图像处理变得简单和快速。所以,在接下来的30分钟左右,我们将在现实世界的例子中看到两个与视觉相关的问题,以及图像处理技术将如何在每一个例子中使用。
首先,您将看到如何提高水下图像中物体的能见度,其次,在机器人视图中识别彩色锥或物体。让我们开始解决一些问题。
寻找水下物体以帮助导航是潜艇的一项常见任务。右边的图片是一艘小型自主潜艇,由一些工程专业的学生设计,用于执行一些自主导航任务。其中一项任务是在水下定位被淹没的笼子,就像右图中那样,并在它们之间自主导航。
然而,这里有一个问题,你可以看到,在这张水下图片的门是不清楚的。通常情况下,水下物体的能见度会受到各种原因的影响,如水中运动、碎片或照明条件差。因此,这里的主要目标是在使用更先进的技术来分析和检测图像中的门之前,调整图像以应对能见度差的问题。
这个问题的解决方案是图像增强。图像增强涉及应用图像定价技术来调整图像属性,从而为进一步分析准备图像。例如,改善低光照条件和图像,以提高物体的可见性,或提高清晰度,以提高某些特征的可见性,如图像中的边缘。
现在让我们打开MATLAB看看如何着手解决这个问题。这是我的MATLAB环境。我将从我的MATLAB现场脚本开始,我要做的第一件事是读取我们之前看到的水下场景和水下门的图像。
为此,我将使用图像处理工具箱中的imread函数,它接受图像文件的名称作为输入,并以变量的形式返回图像数据。接下来,我想在MATLAB中查看这个图像。为此,我使用图像处理工具箱中的imshow函数。
让我们运行这个函数,看看它的输出。这里是我的输出嵌入到实时脚本中,这使得它在我们逐段执行实时脚本时非常容易理解。我也可以停靠在这个图形窗口近距离观察它。
现在,我的目标是检测图像中水下闸门结构的位置。为此,我编写了一个非常简单的自定义函数,称为find gates。在我们看这个函数之前,让我们继续运行下一节我把图像作为输入来寻找gate的函数。
这将返回带有门结构位置注释的水下图像。输出结果应该如下所示。然而,正如您所看到的,它没有找到门。
现在,让我们快速看看find gates函数是如何实现的。这里就不多说了,这个函数的输入是一张图像。首先,它将图像转换为二进制。
然后,它对二值图像进行细化,以去除任何可忽略的像素区域。最后,利用区域和性质分析对剩余的大段进行检测,得到闸门的垂直结构。所以输出应该是门的垂直结构上的两个注释。
现在,考虑到水看起来比我们在图像中预期的更模糊,find gates算法在这张水下图像上失败了。这是一个常见的场景,当我们设计算法,如查找门,甚至在知道我们正在处理的图像的实际情况之前,这种失败发生。然而,我们不需要改变算法来处理这个图像,而是可以使用MATLAB中提供的一些简单的增强技术来预处理图像,看看这是否有助于使用相同的find gates函数检测门结构,然后再继续并改变底层算法。
好的。所以我们想对图像进行预处理,但是对于这张模糊的水下图像我们使用了什么重新定价、定价或增强技术呢?我能做的就是从MATLAB文档中得到一些帮助。要做到这一点,我可以去这个帮助搜索栏,并搜索增强图像。这将打开MATLAB帮助处理器,其中包含这个术语的搜索结果。
这里的第一个东西是图像处理工具箱。再往下看,我看到了一个微光图像增强的搜索结果。我可以定义我的搜索结果,说我只想看到示例。这是我的精炼搜索。
现在,在例子中,让我们看看那个说微光图像增强的。如果您仔细看一下这个例子,您将看到一些不同的技术,它们被用于在弱光条件下增强图像。MATLAB使您能够打开脚本并在编辑器窗口中探索它,进行修改,并运行它以查看输出,而不必从头开始实现。
在这里,我还可以转到相关的帮助主题,即图像过滤和增强,并了解更多关于使用图像处理工具箱预处理图像的广泛技术集的信息。好的。因此,基于我对这些页面和一些相关的例子的快速研究,我能够挑选一些图像增强算法,我想尝试与水下图像,看看我是否可以使它与find gates功能。
我们来看看这个。我将在这里逐一展示三种技巧。首先,基于我们刚刚看到的微光图像增强的例子,我使用去雾算法。为此,我使用图像处理工具箱中的imreducehaze功能。这将返回一个经过处理的输出图像,以消除图像中的模糊。
通常情况下,去雾或雾霾减少技术有助于调整图像的大气雾霾,如从雾霾条件下的安全摄像头拍摄的图像,以帮助提高能见度,如果物体在图像中整体可见。所以,让我们继续尝试减少雾霾,看看这是否有助于消除水下图像中的一些模糊。因此,让我们运行该部分并查看原始图像旁边的输出。
如你所见,图像中的某些区域有一些改进。但这对我们的门检测算法来说足够了吗?让我们继续用find gates函数测试这个图像。所以在找到栅极的部分,我将从下拉菜单中选择去雾化的图像。一旦我选择了它,该节就会自动执行。这是去雾图像的门检测结果。所以这个技术并没有像我们预期的那样起作用。
现在,我有一个返回到iamreducehaze函数的选项,并调整一些输入参数,看看这是否会给我一个与find gates函数一起工作的结果。通过查看函数的帮助参考页,我可以找到更多关于iamreducehaze函数的这些输入参数的信息。但现在,在我的例子中,基于这里的默认语法,产生的图像还没有衰减检测算法成功。
好了,让我们继续讲第二种增强技术,图像锐化。图像锐化应该有助于锐化边缘和栅极结构,这在图像中显得有点模糊,主要是由于水的运动造成的。为此,我将使用图像处理工具箱中的im锐化功能。
让我们运行该部分并查看锐化后的图像。在这个视频中可能很难注意到,但是栅极结构边缘的清晰度有了一些提高,而且整个图像都有了提高。现在,我想用find gates函数测试锐化后的图像。因此,让我们再次前往该部分,并从下拉菜单中选择sharened Image,该部分将自动执行。
正如您所看到的,find gates再次未能检测到门的结构。所以图像锐化技术也没有奏效。到目前为止,我已经尝试了两种预处理技术,并且能够用find gates函数快速测试它们,但它们都没有起作用。
接下来,我将使用对比度调整来预处理图像。调整图像中像素的对比度有助于使一些较亮的像素与较暗的像素相比突出。如你所见,由于栅极结构的像素较轻,这种技术可能会有所帮助。我们来试一下。
现在要应用对比度调整,在图像处理工具箱中有许多可用的功能。这里我选择了非调整函数。Imadjust既适用于灰度图像,也适用于彩色图像。好的。在这一部分,我传递原始图像作为输入,这应该返回对比度调整后的图像。
让我们运行这个部分并查看输出。你可以看到,它抛出了一个错误Imadjust的语法只支持灰度图像。对于彩色图像,这里需要额外的输入参数。因此,如果你查看imadjust的帮助信息,你会发现对于彩色图像,我们需要为每个颜色通道r、g和b提供低和高范围。
我可以输入函数的这些参数。然而,Live Script为我们提供了交互式控件,我们可以使用它来调优参数并查看结果的更新。我可以调整这些值,直到我对最终结果感到满意。
让我们继续,看看这个预处理的图像是否能与find gates函数一起工作。让我们回到代码部分,这里有find get。在下拉菜单中选择对比度调整过的图像,这样就可以运行这个部分了。
这里是检测结果的输出。正如您所看到的,它已经成功地处理了这个图像,因为两个门结构都已注释。这就是我们的门检测算法的预期结果。
所以我们在这里看到的是,我们能够在MATLAB中探索和尝试不同的预处理技术,在使用对比度调整成功地预处理图像并使其与find gates函数工作之前,不需要了解这些技术的全部知识。现在注意,我们必须在imadjust中手动调整颜色和级别,以获得想要的结果。这只是一张图片。
现在,想象一下,如果我们有一个大序列,比如说500到1000个图像或视频帧,包含在不断变化的光线和水下条件下的闸门结构。在这里,很难指望同样的预定价技术和设置能够成功地在所有这些图像中检测栅极结构。在这种情况下,它需要在所有的图像上运行和验证预处理步骤,然后可能回过头来调整预处理算法和find gates函数,使它们足够健壮,可以在所有这些图像上工作。
图像批处理应用程序使得整个工作流程在MATLAB中非常快速和容易。让我们继续,看看这个应用程序,并使用它来自动预处理水下场景的图像序列。要打开这个应用程序,让我们转到Apps选项卡并单击展开下拉列表。
在这里,在图像处理和计算机视觉部分寻找图像批处理程序应用程序。注意,在这个部分中还有许多其他的应用程序。应用程序是开始探索和尝试不同技术或算法的好方法,尤其是如果你是计算机视觉图像处理的新手。
现在让我们打开图像批处理程序应用程序。现在,我想读取我所拥有的水下场景的图像序列,然后应用相同的对比度调整算法对所有这些图像进行预处理。为此,我要加载我的图像集。您可以在左侧面板中看到所有已加载的图像缩略图。
这里是所选图像的预览。接下来,我要选择我想用在这些图像上的算法。我有我的脚本包含对比度调整部分保存为一个新函数。叫做预处理图像。m。如果您希望了解创建此函数的步骤的详细信息,请单击问号按钮以参考文档。
接下来,我将选择Process All在所有图像上运行函数。执行完成后,您可以在右边的面板中查看结果。您可以进一步展开和检查它们。还需要注意的是,该应用程序允许通过并行计算加速批处理。
当您想加快处理非常大的图像数据集时,这尤其有用。然后,您可以将这些结果导出到MATLAB中,使用find gates函数进行测试。这也可以在脚本中自动实现。因此,这里需要注意的是,图像批处理应用程序使我们能够轻松地自动化处理大量图像集,然后使用这些结果返回并调整我们的算法,使其在所有图像上工作。
正如我们所看到的,处理多个图像很容易,可以使用批处理处理器应用程序加速。还请注意,MATLAB现在提供了一个ImagaDataStore对象,使其易于访问和管理大量的图像集合。现在,我们在演示中看到的只是一些简单的增强技术。但是根据我们的问题,在MATLAB中还有很多其他的技术可以使用。
例如,去模糊,这是非常有用的,当你试图消除图像的模糊或图像过滤技术,以消除噪音和图像。您可以通过下面描述中的链接了解更多关于过滤和增强技术的信息。
演示到此结束。总之,我们看到使用帮助文档开始使用MATLAB是多么容易,它为您提供了一组非常好的现成的示例和全面的函数参考页面。我们看到,MATLAB实时脚本是交互式的,可以很容易地探索和迭代不同的技术及其参数,并查看中间结果。
我们还看到MATLAB通过图像处理工具箱为您提供了一个图像批处理程序应用程序,它允许您用大量的图像自动测试您的算法。在前面的演示中,我们了解了如何增强图像。现在让我们看下一个演示,看看如何处理图像以从中提取有用的信息。
机器人或无人机上的摄像头的主要目标之一是检测它们前面的物体,特别是在执行拾取和放置、障碍物回避或目标检测等任务的机器人中。这是一个简单的拾取和放置机器人的例子,在右边的图像,它的目标是移动到一个特定的彩色锥体,拾取它们,并将它们移动到一个箱子。左边是机器人从前置摄像头看到的图像。
现在,用肉眼找到圆锥体似乎很容易,但对机器人来说不一定。那么,为什么这是一个挑战呢?如果你注意到,在目标物体周围还有其他物体那就是视锥细胞。而且,视锥细胞的位置、方向和比例都很难找到它们。这在物体检测问题中是一个常见的挑战,比如为自动驾驶汽车设计交通监控系统或车辆或行人探测器,或者在仓库中挑选和放置机器人。
因此,这里的主要目标是从图像中的其他杂波中分离或分割出感兴趣的区域,然后检测它们在场景中的实际位置。图像分割将帮助我们解决这个问题。分割技术通过赋予一个区域内所有具有相似属性的像素相同的值,可以从图像中提取有意义的信息。这叫做掩蔽。
例如,二进制掩码将涉及分配图像中的所有像素,要么是黑色的,要么是白色的。这样,我们就可以从背景中分离出前景中的正确屏幕。现在,您可以进一步分析这个二值图像,例如,计算图像中颗粒的数量。
现在,图像分割技术被用在各种不同的应用中,比如光学字符识别,有时图像中的文本需要在真正识别之前先提取出来。在视觉检查中,您在发现缺陷物体之前基于强度分割图像,或在医学成像中,您对组织图像执行基于颜色的分割,以提取感兴趣的区域以便进一步分析。
对于我们的问题,您可能想知道,我们如何知道使用哪种技术?就像在第一个演示中,通过在分割的MATLAB帮助中做一个简单的搜索,并查看一些例子,我能够很快地找出颜色阈值在我们的例子中工作得很好。颜色阈值将能够分离出单独的彩色锥,然后使用结果检测图像中锥的准确位置。
现在,让我们进入MATLAB,看看如何执行颜色阈值化。那么如何在MATLAB中开始颜色阈值化呢?为此,我将首先导航到帮助浏览器。在这里,我要搜索颜色阈值。这是我对颜色阈值的搜索结果。
第一个结果是颜色阈值。让我继续点击这个。在这里,我可以看到有一个颜色阈值应用我可以用它在MATLAB中执行颜色阈值。我还看到了一个例子,我可以打开它,了解更多关于应用程序是如何工作的。
现在,让我回到MATLAB,打开颜色阈值应用程序。像我们之前做的那样,我将进入应用程序选项卡,向下滚动到图像处理和计算机视觉部分。在这里,我可以找到Color Thresholder app,就在这里。这是我们的Color Thresholder应用。
接下来,我要导入我将要使用的图像。为此,我将点击加载图像,并选择从文件加载图像。这是我的图像选项。我要选择第一个,它是cones1。jpeg。
因此,应用程序现在加载图像,并将其与不同的颜色空间一起显示,硬币云代表这四个颜色空间中的每一个图像。这些颜色空间是RGB, HSV, YCbCr和L*a*b。在这里,我可以选择颜色空间,从图像提供最好的颜色分离。我可以从MATLAB帮助文档中了解更多关于这些不同颜色的空间以及如何使用它们。
现在,我将继续选择HSV颜色空间,点击这里的HSV按钮。这应该会打开一个名为HSV的新选项卡并显示图像。你也可以在右边看到我们有一些互动控制。这些控件允许您调整表示该颜色空间的三个值。
H是一个拥有所有色相值的风车,基本上代表了颜色的不同维度。S只是饱和度值,表示颜色的暗或明。V是图像中每个像素的颜色强度值。
你还可以看到底部有一个3D点控制。现在,我将继续与顶部的三个HSV控件进行交互,以调整这些值。当我更改这些值时,您可以看到,通过根据我所选择的HSV值过滤像素,左边的图像得到了实时更新。我还可以使用点云控制执行类似的过滤操作。
让我们继续并选择所有的色调颜色,以匹配黄色和黄色的深浅。因此,根据我们在左侧的过滤操作,我们现在看到的是一个掩码图像,它只包含匹配所选HSV值的像素。我可以移动风车值来选择不同的颜色。
让我们选择红色和深浅不一的红色。现在你可以看到它过滤掉了所有的颜色除了红色和深浅的红色。然后我可以微调我的蒙版通过调整饱和度强度值。
接下来,您还可以通过选择新的颜色空间来开始一个新的会话,从而在不同的颜色空间中尝试颜色阈值。通过这种方式,您可以在不同的颜色空间中探索阈值,并选择最适合的结果进行进一步分析。在MATLAB中,我也可以用编程的方式执行颜色阈值化。但如你所见,颜色阈值应用程序使这个工作流程更具互动性,更容易探索不同的选项。
我们可以很快得到一个不错的结果,不需要知道很多关于颜色空间和代表它们的值。现在我对我的结果很满意,我可以继续并导出蒙版图像到MATLAB工作区。我可以选择导出选项,然后点击导出图像。
如你所见,我也可以选择导出二进制掩码和原始输入RGB图像。这样,我就可以使用这些结果进一步分析和检测图像中的锥体,使用其他一些技术。现在,如果我想把这些步骤应用到一组大的图像上呢?为此,我可以再次使用Export选项并单击Export Function。这样,我可以导出颜色阈值app会话作为MATLAB函数。
现在,我可以在将来使用这个函数用相同的算法和相同的设置编程地阈值更多的图像。我们来看看这个被创建的函数。它叫Create Mask,它接受一个RGB输入图像并给出一个二进制掩码和一个被掩码的RGB图像作为输出,非常类似于颜色阈值应用。
让我们继续并保存这个函数到我们的当前文件夹,命名为create mask。现在,我在这里创建了一个实时脚本,它使用这个函数和其他一些分析和检测技术来检测图像中的锥。让我们继续,看一看脚本。
在这里的第一部分中,我读取了一个新的输入图像,它是cones4.jpg。第二行是创建掩码功能。让我们继续运行这个部分。这是输出,三幅图像。首先是输入图像,然后是掩码RGB图像,然后是二值图像。
下一节,我将使用一种叫做形态学的分割技术来进一步细化二进制掩码。在这种情况下,我将过滤掉图像中较小的像素区域。我的方法是使用Iamopen函数。然后我使用bwconcomp函数查找图像中所有连接的组件。
让我们继续运行这个部分。这是Iamopen函数的输出。如您所见,二进制掩码经过了进一步的改进。
最后,在本节中,我将使用regionprops命令查找这些连通能力的位置(即图像中的锥),然后用从区域道具中获得的信息(即这些连通组件的位置)对原始图像进行注释。让我们继续运行这一部分。
这是我的最终结果,这是原始图像它被标注了红色锥细胞的位置。通过这种方式,我可以对多个输入图像执行此操作,并使用这些信息返回并微调我的阈值和检测算法。现在,阈值分割只是众多可用的分割技术中的一种,您可以考虑用它来解决您的问题。
MATLAB实际上为您提供了许多其他分割和分析技术的综合列表。还有一些函数可以执行对象和区域属性分析,类似于我们使用regionprops命令检测锥。您还将发现有许多解释良好的示例向您展示如何基于现实问题使用这些不同的分割和分析技术。
所以我们看到在MATLAB中有很多其他的分割技术作为现成的函数。MATLAB还通过图像处理工具箱提供了一个应用程序,使分割快速和交互式。你可以在你的图像上探索不同的技术,并改进你的结果,直到你得到
你想要的结果。您可以将这些结果导出到MATLAB中进行进一步分析。您甚至可以选择为您的会话生成MATLAB函数,并使用它们在大量图像上自动测试相同的算法。如果你要对视频中的连续帧进行分割,这是特别有用的。
总之,在这个演示中,我们已经看到了颜色阈值应用程序是如何非常有效地快速探索不同的颜色空间,然后调整值,以获得所需的分割结果。我们看到,MATLAB提供了各种分割算法,在我们的工作中使用坚实的文档和示例,以快速开始应用它们。我们还了解到,图像分割程序可通过图像处理工具箱,使探索和尝试一些分割技术在我们的图像交互。
我们的演讲到此结束。总之,我们已经了解了如何使用MATLAB轻松开始图像处理。通过演示,我们特别看到MATLAB的全面帮助文档使得开始发现和学习变得简单和快速。这些现成的示例提供了一个使用自己的数据尝试不同算法的快速起点。交互式应用程序和实时脚本可以方便快捷地探索和迭代不同的技术及其参数,然后再决定哪种技术最适合您的情况。
最后,在MATLAB中对大量图像数据集或图像序列测试算法要容易得多。那你该怎么办?下面是一些下一步的步骤。图像处理工具箱可以做的比我们在这个视频中介绍的更多。要了解更多关于这个工具箱的信息,请访问Mathworks.com上的产品页面。
如果您已经准备好探索和评估图像处理工具箱,请立即获得该产品的试用许可证。您还可以通过注册MATLAB图像处理培训课程来获得更详细的工具箱实践经验。这也是一门在线课程。
如果你对解决计算机视觉问题特别感兴趣,那么MATLAB的计算机视觉工具箱可以帮助你。我们的许多客户都对使用深度学习技术及其基于视觉的应用感兴趣。如果你还不知道,我们有一个深度学习工具箱,可以让你在MATLAB中使用深度学习。请参考下面的描述以获得这些资源的链接。谢谢大家。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。