主要内容

段图像和创建掩码使用颜色阈值

这个例子展示了如何使用Color Thresholder应用程序分割一张图像并创建一个二进制掩码图像。这个例子根据颜色值从背景(紫色布)中分割前景(辣椒)。

用颜色阈值分割图像是一个迭代的过程。例如,您可以尝试在不同的颜色空间中分割图像,因为一个颜色空间可能比另一个颜色空间更好地隔离特定的颜色。在任何支持的颜色空间中,您可金宝app以通过选择前景或背景中的一个区域来初始执行自动分割。然后,你可以通过使用应用程序提供的颜色组件控件来细化分割。

本示例还展示了如何创建二进制掩码图像,保存工作结果,并导出MATLAB®代码,使您能够再现分割。

在颜色阈值器中打开图像

将彩色图像读入工作区。

Im = imread(“peppers.png”);

从MATLAB工具条打开颜色阈值。在“应用程序”选项卡上的图像处理与计算机视觉“,部分点击颜色阈值

将图像加载到颜色阈值应用程序中。单击加载图片,然后选择从工作区加载图像。在Import From Workspace对话框中,从工作区中选择图像,然后单击好吧

方法也可以从命令行打开应用程序colorThresholder函数,指定图像的变量名:

colorThresholder (im)

选择颜色空间

颜色阈值显示的图像选择一个颜色空间选项卡,用点云表示这些颜色空间中的图像:RGB, HSV, YCbCr和L*a*b*。对于基于颜色的分割,请选择提供最佳颜色分离的颜色空间。使用鼠标旋转点云表示,以查看它们如何隔离单独的颜色。对于本例,首先选择YCbCr颜色空间。

部分图片

当您选择颜色空间时,“颜色阈值”将打开一个新选项卡,显示图像以及用于每个颜色组件和点云表示的一组控件。颜色控件根据颜色空间的不同而不同。对于YCbCr颜色空间,应用程序显示三个直方图,代表三个颜色组件Y分量表示亮度Cb分量表示蓝黄光谱,而Cr分量表示红绿光谱。

若要访问平移和缩放控件,请将光标移动到图像上。

自动阈值

首先,使用自动阈值分割图像。因为背景(紫色布)是接近统一的颜色,分割它而不是前景对象(辣椒)。控件可以反转蒙版反掩码选择。

使用手绘ROI工具定义一个区域。点击套索图标在图像右上角的轴工具栏中,并在背景上绘制ROI。你可以画多个区域。如果您想删除您绘制的区域并重新开始,请右键单击该区域的任何位置并选择删除徒手画的

绘制区域后,“颜色阈值器”会根据在绘制区域中选择的颜色自动对图像进行阈值。的YCb,Cr颜色控制改变以反映分割。这种自动阈值分割不会对背景和前景进行清晰的分割,特别是在前景和背景之间的下边界。对于本例,图像底部附近的背景颜色较浅。

使用颜色控制改进自动阈值

要微调自动阈值,请使用颜色控件。为每一个YCb,Cr颜色控件,您可以通过拖动该直方图中的下界和上界来设置值的范围。使用这些颜色控件,可以显著改善前景的分割。

使用点云的阈值图像颜色值

选择颜色范围的另一种方法是在点云上绘制ROI。

在应用程序工具条上,单击重置阈值恢复到原始图像。在应用程序的右下角窗格中,单击并拖动点云旋转,直到分离出对阈值感兴趣的颜色的视图。将鼠标悬停在点云上并单击ROI按钮在点云的左上角。“颜色阈值”将3-D点云转换为2-D表示并激活多边形ROI工具。围绕要分割的颜色(紫色)绘制ROI。该方法可以比初始的自动阈值分割方法更好地分割。

另一种颜色空间中的分段图像

若要将图像分割到另一个颜色空间,请单击新颜色空间在应用工具条中。在选择一个颜色空间选项卡,选择HSV颜色空间。

Color Thresholder创建一个新选项卡,其中显示图像和HSV颜色空间的颜色组件控件。在这个颜色空间里,H代表色调,年代表示饱和度,且V代表值。HSV颜色空间使用一个双向旋钮H组件和两个直方图滑块年代而且V组件。该选项卡还包含图像中颜色的点云表示。

与前面的迭代一样,您可以使用所有相同的技术:自动阈值化和颜色组件控件(包括点云)的交互式使用。当您使用颜色控件时,您可以看到正在进行的分割。的窗格中H控件,通过一次单击并拖动一个箭头来更改色调的范围。实验控制,直到你有一个干净的分离背景和前景。在创建掩码图像后,可以使用工具箱函数(如形态运算符)清除小的缺陷。

创建掩码图像

因为这个例子分割了背景(紫色布)而不是前景对象(辣椒),所以可以通过单击来交换前景和背景反掩码

单击,查看二进制掩码图像显示二进制在应用程序工具条上。

导出的结果

在工作区中保存掩码。在工具条上,单击出口并选择导出图片

在“导出到工作区”对话框中,为二进制掩码映像指定变量名。您还可以保存原始输入的RGB图像和原始图像的分割版本。

若要保存重建分割所需的MATLAB代码,请单击出口并选择导出功能.颜色阈值打开MATLAB编辑器和创建分割的代码。单击,保存代码保存在MATLAB编辑器工具条上。您可以运行这段代码,向其传递一个RGB图像,以编程方式创建相同的掩码图像。

函数[BW,maskedRGBImage] = createMask(RGB)使用colorThresholder应用程序自动生成的代码来阈值RGB图像。% [BW,MASKEDRGBIMAGE] = createMask(RGB) thresholds image RGB using%从colorThresholder应用程序自动生成的代码颜色空间的每个通道的%范围是在应用程序中设置的%分割掩码返回在BW中,和掩码的复合%原始RGB图像返回在maskedRGBImage。由colorThresholder应用程序在2023年1月1日自动生成%------------------------------------------------------将RGB图像转换为所选颜色空间I = rgb2hsv(RGB);根据直方图设置定义通道1的阈值channel1Min = 0.734;channel1Max = 0.921;根据直方图设置定义通道2的阈值channel2Min = 0.334;channel2Max = 1.000;根据直方图设置定义通道3的阈值channel3Min = 0.000;channel3Max = 0.868;根据所选的直方图阈值创建掩码sliderBW =(我(::1)> = channel1Min) &(我(:,:1)< = channel1Max) &...(我(::2)> = channel2Min) &(我(:,:2)< = channel2Max) &...(我(::3)> = channel3Min) &(我(:,:,3)< = channel3Max);BW = sliderBW;%倒置掩模Bw = ~ Bw;根据输入图像初始化输出掩码图像。maskedRGBImage = RGB;设置BW为假的背景像素为零。maskedRGBImage(repmat(~BW,[1 1 3])) = 0;结束

另请参阅

相关的话题