OTSU算法(二)

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

close all;clear all;clc

%%

I = imread('C.jpg');

scoreImage0=rgb2gray(I);

scoreImage=double(scoreImage0); 

[height,length]=size(scoreImage); 

totalPixel=height*length; 

% maxPixNumber=max(max(scoreImage)); 

% 这个地方为了以后计算方便 就不这样计算了 而是默认最大的为255   

pixelCount=zeros(1,256);%统计各个像素值的个数 

                                     % 0-256 

for i=1:length     

  for j=1:height

          number=scoreImage(j,i)+1;

          pixelCount(number)=pixelCount(number)+1;

      end 

end   

 

%概率 

pf=pixelCount/totalPixel; 

 

%前向累计概率密度函数 

cpf=zeros(1,256); 

cpf(1)=pf(1); 

for i=2:256

      cpf(i)=cpf(i-1)+pf(i); 

end 

 

%后向累计概率密度函数 

bpf=zeros(1,256); 

bpf(256)=pf(256); 

for j=256:-1:2

      bpf(j-1)=bpf(j)+pf(j-1); 

end      

 

%前向累计期望 

meanForward=zeros(1,256); 

meanForward(1)=1; 

for i=2:256

      meanForward(i)=meanForward(i-1)*(cpf(i-1)/cpf(i))+(pf(i)/cpf(i))*i; 

end   

 

%后向累计期望 

meanBack=zeros(1,256); 

meanBack(max(max(scoreImage)))=max(max(scoreImage)); 

for i=max(max(scoreImage)):-1:2

      meanBack(i-1)=meanBack(i)*(bpf(i)/bpf(i-1))+(pf(i-1)/bpf(i-1))*(i-1); 

end     

 

delta=cpf.*bpf.*(meanForward-meanBack).^2; 

[value,index]=max(delta); 

% 返回的是逻辑的图像 

binariedImage=scoreImage>index;

figure;

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

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

 

此处参考原文为:http://blog.sina.com.cn/s/blog_98ddf7cb0101chu3.html

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值