主要内容

imseggeodesic

利用基于测地线距离的颜色分割方法将图像分割成两个或三个区域

描述

例子

l= imseggeodesic (RGBBW1BW2分割彩色图像RGB,返回一个带标签的分割二值图像lBW1而且BW2指定初始种子区域位置的二值图像称为涂鸦,为两个区域(前景和背景)。

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

例子

l= imseggeodesic (RGBBW1BW2BW3分割彩色图像RGB,返回带有标签矩阵指定的区域标签的三段(三段分割)的分割图像lBW1BW2,BW3是指定初始种子区域或三个区域涂鸦位置的二值图像。指定的涂鸦BW1BW2,BW3(逻辑正确的区域)不应该重叠。

例子

lP= imseggeodesic(___还返回属于矩阵中每个标签的每个像素的概率P

例子

lP= imseggeodesic(___名称,值使用名称-值对来控制分段的各个方面。

例子

全部折叠

读取并显示图像。

RGB = imread(“yellowlily.jpg”);imshow (RGB)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

我们的目标是将花的花瓣分割开来。方法将初始种子区域指定为矩形ROIdrawrectangle函数。以红色显示ROI。'Position'名称-值对参数指定ROI的左上角坐标、宽度和高度作为4元素向量[xmin, ymin, width, height].如果你想交互式地绘制矩形,那么省略'Position'名称-值对参数。

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

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

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

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

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

为ROI所在的每个ROI创建一个掩码真正的其他像素是

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

分割图像。

[L,P] = imseggeodesic(RGB,maskObject,maskBackground);

显示分段标签。

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

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

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

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

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

读取并显示图像。

RGB = imread(“yellowlily.jpg”);imshow (RGB)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

第一个区域由黄色的花瓣组成。方法将初始种子区域指定为矩形ROIdrawrectangle函数。用黄色绘制ROI。'Position'名称-值对参数指定ROI的左上角坐标、宽度和高度作为4元素向量[xmin, ymin, width, height].如果你想交互式地绘制矩形,那么省略'Position'名称-值对参数。

R1 = drawrectangle(gca,“位置”,[350 700 425 120],“颜色”“y”);

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

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

R2 = drawrectangle(gca,“位置”,[800 1124 120 230],“颜色”“r”);

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

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

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

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

为ROI所在的每个ROI创建一个掩码真正的其他像素是

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

分割图像。

[L,P] = imseggeodesic(RGB,mask1,mask2,mask3,“AdaptiveChannelWeighting”,真正的);

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

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

图中包含一个axes对象。标题为“分割图像与三个区域”的axis对象包含一个类型为Image的对象。

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

R4 = drawrectangle(gca,“位置”,[20 1320 480 200],“颜色”“b”);

图中包含一个axes对象。标题为segments ented Image with Three Regions的axis对象包含两个类型为Image的对象,images.roi.rectangle。

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

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

[L,P] = imseggeodesic(RGB,mask1,mask2,maskBackground,“AdaptiveChannelWeighting”,真正的);L) imshow (labeloverlay (RGB)标题(“三区域细分图像”

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

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

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

图中包含一个axes对象。标题为“每个像素属于每个标签的概率”的axis对象包含一个类型为image的对象。

输入参数

全部折叠

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

例子:RGB = imread('pepper .png');

数据类型:|uint8|uint16

为第一个区域涂鸦图像,指定为逻辑矩阵。BW1必须具有与输入图像相同的行数和列数RGB.要交互式地创建涂鸦,首先要使用如下函数绘制ROIdrawcircledrawfreehanddrawpolygon,或drawrectangle.然后,使用从ROI创建掩码createMask

数据类型:逻辑

为第二个区域涂鸦图像,指定为逻辑矩阵。BW2必须具有与输入图像相同的行数和列数RGB.要交互式地创建涂鸦,首先要使用如下函数绘制ROIdrawcircledrawfreehanddrawpolygon,或drawrectangle.然后,使用从ROI创建掩码createMask

数据类型:逻辑

为第三个区域涂鸦图像,指定为逻辑矩阵。BW3必须具有与输入图像相同的行数和列数RGB.要交互式地创建涂鸦,首先要使用如下函数绘制ROIdrawcircledrawfreehanddrawpolygon,或drawrectangle.然后,使用从ROI创建掩码createMask

数据类型:逻辑

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:[L,P] = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);

使用自适应通道加权,指定为逻辑标量。当真正的imseggeodesic根据通道具有的用于分割的鉴别信息的数量(基于作为输入提供的涂鸦)对通道进行加权。当(默认),imseggeodesic对所有通道一视同仁。

数据类型:逻辑

输出参数

全部折叠

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

数据类型:

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

数据类型:

提示

  • 两个(或三个)区域的涂鸦不应该互相重叠。每个涂鸦矩阵(BW1BW2,BW3)应该非空,也就是说,应该至少有一个像素(尽管越多越好)标记为逻辑的真正的在每一个涂鸦中。

算法

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

参考文献

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

版本历史

在R2015a中介绍

Baidu
map