imclearborder
隐藏连接到图像边界的光亮结构
说明
使用一个或多个名称-值参量指定如何选择边界结构的选项。例如,J
= imclearborder(___,Name=Value
)imclearborder(I,Borders=["left" "right"])
仅删除触及图像左边界或右边界的结构。
示例
删除连接到图像边界的对象
将二值图像(显微镜下石英柱状颗粒的后处理图像 [2])读入工作区并显示该图像。
originalBW = imread("quartz_columns.png");
imshow(originalBW)
清除图像中连接到图像边界的所有光亮对象,并显示调整后的图像。
BWclearB = imclearborder(originalBW); imshow(BWclearB)
从图像中删除深色边界
将包含具有深色边界的对象的灰度图像读入工作区,并显示它。
I = imread("logo.png");
imshow(I)
将图像取反色并删除边界。显示图像。
J = imcomplement(I); JNoBorder = imclearborder(J); imshow(JNoBorder)
再次对图像取反色,使其还原到原始输入图像对比度。
INoBorder = imcomplement(JNoBorder); imshow(INoBorder)
删除连接到所选图像边界的对象
将二值图像(显微镜下石英柱状颗粒的后处理图像 [2])读入工作区并显示该图像。
originalBW = imread("quartz_columns.png");
imshow(originalBW)
仅删除连接到图像上边界或下边界的对象。
BWclear2B = imclearborder(originalBW, Borders=["top" "bottom"]); imshow(BWclear2B)
连通性对清理边界的影响
创建一个简单的二值图像。
BW = [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 1 1 1 0 0 0 0 1 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];
使用 4 连通清理图像边界上的像素。请注意 imclearborder
不会清理 (5,2) 处的像素,因为在使用 4 连通时,该像素被认定为未连接到 (4,1) 处的边界像素。
BWc1 = imclearborder(BW,Connectivity=4)
BWc1 = 9×9
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 1 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
现在使用 8 连通清理图像边界上的像素。imclearborder
会清理掉 (5,2) 处的像素,因为在使用 8 连通时,该像素被认定为连接到边界像素 (4,1)。
BWc2 = imclearborder(BW,Connectivity=8)
BWc2 = 9×9
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
输入参数
I
— 灰度或二值图像
数值数组 | 逻辑数组
灰度或二值图像,指定为数值或逻辑数组。
示例: I = imread('pout.tif');
数据类型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
conn
— 像素连通性
4
| 8
| 6
| 18
| 26
| 由 0
和 1
组成的 3×3×...×3 矩阵
像素连通性,指定为下表中的值之一或一个由 0
和 1
组成的 3×3×...×3 矩阵。对于二维图像,默认连通性是 8
,对于三维图像,默认连通性是 26
。
值 | 意义 | |
---|---|---|
二维连通 | ||
| 如果像素的边缘相互接触,则这些像素具有连通性。像素的邻域是水平或垂直方向上的相邻像素。 |
当前像素以灰色显示。 |
| 如果像素的边缘或角相互接触,则这些像素具有连通性。像素的邻域是水平、垂直或对角线方向上的相邻像素。 |
当前像素以灰色显示。 |
三维连通 | ||
| 如果像素的面接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:
|
当前像素以灰色显示。 |
| 如果像素的面或边缘接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:
|
当前像素是立方体的中心。 |
| 如果像素的面、边缘或角接触,则这些像素具有连通性。像素的邻域是符合以下条件的相邻像素:
|
当前像素是立方体的中心。 |
对于更高的维度,imclearborder
使用默认值
。conndef
(ndims(I),'maximal')
也可以通过指定由 0
和 1
组成的 3×3×...×3 矩阵,以更通用的方式来定义任意维度的连通性。值为 1
的元素定义相对于 conn
的中心元素的邻域位置。请注意,conn
必须关于其中心元素对称。有关详细信息,请参阅指定自定义连通性。
注意
如果指定非默认连通性,输入图像边缘上的像素可能不会被视为边框像素。例如,如果 conn = [0 0 0; 1 1 1; 0 0 0]
,则第一行和最后一行的元素不被视为边框像素,因为根据连通性定义,它们未连接到图像外部的区域。
注意
如果同时指定 conn
参量和 Connectivity
名称-值参量,则 imclearborder
会根据 Connectivity
设置连通性并忽略 conn
的值。
数据类型: double
| logical
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。
示例: imclearborder(I,Borders=["left" "right"])
可删除触及图像左边界或右边界的光亮结构。
Borders
— 要删除结构的图像边界
字符串向量 | 由 0
和 1
组成的 N×2 矩阵
自 R2023b 起
要删除结构的图像边界,指定为字符串向量或由 0
和 1
组成的 N×2 矩阵:
字符串向量 - 以
"left"
、"right"
、"top"
和"bottom"
的任意组合指定要针对二维图像的哪些边界删除结构。当您将I
指定为二维图像时,Borders
的默认值为["left" "right" "top" "bottom"]
。由
0
和1
组成的 N×2 矩阵 - 指定要针对 N 维图像的哪些边界删除结构,其中每行的第一个元素表示对应维度中的第一个边界,第二个元素表示该维度中的第二个边界。例如,如果Borders(k,1)
是1
,则选择触及第 k 维中第一个边界的结构。如果Borders(k,2)
是1
,则选择触及第 k 个维度中的第二个边界的结构。例如,指定Borders = [0 0; 1 1; 0 0]
等效于指定Borders = ["left" "right"]
。N 维图像的Borders
的默认值为ones(ndims(I),2)
,它指定删除触及图像所有边界的结构。
Connectivity
— 像素连通性
4
| 8
| 6
| 18
| 26
| 由 0
和 1
组成的 3×3×...×3 矩阵
输出参量
J
— 已处理的图像
数值数组 | 逻辑数组
已处理的灰度或二值图像,根据您指定的输入图像,以数值或逻辑数组形式返回。
算法
imclearborder
使用形态学重新构造,其中:
掩膜图像是输入图像。
标记图像边界上的元素等于掩膜图像,其他位置的元素都为 0。
参考
[1] Soille, Pierre. Morphological Image Analysis: Principles and Applications Berlin ; New York: Springer, 1999, 164–165.
[2] Molnar, Ian. Uniform quartz - Silver nanoparticle injection experiment, Digital Rocks Portal (April 2016). Accessed March 10, 2023. https://www.digitalrocksportal.org/projects/44, made available for documentation use under the ODC-BY 1.0 Attribution License.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
imclearborder
支持 C 代码生成(需要 MATLAB® Coder™)。请注意,如果您选择通用的MATLAB Host Computer
目标平台,imclearborder
生成的代码将使用平台特定的预编译共享库。使用共享库可保留性能上的优化,但适用范围仅限于生成的代码所适用的目标平台。有关详细信息,请参阅Image Processing Toolbox 中代码生成支持的类型。最高支持三维输入。
名称-值参量
Connectivity
必须为编译时常量。如果
Borders
值不是数值矩阵形式,则必须将其指定为元胞数组。
版本历史记录
在 R2006a 之前推出R2023b: 改进的性能
imclearborder
函数的性能得到了改进。例如,根据代码运行计时显示,对 imclearborder
的调用比上一版本快 1.7 倍。
function t = imclearborderTimingTest A = imbinarize(imread("rice.png")); f = @() imclearborder(A); t = timeit(f); end
大致的执行时间是:
R2023a:0.85 毫秒
R2023b:0.51 毫秒
代码是在运行 macOS 12.5.1、Intel® Core i9 CPU @ 3.6 GHz 的测试系统上进行计时的。
R2023b: 用于指定针对哪些边界删除结构的选项
使用 Borders
名称-值参量指定要删除所连接的结构的边界。例如,imclearborder(I,Borders=["left" "right"])
删除仅触及图像左边界或右边界的光亮结构。
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)