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