图像阈值分割:大津法(Otsu)

    大津法(OTSU法)是由大津于1979 年提出的,对图像I,记T为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。从最小灰度值到最大灰度值遍历T,当T使得方差值δ=w0*w1*(u0-u1)*(u0-u1)最大时,T即为分割的最佳阈值。

  • 测试程序
clear; clc;
I=imread('rice.tif');
subplot(1, 3, 1)
imshow(I);
xlabel('(a) 原始图像');
level = graythresh(I);      %使用MATLAB 函数计算阈值
BW = im2bw(I, level);     
subplot(1, 3, 2)
imshow(BW);
xlabel('(b) graythresh');
disp(['graythresh 计算灰度阈值:', num2str(level*255)]);
T = Otsu(double(I));     %使用大津法计算阈值
disp(['大津法计算灰度阈值:', num2str(T)])
BW = im2bw(I, T/255);
%阈值分割
subplot(1, 3, 3)
imshow(BW);
xlabel('(c) 大津法');
  • 测试结果

  •  源码
function ThreshValue = Otsu(Imag)
% 大津法计算阈值
% 输入:
%    Imag:二维数组,数值表示灰度;
% 输出:
%    ThreshValue:阈值
iMax = max(Imag(:));              % 最大值
iMin = min(Imag(:));               % 最小值
T = iMin:iMax;                        % 灰度值范围
Tval = zeros(size(T));               % 方差
[iRow, iCol] = size(Imag);        % 数据维度大小
imagSize = iRow*iCol;            % 像素点数量
% 遍历灰度值,计算方差
for i = 1 : length(T)
    TK = T(i);
    iFg = 0;          % 前景
    iBg = 0;          % 背景
    FgSum = 0;    % 前景总数
    BgSum = 0;    % 背景总数
    for j = 1 : iRow
        for k = 1 : iCol
            temp = Imag(j, k);
            if temp > TK
                iFg = iFg + 1;      % 前景像素点统计
                FgSum = FgSum + temp;
            else
                iBg = iBg + 1;      % 背景像素点统计
                BgSum = BgSum + temp;
            end
        end
    end
    w0 = iFg/imagSize;      % 前景比例
    w1 = iBg/imagSize;     % 背景比例
    u0 = FgSum/iFg;         % 前景灰度平均值
    u1 = BgSum/iBg;        % 背景灰度平均值
    Tval(i) = w0*w1*(u0 - u1)*(u0 - u1);     % 计算方差
end
[~, flag] = max(Tval);             % 最大值下标
ThreshValue = T(flag);

 

  • 3
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值