基本全局阈值分割步骤如下:
(1)设定参数
,并选择一个初始的估计阈值
。
(2)用阈值
分割图像。将图像分成两部分:
是由灰度值大于
的像素组成,
是由灰度值小于或等于
的像素组成。
(3)计算
和
中所有像素的平均灰度值
和
,以及新的阈值
。
(4)如果
,则推出
即为最优阈值;否则,将
赋值给
,并重复步骤(2)~(4),直到获取最优阈值。
其具体实现MATLAB代码如下:
%image_bgt.m
function level =image_bgt(I)
%该函数使用basic global thresholding算法实现二值化
I = im2double(I); %对图像归一化
[M,N] = size(I);
T0 = 0.001; %设置门限
T1 = (max(max(I)) +min(min(I)))/2; %得到初始阈值T1
%定义G1、G2的下标,同时起统计个数的作用
columns1 = 1;
columns2 = 1;
%开始遍历
while 1
for i = 1:M
for j = 1:N
if I(i,j)>T1
G1(columns1) = I(i,j); %得到分组G1
columns1 = columns1 + 1;
else
G2(columns2) = I(i,j); %得到分组G2
columns2 = columns2 + 1;
end
end
end
%计算G1、G2均值
ave1 = mean(G1);
ave2 = mean(G2);
T2 = (ave1 + ave2)/2; %得到新阈值T2
if abs(T2 - T1)break;
end
T1 = T2;
columns1 = 1;
columns2 = 1;
end
level = T2;
end
%DIP_exp4_2.m
%该m文件调用image_bgt函数对图像进行basic global thresholding算法阈值分割
clc;clear;closeall;
I =imread('cameraman.tif');
level =image_bgt(I); %得到basic global thresholding算法阈值
J = im2bw(I,level); %实现图像二值化,即非黑即白
subplot(121),imshow(I);title('原图像');
subplot(122),imshow(J);title('basicglobal thresholding后图像');
运行DIP_exp4_2.m文件得结果如下: