主要内容

imseggeodesic

使用基于测地距离的颜色分割将图像分割为两个或三个区域

描述

例子

l=不连续测地线(RGBBW1BW2分割彩色图像RGB,返回带标签的分割二值图像lBW1BW2指定初始种子区域位置的二值图像是否称为涂鸦,用于两个区域(前景和背景)。

imseggeodesic使用中指定的涂鸦BW1BW2作为代表性样本,用于计算各自区域的统计信息,然后用于分割BW1BW2(逻辑上为真的区域)不应重叠。底层算法使用由涂鸦标记的区域估计的统计数据进行分割。被涂鸦标记的像素越多,区域统计的估计就越准确,这通常会导致更精确的分割。因此,提供尽可能多的涂鸦是一个很好的实践。通常,为每个区域提供至少几百个像素作为涂鸦。

例子

l=不连续测地线(RGBBW1BW2BW3分割彩色图像RGB,返回带有标签矩阵指定的区域标签的三段分割图像(三元分割)lBW1BW2BW3是指定初始种子区域或三个区域的涂鸦位置的二进制图像。由指定的涂鸦BW1BW2BW3(逻辑上为真的区域)不应重叠。

例子

lP]=不连续测地线(___也返回属于矩阵中每个标签的每个像素的概率P

例子

lP]=不连续测地线(___名称、值使用名称-值对来控制分段的各个方面。

例子

全部崩溃

读取并显示图像。

RGB=imread(‘yellowlily.jpg’);imshow (RGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

目标是分割花瓣绘图矩形函数。以红色显示ROI。“位置”名称-值对参数将ROI的左上角坐标、宽度和高度指定为4元素向量[xmin,ymin,宽度,高度].如果想以交互方式绘制矩形,则省略'Position'名称-值对参数。

roiObject=绘图矩形(gca,“位置”,[350 700 375 120],“颜色”“r”);

图中包含一个轴对象。axis对象包含两个类型为image的对象,images.roi.rectangle。

将背景的初始种子区域指定为矩形ROI。以蓝色显示ROI。

roiBackground = drawrectangle (gca),“位置”,[90 1230 910 190],“颜色”“b”);

图中包含一个轴对象。axis对象包含3个类型为image的对象,images.roi.rectangle。

为ROI所在的每个ROI创建掩码符合事实的其他像素是错误的

maskObject=createMask(roiObject);maskBackground=createMask(roiBackground);

段的图像。

[L,P]=imSeg测地线(RGB、maskObject、maskBackground);

显示分段标签。

imshow (label2rgb (L)标题(“分段标签”

图中包含一个轴对象。具有标题分段标签的axes对象包含一个类型为image的对象。

在原始图像上显示分段标签。

L) imshow (labeloverlay (RGB)标题(“标签覆盖在原始图像上”

图中包含一个轴对象。标题标签覆盖在原始图像上的轴对象包含类型为Image的对象。

读取并显示图像。

RGB=imread(‘yellowlily.jpg’);imshow (RGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

第一个区域是黄色的花瓣。方法指定初始种子区域为矩形ROI绘图矩形函数。用黄色画ROI。“Position”名称-值对参数指定ROI的左上角坐标、宽度和高度作为4元素向量[xmin,ymin,宽度,高度].如果想以交互方式绘制矩形,则省略'Position'名称-值对参数。

r1 = drawrectangle (gca),“位置”,[350 700 425 120],“颜色”“是的”);

图中包含一个轴对象。axis对象包含两个类型为image的对象,images.roi.rectangle。

第二个区域由绿叶组成。将种子区域指定为矩形ROI,并用红色绘制ROI。

r2=拉深矩形(gca,“位置”,[800 1124 120 230],“颜色”“r”);

图中包含一个轴对象。axis对象包含3个类型为image的对象,images.roi.rectangle。

第三个区域是背景,也就是图像中的污垢。指定种子区域为矩形ROI,并用蓝色绘制ROI。

r3 = drawrectangle (gca),“位置”,[1010 290 180 240],“颜色”“b”);

图中包含一个轴对象。axis对象包含4个类型为image的对象,images.roi.rectangle。

为ROI所在的每个ROI创建掩码符合事实的其他像素是错误的

mask1 = createMask (r1);mask2 = createMask (r2);mask3 = createMask (r3);

段的图像。

[L,P]=imseg测地线(RGB,mask1,mask2,mask3,“AdaptiveChannelWeighting”,真正的);

在原始图像上显示分段标签。

L) imshow (labeloverlay (RGB)标题(“具有三个区域的分割图像”

图中包含一个Axis对象。带有标题的Axis对象(带有三个区域的分割图像)包含一个Image类型的对象。

图像右下角被错误分类为区域2(叶子)。添加另一个背景ROI。

r4=拉伸矩形(gca,“位置”,[20 1320 480 200],“颜色”“b”);

图中包含一个Axis对象。Axis对象的标题为带有三个区域的分割图像,包含两个类型为Image的对象,images.roi.rectangle。

mask4 = createMask (r4);maskBackground = mask3 + mask4;

分割图像,然后将分割后的标签显示在原始图像上。

[L,P]=ImSeg测地线(RGB,mask1,mask2,maskBackground,“AdaptiveChannelWeighting”,真正的);L) imshow (labeloverlay (RGB)标题(“具有三个区域的细化分割图像”

图中包含一个轴对象。标题为“三区域精细分割图像”的轴对象包含一个类型为“图像”的对象。

显示每个像素属于每个标签的概率。

蒙太奇(P,“尺寸”3[1])标题('每个像素属于每个标签的概率'

Figure包含一个Axis对象。Axis对象的标题概率为每个像素属于每个标签,该对象包含一个image类型的对象。

输入参数

全部崩溃

要分割的图像,指定为RGB图像。imseggeodesic在执行分割之前,将输入RGB图像转换为YCbCr颜色空间。

例子:RGB = imread(“peppers.png”);

数据类型:双重的|uint8|uint16

第一个区域的涂鸦图像,指定为逻辑矩阵。BW1必须具有与输入图像相同的行数和列数RGB。要以交互方式创建涂鸦,请首先使用以下功能绘制ROI:drawcircle手绘drawpolygon,或绘图矩形.然后,创建一个蒙版从ROI使用createMask

数据类型:逻辑

第二个区域的涂鸦图像,指定为逻辑矩阵。BW2必须具有与输入图像相同的行数和列数RGB。要以交互方式创建涂鸦,请首先使用以下功能绘制ROI:drawcircle手绘drawpolygon,或绘图矩形.然后,创建一个蒙版从ROI使用createMask

数据类型:逻辑

第三个区域的涂鸦图像,指定为逻辑矩阵。BW3必须具有与输入图像相同的行数和列数RGB。要以交互方式创建涂鸦,请首先使用以下功能绘制ROI:drawcircle手绘drawpolygon,或绘图矩形.然后,创建一个蒙版从ROI使用createMask

数据类型:逻辑

名称-值参数

指定可选的逗号分隔的对名称、值论据。的名字参数名和价值是对应的值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:名称1,值1,…,名称,值

例子:[L,P]=imSeg测地线(RGB,BW1,BW2,BW3,'AdaptiveChannel Weighting',真);

使用自适应通道加权,指定为逻辑标量。当符合事实的imseggeodesic根据通道中对分割有用的歧视性信息(基于作为输入提供的涂鸦)的数量对通道进行权重。当错误的(违约),imseggeodesic所有通道的权重相等。

数据类型:逻辑

输出参数

全部崩溃

标记矩阵,作为非负整数矩阵返回。标记的像素0背景和像素被标记了吗1识别一个分割区域。像素标记2在三叉分割中识别另一个分割区域。

数据类型:双重的

像素属于标记区域的概率,指定为-借-N-by-2矩阵用于二进制分割或-借-N-用于三元分割的by-3矩阵。N是输入图像中的行数和列数。P(i,j,k)指定位置上像素的概率(i,j)属于标签k

数据类型:双重的

提示

  • 两个(或三个)区域的涂鸦不应相互重叠。每个涂鸦矩阵(BW1BW2BW3)应该是非空的,也就是说,应该至少有一个像素(虽然越多越好)标记为逻辑符合事实的在每一幅涂鸦中。

算法

imseggeodesic使用基于测地距离的颜色分割算法(类似于[1]).

工具书类

A. Protiere和G. Sapiro,基于自适应加权距离的交互式图像分割,IEEE图像处理学报,第16卷,2007年第4期。

R2015a中引入