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 contains an axes object. The hidden axes object with title Original contains an object of type image.

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

Figure contains an axes object. The hidden axes object with title Dilated contains an object of type image.

将灰度图像读入工作区。

originalI = imread('cameraman.tif');

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

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

膨胀该图像。

dilatedI = imdilate(originalI,se);

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

imshowpair(originalI,dilatedI,'montage')

Figure contains an axes object. The hidden axes object contains an object of type image.

创建两个平面线形结构元素,一个为 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)

Figure contains an axes object. The axes object contains an object of type patch.

输入参数

全部折叠

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

数据类型: 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 具有相同的数据类型。

详细信息

全部折叠

二值膨胀

BA 执行二值膨胀(记为 AB)的过程定义为如下集合运算:

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(xx′, yy′) 来定义灰度膨胀。

要创建具有非零高度值的结构元素,请使用语法 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 之前推出

全部展开

另请参阅

函数

对象