大津法和迭代法

利用ostu方法(大津法)求图像二值分割的全局最优阈值,显示分割后的效果,并与迭代法进行比较。

  • 测试程序
clc
clear
f = imread('Fig1013(a)(scanned-text-grayscale).tif');
figure,subplot(2,2,1), imshow(f)
title('原始图像')
subplot(2,2,2), imhist(f)
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
g = f<=T;
subplot(2,2,3), imshow(g)
title('使用迭代方法得到的阈值处理后的图像')
T2 = Otsu(f);
g=imbinarize(f,T/255);
subplot(2,2,4), imshow(g);
title('使用大津法计算阈值处理后的图像');
  • Otsu.m
function ThreshValue = Otsu(Imag)
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);
  • 结果截图

在这里插入图片描述
部分代码引用于: Otsu.m.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值