精通Matlab数字图像处理与识别
上QQ阅读APP看书,第一时间看更新

3.5 灰度阈值变换

灰度阈值变换可以将一幅灰度图像转换成黑白的二值图像。用户指定一个起到分界线作用的灰度值,如果图像中某像素的灰度值小于该灰度值,则将该像素的灰度值设置为0,否则设置为255。这个起到分界线作用的灰度值称为阈值,灰度的阈值变换也常被称为阈值化或二值化。

3.5.1 理论基础

灰度阈值变换的函数表达式如下。

式中:T为指定的阈值。

图3.12给出了灰度阈值变换的示意图。

▲图3.12 灰度阈值变换示意图

灰度阈值变换的用途和可扩展性都非常广泛。通过将一幅灰度图像转为二值图像,可以将图像内容直接划分为我们关心的和不关心的两个部分,从而在复杂背景中直接提取出感兴趣的目标。因此它是图像分割的重要手段之一,这一点在第11章中还将进一步阐述。

3.5.2 Matlab实现

Matlab中和阈值变换有关的函数主要有两个——im2bw和graythresh,下面分别介绍。

1.函数im2bw可用于实现阈值变换,调用语法如下。

BW = im2bw(I, level)

参数说明

● 参数I为需要二值化的输入图像;

● 参数level给出了具体的变换阈值,它是一个0~1之间的双精度浮点数。例如输入图像I为灰度范围在0~255之间的uint8图像,如果level=0.5则对应于分割阈值128。

返回值

● BW为二值化后的图像。

2.函数graythresh 可以自适应地确定变换所用的“最优”阈值,调用形式如下。

thresh = graythresh(I)

参数说明

● 参数I为需要计算阈值的输入图像。

返回值

● thresh是计算得到的最优化阈值。

灰度阈值 level既可以由经验确定,也可以使用graythresh 函数来自适应地确定。下面的程序分别展示了如何利用graythresh函数获得的阈值和自行设定的阈值进行阈值变换。

>> I = imread('rice.png'); % 使用Matlab自带的 rice.png 图像

>> thresh = graythresh(I) % 自适应确定阈值

thresh =

0.5137

>> bw1 = im2bw(I, thresh); % 二值化

>>

>> bw2 = im2bw(I, 130/255); % 以130为阈值实现二值化,注意要将此阈值转换至[0,1]区间

>> subplot(1,3,1);imshow(I);title('原图像');

>> subplot(1,3,2);imshow(bw1);title('自动选择阈值');

>> subplot(1,3,3);imshow(bw2);title('阈值130');

上述程序的运行结果如图3.13所示。

▲图3.13 灰度阈值变换效果

由3.13(b)和(c)可见,单纯的灰度阈值化无法很好地处理灰度变化较为复杂的图像,常常给物体的边缘带来误差,或者给整个画面带来噪点。这要通过其他的图像处理手段予以弥补,我们将在10.4节介绍相关的内容。