新浪博客

[转载]Matlab 数字图像 阈值处理

2016-04-13 10:02阅读:

10.3 阈值处理
由于实现的直观性和简单性,图像阈值处理在图象分割应用中占有重要的地位。简单的阈值处理在2.72节(记录在基本原理)已经讨论过了,本节将讨论自动选择阈值的方法,此外还要介绍一种依照局部图像邻域的性质来改变阈值的方法。
假设如图10.12所示的直方图对应于图像f(x, y),采用这种方法,目标和背景象素会具有两种主要模式的灰度级。一种从背景上提取对象的明显方法是选取一个阈值T来分离这两种模式。任何满足(f(x, y) geq T)的点(x, y)称为对象点,其他点则称为背景点。
[g(x, y) = begin{cases} &1, f(x, y) geq T \ &0 f(x, y) leq T]
T为常数时,称为全局阈值处理。T可变时,称为局部阈值处理。
[转载]Matlab <wbr>数字图像 <wbr>阈值处理
10.3.1 全局阈值处理
选取阈值的一种方法是目视检查直方图。图10.12 所示的直方图有两个不同的模式;正如结果所示,我们可以很容易地选取一个阈值T来分开它们。另一种选择T的方法是反复试验,挑选不同的阈值,知道观察者觉得产生了较好的结果时为止。这在交互环境下特别有效,例如,这种方法允许用户使用一个图形控件(如滑动条)来改变阈值并可立即看到结果。
自动确定阈值的迭代步骤如下:
1. 为T选取一个厨师估计值(建议厨师估计值为图像中最大亮度值和最小亮度值的中间值)
2. 使用T分割图像。这会产生两组象素:亮度值大于等于T的所有象素
组成的G1,亮度值小于T的G2。
3. 计算G1和G2范围呢你的象素的平均亮度值(mu_1, mu_2)
4. 计算一个新阈值:(T = frac{1}{2}(mu_1 + mu_2))
5. 重复步骤2到步骤4,直到连续迭代中T的差比预先指定的参数T0小为止
工具箱中提供了一个graythresh函数,调用语法为
T = graythresh(f)
其中,f为输入图像,T是产生的阈值。为了分割图像,我们在函数im2bw中使用阈值T。因为阈值已经被归一化到范围[0, 1]内,因此必须在使用阈值之前将其缩放到合适的范围,例如,若f是uint8类图像,则我们在使用T之前要让T乘以255.
例10.7 计算全局阈值
(1)使用迭代的方法求阈值
f = imread('Fig1013(a)(scanned-text-grayscale).tif');
T = 0.5 * (double(min(f(:))) + double(max(f(:))));
done = false;
while ~done
g = f >= T;
Tnext = 0.5*(mean(f(g)) + mean(f(~g)));
done = abs(T - Tnext) < 0.5;
T = Tnext;
end

(2)使用工具箱函数
T2 = graythresh(f) * 255;

计算结果
T = 101.4717
T2 = 101

阈值分割
T2 = graythresh(f);
figure, imshow(f);
BW = im2bw(f, T2);
figure, imshow(BW)

[转载]Matlab <wbr>数字图像 <wbr>阈值处理
[转载]Matlab <wbr>数字图像 <wbr>阈值处理

10.3.2 局部阈值处理
如果北京照明不均匀,有可能导致全局阈值处理无效,这时,就需要进行局部阈值处理。
来自为知笔记(Wiz)

我的更多文章

下载客户端阅读体验更佳

APP专享