关于大津阈值法的定义这里不再赘述,直接给出实现代码:
%image_graythresh.m
function level =image_graythresh(I)
%该函数作用:使用大津阈值法找出图像分割的阈值
[M,N] = size(I);
%预定义划分的两组,分别为C1、C2。预定义level,用于存放不同划分时的类间方差
C1 = zeros(1,M*N);
C2 = zeros(1,M*N);
level =zeros(1,M*N);
%求出原图像灰度最大、最小值
max_value =max(max(I));
%定义C1、C2、level的下标,同时起统计个数的作用
columns1 = 1;
columns2 = 1;
columns3 = 1;
%开始遍历
for k =min_value:max_value - 1
%由于预定义个数大于实际个数,因而求均值时不记录多余的零
end
%得到最大类间方差下标从而得到阈值
[~, i] =max(level);
level = min_value +i - 1;
%对阈值做归一化处理
level = level/255;
end
%DIP_exp4_1.m
%该m文件调用Matlab自带函数graythresh以及自编函数image_graythresh对图像进行阈值分割
clc;clear;closeall;
I =imread('cameraman.tif');
subplot(221),imshow(I);title('原图像');
subplot(222),imshow(J);title('大津法阈值分割后图像');
subplot(223),imshow(I);title('原图像');
subplot(224),imshow(K);title('自编大津法阈值分割后图像');
运行DIP_exp4_1.m文件得结果如下: