主要内容

bwmorph3

二进制体积上的形态运算

描述

例子

J= bwmorph3 (V操作应用由字符串或字符向量指定的形态操作操作到二进制体积Vbwmorph3在逻辑卷中返回操作的结果J

例子

全部折叠

加载3-D MRI体积数据并创建一个二进制体积。使用volshow查看卷数据。

负载mristack;BW1 = mristack > 127;volshow (BW1);

要删除被设置为1且被设置为0的体素包围的体素,执行“清洁”对卷数据的操作。当确定要去除哪些体素时“清洁”运算考虑26个相邻体素。使用volshow查看结果。

BW2 = bwmorph3 (BW1,“清洁”);volshow (BW2);

为了进行比较,执行'大多数的对卷数据的操作。“大多数的操作执行与'干净的操作,但只有在目标体素的邻域中超过一半(大多数)的体素被设置为1时才能保留体素。当决定保留哪些体素时,大多数的运算也考虑26个相邻体素。使用volshow查看结果。

BW3 = bwmorph3 (BW1,“大多数”);volshow (BW3);

这个例子展示了每种形态操作是如何支持的金宝appbwmorph3适用于简单的卷。

做一个9乘9乘3的0的长方体,在它的中心包含一个3乘3乘3的1的立方体。

innercube = 1 (3, 3, 3);Cube_center = padarray(innercube,[3 3],0,“两个”
cube_center = cube_center (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

使用移除操作关闭像素

设置内部立方体的中心体素为0使用“删除”操作。该操作设置any的值“上”体素完全被“上”体素,“关闭”

remove_center = bwmorph3 (cube_center,“删除”
remove_center =9 x9x3逻辑阵列remove_center (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 remove_center (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 remove_center (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

用填充操作设置像素为开

设置内部立方体的中心体素为1使用“填满”操作。该操作设置any的值“关闭”体素完全被“上”体素,“上”

fill_center = bwmorph3 (remove_center,“填满”
fill_center =9 x9x3逻辑阵列fill_center (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fill_center (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 fill_center (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

使用清除操作移除未连接像素

使用“清洁”操作来移除任何被设置为的游离体素1但与体积中的一个分量无关。这个例子通过在第二个平面上设置一个随机体素为1来创建一个散乱体素,然后使用“清洁”操作将其移除。

cube_center (2 2 2) = 1
cube_center = cube_center (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center (:,: 2) = 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_center (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cube_cleaned = bwmorph3 (cube_center,“清洁”
cube_cleaned =9 x9x3逻辑阵列cube_cleaned (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_cleaned (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 cube_cleaned (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

发现大多数

找到大多数的cube_center使用'大多数的操作。只有当体素周围的26个连接邻域中超过一半(大多数)的体素被设置为时,该操作才能保留体素1

cube_major = bwmorph3 (cube_center,“大多数”
cube_major =9 x9x3逻辑阵列cube_major (:: 1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cube_major (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 cube_major (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

创建一个类似于骨架的形状

为了说明分支点和端点选项,创建另一个小矩阵,这次是一个线性形状,比如骨架。

x1 =眼(5);x2 = 0 (5);x2 (3) = 1;x3 = x2;形状=猫(3 x1, x2, x3)
形状=形状(:,:1)= 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1形状(:,:2)= 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0形状(:,:,3)= 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

找到终点

找到形状的端点使用“端点”操作。该形状有三个端点,一个在第一个平面的对角线的两端,另一个在第三个平面的通过中心的直线的末端。

shape_endpts = bwmorph3(形状,“端点”
shape_endpts =5 x5x3逻辑阵列shape_endpts (:: 1) = 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 shape_endpts (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 shape_endpts (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

发现分支点

找到形状的分支点使用的分歧点操作。该形状有一个单独的分支点,在对角线和水平线的交汇处。

shape_brpts = bwmorph3(形状,的分歧点
shape_brpts =5 x5x3逻辑阵列shape_brpts (:: 1) = 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 shape_brpts (:,: 2) = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 shape_brpts (:,:, 3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

输入参数

全部折叠

输入音量,指定为数字或逻辑数组。对于数字输入,任何非零像素都被认为是1真正的).

bwmorph3接受1-D、2-D或3-D数组。如果指定1-D或2-D输入数组,则bwmorph3执行为3-D体定义的形态操作。如果你想要2d行为,使用bwmorph代替。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

要执行的形态操作,指定为以下字符向量或字符串标量之一。有关这些操作的示例,请参见形态运算图解

操作

描述

插图

的分歧点

找出骨架的分支点。分支点是多个分支交汇处的体素。

为了找到分支点,图像必须被骨架化。要创建一个骨架图像,请使用bwskel

“清洁”

删除孤立的体素,将它们设置为0。孤立体素是一个单独的26连接体素,被设置为1被设置为的体素包围0

“端点”

找到骨架的端点。端点是分支末端的体素。

注意:要找到端点,图像必须骨架化。要创建一个骨架图像,请使用bwskel

“填满”

填充孤立的内部体素,设置它们为1.孤立的内部体素是被设置为的个体体素0被设置为的体素包围(6连接)1

“大多数”

保持体素设置为1如果在其3 × 3 × 3的邻域中有14个或更多的体素(大多数),则26连接的邻域被设置为1;否则,设置体素为0

看到形态运算图解

“删除”

删除内部体素,设置为0.内部体素是被设置为的个体体素1被设置为的体素包围(6连接)1

数据类型:字符|字符串

输出参数

全部折叠

形态操作后的卷,作为与输入卷大小相同的逻辑数组返回V

提示

  • 要在三维空间上进行侵蚀或膨胀的形态操作,请使用imerodeimdilate函数,指定构造元素的(3,3,3)

  • 要在3-D体积上执行形态闭合、打开、顶帽过滤或底帽过滤,请使用imcloseimopenimtophat,或imbothat函数,指定构造元素的(3,3,3)

介绍了R2018a