Ostu算法原理

%使用OTSU算法进行二值化后的图像

close all;clear all;clc

%%

I = imread('C.jpg');

I=rgb2gray(I);

%%

I1=im2uint8(I(:));

depth=256;

imhist(I1,depth);

counts=imhist(I1,depth);%灰度直方图中,横坐标表示像素的灰度级别,纵坐标为像素点的个数

%  imhist(I,n)  计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。

%  imhist(X,map)  计算和显示索引图像x的直方图,map为调色板。

%  [counts,x] = imhist(...)  返回直方图数据向量counts或相应的色彩值向量x。

w=cumsum(counts);  % cumsum函数通常用于计算一个数组各行的累加值                   

            % 此处 应为计算累计的像素个数

ut=counts .* (1:depth)'; u=cumsum(ut);  % 此处 应为统计累计的灰度总值

MAX=0;

level=0;

for t=1:depth    

  u0=u(t,1)/w(t,1);  % t为分割阈值时,前景图像均值    

  u1=(u(depth,1)-u(t,1))/(w(depth,1)-w(t,1)); % t为分割阈值时,背景图像均值    

  w0=w(t,1); %前景图像累计像素点    

  w1=w(depth,1)-w0;  %背景图像累计像素点    

  g=w0*w1*(u1-u0)*(u1-u0);  %目标函数    

  if g > MAX        

    MAX=g;        

    level = t;    

  end  %g取得最大值时 即取得最大类间方差

end level=level/256; %二值图

BW = im2bw(I,level);

figure;

subplot(1,2,1);imshow(I); title('原图');

subplot(1,2,2);imshow(BW); title('处理图');

本段代码参考了http://www.xuebuyuan.com/944317.html 提供的代码,感谢博主的分享!

转载于:https://www.cnblogs.com/Sherry-sheng/p/5365613.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值