imbinarize

通过阈值化将二维灰度图像或三维体二值化

全页折叠

语法

BW = imbinarize(I)

BW = imbinarize(I,method)

BW = imbinarize(I,T)

BW = imbinarize(I,'adaptive',Name,Value)

说明

示例

BW = imbinarize(I) 通过将所有高于全局阈值的值替换为 1 并将所有其他值设置为 0,从二维或三维灰度图像 I 创建二值图像。默认情况下,imbinarize 使用 Otsu 方法,该方法选择特定阈值来最小化阈值化的黑白像素的类内方差 [1]imbinarize 使用包含 256 个 bin 的图像直方图来计算 Otsu 阈值。要使用不同直方图,请参阅 otsuthresh

示例

BW = imbinarize(I,method) 使用 method 指定的阈值化方法('global' 或 'adaptive')从图像 I 创建二值图像。

BW = imbinarize(I,T) 使用阈值 T 从图像 I 创建二值图像。T 可以是指定为标量亮度值的全局图像阈值,也可以是指定为亮度值矩阵的局部自适应阈值。

示例

BW = imbinarize(I,'adaptive',Name,Value) 使用名称-值对组从图像 I 创建二值图像,以控制自适应阈值的各个方面。

示例

全部折叠

使用全局阈值对图像进行二值化

尝试此示例Copy Command  Copy Code

将灰度图像读入工作区。

I = imread('coins.png');

将图像转换为二值图像。

BW = imbinarize(I);

将原始图像与其二值版本并排显示。

figure
imshowpair(I,BW,'montage')

使用局部自适应阈值对图像进行二值化

尝试此示例Copy Command  Copy Code

将灰度图像读入工作区。

I = imread('rice.png');

将灰度图像转换为二值图像。

BW = imbinarize(I, 'adaptive');

将原始图像与其二值版本并排显示。

figure
imshowpair(I,BW,'montage')

对前景比背景暗的图像进行二值化

尝试此示例Copy Command  Copy Code

将灰度图像读入工作区并显示它。

I = imread('printedtext.png');
figure
imshow(I)
title('Original Image')

使用自适应阈值将图像转换为二值图像。使用 ForegroundPolarity 参数指示前景比背景暗。

BW = imbinarize(I,'adaptive','ForegroundPolarity','dark','Sensitivity',0.4);

显示图像的二值版本。

figure
imshow(BW)
title('Binary Version of Image')

使用全局阈值对三维体进行二值化

尝试此示例Copy Command  Copy Code

将三维灰度强度数据加载到工作区中。

load mristack;
V = mristack;

查看三维体。

figure
slice(double(V),size(V,2)/2,size(V,1)/2,size(V,3)/2)
colormap gray 
shading interp

将强度三维体转换为二值三维体。

J = imbinarize(V);

查看二值三维体。

figure
slice(double(J),size(J,2)/2,size(J,1)/2,size(J,3)/2)
colormap gray 
shading interp

输入参数

全部折叠

I - 输入图像
二维灰度图像 | 三维灰度图像体

输入图像,指定为二维灰度图像或三维灰度图像体。imbinarize 要求数据类型 double 和 single 的像素值在 [0, 1] 范围内。您可以使用 rescale 函数将像素值调整到所需范围。

注意

imbinarize 将 RGB 图像解释为三维体灰度图像,不会单独对每个通道进行二值化。要从 RGB 图像生成二值图像,首先使用 rgb2gray 将图像转换为灰度图像。

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

method - 用于二值化图像的方法
'global' (默认) | 'adaptive'

用于二值化图像的方法,指定为下列值之一。

意义

'global'

用 Otsu 方法计算全局图像阈值。有关 Otsu 方法的详细信息,请参阅 graythresh

'adaptive'

使用每个像素周围的局部一阶图像统计量来计算局部自适应图像阈值。有关详细信息,请参阅 adaptthresh。如果图像包含 Inf 或 NaN,则 imbinarize 对于 'adaptive' 方法的行为是未定义的。Inf 或 NaN 的传播可能不会局限于 Inf 和 NaN 像素周围的邻域。

数据类型: char | string

T - 阈值
数值标量 | 数值数组

亮度阈值,指定为由范围 [0, 1] 内的值组成的数值标量或数值数组。

  • 如果 T 是数值标量,则 imbinarize 将 T 解释为全局图像阈值。使用 graythresh 或 otsuthresh 计算全局图像阈值。

  • 如果 T 是数值数组,则 imbinarize 将 T 解释为局部自适应阈值。使用 adaptthresh 计算局部自适应阈值。

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

名称-值参数

示例: BW = imbinarize(I,'adaptive','Sensitivity',0.4);

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN

Sensitivity - 自适应阈值的敏感度因子
0.50 (默认) | [0, 1] 范围内的数值

自适应阈值的敏感度因子,以逗号分隔的对组形式指定,其中包含 'Sensitivity' 和一个 [0, 1] 范围内的数值。高敏感度值会使更多像素阈值化为前景,但存在混入部分背景像素的风险。

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

ForegroundPolarity - 确定哪些像素被视为前景像素
'bright' (默认) | 'dark'

确定将哪些像素视为自适应阈值化的前景像素,以逗号分隔的对组形式指定,其中包含 'ForegroundPolarity' 和下列值之一。

意义

'bright'

前景比背景亮。

'dark'

前景比背景暗

数据类型: char | string

输出参数

全部折叠

BW - 输出二值图像
逻辑矩阵 | 逻辑数组

输出二值图像,以与 I 大小相同的逻辑矩阵或逻辑数组形式返回。

数据类型: logical

提示

  • 要从索引图像生成二值图像,首先使用 ind2gray 将图像转换为灰度图像。

算法

'adaptive' 方法使用局部自适应阈值对图像进行二值化。imbinarize 使用像素邻域的局部均值强度计算每个像素的阈值。这种方法也称为 Bradley 方法 [2]'adaptive' 方法使用约为图像大小 1/8 的邻域大小(由 2*floor(size(I)/16)+1 求得)。要使用其他一阶局部统计量或不同的邻域大小,请参阅 adaptthresh

参考

[1] Otsu, N., "A Threshold Selection Method from Gray-Level Histograms." IEEE Transactions on Systems, Man, and Cybernetics. Vol. 9, No. 1, 1979, pp. 62–66.

[2] Bradley, D., G. Roth, "Adapting Thresholding Using the Integral Image," Journal of Graphics Tools. Vol. 12, No. 2, 2007, pp.13–21.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐