一、函数概述
众所周知,im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二值图像,便于后续的图像分析和处理。
imbinarize的基本用法:
BW = imbinarize(I)
BW = imbinarize(I,method)
BW = imbinarize(I,T)
BW = imbinarize(I,'adaptive',Name,Value)
- I:输入的二维灰度图像或三维灰度图像体。数据类型可以是single、double、int8、int16、int32、uint8、uint16、uint32。如果输入的是RGB图像,imbinarize会将其视为三维体灰度图像,而不会单独对每个通道进行二值化。
- method:指定二值化图像的方法,可以是'global'(默认)或'adaptive'。
- 因此,BW = imbinarize(I) 等价于BW=im2bw(I,graythresh(I))
- T:阈值,可以是指定为标量亮度值的全局图像阈值,也可以是指定为亮度值矩阵的局部自适应阈值。阈值应在范围[0, 1]内。
- Name,Value:用于控制自适应阈值的参数对组,如'Sensitivity'(敏感度因子)和'ForegroundPolarity'(前景极性)。
- BW:输出的二值图像,是一个与输入图像I大小相同的逻辑矩阵或逻辑数组。
二、参数详解
1.全局阈值方法
1.1默认情况下,imbinarize使用Otsu方法计算全局阈值。Otsu方法通过最小化阈值化后的黑白像素的类内方差来选择阈值。
1.2可以使用graythresh或otsuthresh函数预先计算全局阈值,然后传递给imbinarize函数。
2.自适应阈值方法
2.1自适应阈值方法根据局部像素统计进行阈值化。imbinarize使用像素邻域的局部均值强度计算每个像素的阈值。
2.2可以使用'Sensitivity'参数调整自适应阈值的敏感度因子。默认值为0.5,取值范围为[0, 1]。敏感度越高,越多的像素会被阈值化为前景。
2.3可以使用'ForegroundPolarity'参数指定前景极性。默认值为'bright'(前景比背景亮),可选值为'dark'(前景比背景暗)。
三、应用示例程序源代码及主要运行结果
请使用imbinarize函数和其他有关图像处理函数对coins.png和rice.png函数进行背景分割。
1.程序源代码
clear all;
close all;
clc;
% 读取灰度图像
I = imread('coins.png');
% 使用全局阈值对图像进行二值化
BW = imbinarize(I);%等价于BW=im2bw(I,graythresh(I));
% 显示原始图像和二值图像
figure;
imshowpair(I, BW, 'montage');
title('原始图像和imbinarize处理后的图像');
BWfill=imfill(BW,'holes');
figure,imshow(BWfill);%孔洞填充
I2=imread('rice.png');
BW2=imbinarize(I2);%使用全局阈值分割
BW3=imbinarize(I2,'adaptive');%使用局部自适应阈值分割
figure,
subplot(1,3,1),imshow(I2),title('原始图像');
subplot(1,3,2),imshow(BW2),title('全局阈值分割后图像'); %对大米分割效果欠佳
subplot(1,3,3),imshow(BW3),title('局部自适应阈值分割后图像'); %对大米分割效果较好
RiceBW=bwareaopen(BW3,40);
figure,imshow(RiceBW);
- 主要运行结果
四、结果与讨论
由上可知,巧妙使用imbinarize函数可以较好地实现图像的快速分割,并减少代码行数。