Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

imbinarize

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

说明

示例

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 创建二值图像,以控制自适应阈值的各个方面。

示例

全部折叠

将灰度图像读入工作区。

I = imread('coins.png');

将图像转换为二值图像。

BW = imbinarize(I);

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

figure
imshowpair(I,BW,'montage')

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

将灰度图像读入工作区。

I = imread('rice.png');

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

BW = imbinarize(I, 'adaptive');

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

figure
imshowpair(I,BW,'montage')

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

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

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

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

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

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

显示图像的二值版本。

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

Figure contains an axes object. The axes object with title Binary Version of Image contains an object of type image.

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

load mristack;
V = mristack;

查看三维体。

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

Figure contains an axes object. The axes object contains 3 objects of type surface.

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

J = imbinarize(V);

查看二值三维体。

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

Figure contains an axes object. The axes object contains 3 objects of type surface.

输入参数

全部折叠

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

注意

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

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

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

意义

"global"

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

"adaptive"

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

数据类型: char | string

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

  • 如果 T 是数值标量,则 imbinarizeT 解释为全局图像阈值。使用 graythreshotsuthresh 计算全局图像阈值。

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

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

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。

示例: BW = imbinarize(I,"adaptive",Sensitivity=0.4); 将灵敏度因子指定为 0.4

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: BW = imbinarize(I,"adaptive","Sensitivity",0.4); 将灵敏度因子指定为 0.4

自适应阈值化的敏感度因子,指定为 [0, 1] 范围内的数值。高敏感度值会使更多像素阈值化为前景,但存在混入部分背景像素的风险。

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

确定将哪些像素视为自适应阈值化的前景像素,指定为下列值之一。

意义

"bright"

前景比背景亮。

"dark"

前景比背景暗

数据类型: char | string

输出参数

全部折叠

输出二值图像,以与 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.

扩展功能

版本历史记录

在 R2016a 中推出