码迷,mamicode.com
首页 > 编程语言 > 详细

Ostu算法原理

时间:2016-04-07 22:17:56      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:

%使用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 提供的代码,感谢博主的分享!

Ostu算法原理

标签:

原文地址:http://www.cnblogs.com/Sherry-sheng/p/5365613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!