Ostu最大类间差方法

 

Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为:

1) 先计算图像的直方图,即将图像所有的像素点按照0~255256bin,统计落在每个bin的像素点数量

2) 归一化直方图,也即将每个bin中像素点数量除以总的像素点

3) i表示分类的阈值,也即一个灰度级,从0开始迭代

4) 通过归一化的直方图,统计0~i 灰度级的像素(假设像素值在此范围的像素叫做前景像素) 所占整幅图像的比例w0,并统计前景像素的平均灰度u0;统计i~255灰度级的像素(假设像素值在此范围的像素叫做背景像素) 所占整幅图像的比例w1,并统计背景像素的平均灰度u1

5) 计算前景像素和背景像素的方差 g = w0*w1*(u0-u1) (u0-u1)

6) i++;转到4),直到i256时结束迭代

7)将最大g相应的i值作为图像的全局阈值

 

 

 

clear all;close all;clc

img=imread('C:\Users\hjd\Desktop\test1.jpg');

if ndims(img)==3

    img = rgb2gray(img);

end

 [count, x] = imhist(img);

ostu_result = [];

sum_pixel = sum(count(:));

count_w = count(:)/sum_pixel;

count_u = count(:).*x(:);

for i=1:256

    w0 = sum(count_w(1:i));

    sum_u0 = sum(count_u(1:i));

    u0 = sum_u0/sum(count(1:i));

    if i==256

        w1=0;

        u1=0;

    else

        w1 = sum(count_w(i+1:end));

        sum_u1 = sum(count_u(i+1:end));

        u1 = sum_u1/sum(count(i+1:end));

    end

    ostu_result(i) = w0*w1*(u0-u1)^2;

end

[index,maxValue]=max(ostu_result);

level = graythresh(img);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值