Main Content

imdilate

膨胀图像

说明

示例

J = imdilate(I,SE) 使用结构元素 SE 膨胀灰度、二值或压缩二值图像 I

J = imdilate(I,nhood) 对图像 I 执行扩张运算,其中 nhood 是由 01 组成的矩阵,用于指定结构元素邻域。

此语法等效于 imdilate(I,strel(nhood))

J = imdilate(___,packopt) 指定 I 是否为压缩二值图像。

示例

J = imdilate(___,shape) 指定输出图像的大小。

示例

全部折叠

将二值图像读入工作区。

BW = imread('text.png');

创建一个垂直线形结构元素。

se = strel('line',11,90);

用垂直线结构元素膨胀图像并比较结果。

BW2 = imdilate(BW,se);
imshow(BW), title('Original')

figure, imshow(BW2), title('Dilated')

将灰度图像读入工作区。

originalI = imread('cameraman.tif');

创建一个非平坦球形结构元素。

se = offsetstrel('ball',5,5);

膨胀该图像。

dilatedI = imdilate(originalI,se);

显示原始图像和膨胀的图像。

imshowpair(originalI,dilatedI,'montage')

创建两个平面线形结构元素,一个为 0 度,另一个为 90 度。

se1 = strel('line',3,0)
se1 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [1 1 1]
    Dimensionality: 2

se2 = strel('line',3,90)
se2 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [3x1 logical]
    Dimensionality: 2

使用 'full' 选项,依次用两个结构元素膨胀标量值 1。

composition = imdilate(1,[se1 se2],'full')
composition = 3×3

     1     1     1
     1     1     1
     1     1     1

创建一个具有两个点的逻辑三维体。

BW = false(100,100,100);
BW(25,25,25) = true;
BW(75,75,75) = true;

使用球面结构元素膨胀该三维体。

se = strel('sphere',25);
dilatedBW = imdilate(BW,se);

可视化膨胀的三维图像体。

figure
isosurface(dilatedBW, 0.5)

输入参数

全部折叠

输入图像,指定为灰度图像、二值图像或任意维度的压缩二值图像。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

结构元素,指定为标量 strel 对象或 offsetstrel 对象。SE 也可以是 strel 对象或 offsetstrel 对象的数组,在这种情况下,imdilate 连续使用每个结构元素对输入图像执行多次膨胀。

imdilate 可对除数据类型为 logical 的图像之外的所有图像执行灰度膨胀。在这种情况下,结构元素必须为平面结构,并且 imdilate 执行二值膨胀。

结构元素邻域,指定为 01 组成的矩阵。

示例: [0 1 0; 1 1 1; 0 1 0]

压缩二值图像的指示符,指定为下列值之一。

描述

'notpacked'

I 被视为普通数组。

'ispacked'

I 被视为由 bwpack 生成的压缩二值图像。I 必须为二维 uint32 数组,SE 必须为平面二维结构元素。shape 的值必须为 'same'

数据类型: char | string

输出图像的大小,指定为下列值之一。

描述

'same'

输出图像与输入图像大小相同。如果 packopt 的值为 'ispacked',则 shape 必须为 'same'

'full'

计算完全膨胀。

数据类型: char | string

输出参量

全部折叠

膨胀图像,以灰度图像、二值图像或压缩二值图像形式返回。如果输入图像 I 是压缩二值图像,则 J 也是压缩二值图像。JI 具有相同的数据类型。

详细信息

全部折叠

二值膨胀

用 B 对 A 执行二值膨胀(记为 A ⨁ B)的过程定义为如下集合运算:

AB={z|(B^)zA},

其中 B^ 是结构元素 B 的反射。换句话说,它是满足以下条件的像素位置 z 的集合:当反射的结构元素平移至位置 z 时与 A 中的前景像素存在重叠。注意,一些应用使用的膨胀定义不会反射结构元素。

有关二值膨胀的详细信息,请参阅 [1]

灰度膨胀

在一般形式的灰度膨胀中,结构元素有高度。用 B(x, y) 对 A(x, y) 执行灰度膨胀的过程定义为:

(AB)(x,y)=max{A(xx,yy)+B(x,y)|(x,y)DB},

其中 DB 是结构元素 B 的域,A(x, y) 假定为图像域外的 –∞。请注意,一些应用程序使用公式 A(x + x′, y + y′) 而不是 A(x – x′, y – y′) 来定义灰度膨胀。

要创建具有非零高度值的结构元素,请使用语法 strel(nhood,height),其中 height 给出高度值,nhood 对应于结构元素域 DB

灰度膨胀最常使用平面结构元素 (B(x,y) = 0)。使用这种结构元素的灰度膨胀等效于使用局部最大值运算符:

(AB)(x,y)=max{A(xx,yy)|(x,y)DB}.

除了 strel(nhood,height)strel('arbitrary',nhood,height)strel('ball',___) 之外,所有 strel 语法都生成平面结构元素。

提示

  • 如果图像 I 的维度大于结构元素的维度,则 imdilate 函数会将相同的形态学膨胀应用于较高维度上的所有平面。

    您可以使用此行为对 RGB 图像执行形态学膨胀。为 RGB 图像指定二维结构元素,以便对每个颜色通道分别执行运算。

  • 当指定结构元素邻域时,imdilate 通过 floor((size(nhood)+1)/2) 确定 nhood 的中心元素。

  • imdilate 自动利用结构元素对象的分解(如果存在分解)。此外,当使用具有分解的结构元素对象执行二值膨胀时,imdilate 会自动使用二值图像压缩来加速膨胀[3]

参考

[1] Gonzalez, Rafael C., Richard E. Woods, and Steven L. Eddins. Digital Image Processing Using MATLAB. Third edition. Knoxville: Gatesmark Publishing, 2020.

[2] Haralick, Robert M., and Linda G. Shapiro. Computer and Robot Vision. 1st ed. USA: Addison-Wesley Longman Publishing Co., Inc., 1992, pp. 158-205.

[3] Boomgaard, Rein van den, and Richard van Balen. “Methods for Fast Morphological Image Transforms Using Bitmapped Binary Images.” CVGIP: Graphical Models and Image Processing 54, no. 3 (May 1, 1992): 252–58. https://doi.org/10.1016/1049-9652(92)90055-3.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

函数

对象