标签:
%使用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 提供的代码,感谢博主的分享!
标签:
原文地址:http://www.cnblogs.com/Sherry-sheng/p/5365613.html