基于matlab的图像阈值分割算法---参数法(自动阈值选择)

1 迭代法
迭代法的的设计思想是,开始时选择一个阈值作为初始估计值,然后按某种策略不断的改进这一估计值,直到满足给定的准则为止。在迭代过程中,关键之处在于选择什么样的阈值改进策略。好的改进策略应该具备两个特征:一是能够快速收敛,二是在每一个迭代过程中,新产生的阈值优于上一次的阈值。

代码:

 %迭代法

clc;
clear all;
f=imread('H:\数字图像处理\图片\标准图片集\baboon.bmp');
f=rgb2gray(f);                                   
f=im2double(f);                                 
T=0.5*(min(f(:))+max(f(:)));
done=false;
while ~done
    g=f>=T;
    Tn=0.5*(mean(f(g))+mean(f(~g)));
    done=abs(T-Tn)<0.1;
    T=Tn;
end         
T
r=im2bw(f,T);                               
figure,imshow(f),title('原图');         
figure,imshow(r),title('迭代法');  

2 Otsu
该算法是日本人Otsu提出的一种动态阈值分割算法。它的主要思想是按照灰度特性将图像划分为背景和目标2部分,划分依据为选取门限值,使得背景和目标之间的方差最大。(背景和目标之间的类间方差越大,说明这两部分的差别越大,当部分目标被错划分为背景或部分背景错划分为目标都会导致这两部分差别变小。因此,使用类间方差最大的分割意味着错分概率最小。)这是该方法的主要思路。
代码:

%Ostu
 clc;
clear all;
I=imread('H:\数字图像处理\图片\标准图片集\baboon.bmp');
I=rgb2gray(I);
I=double(I);
figure,imshow(uint8(I)),title('原图');
[m,n]=size(I);
Th=Otsu(I);
Th
for i=1:m
    for j=1:n
        if I(i,j)>=Th
            I(i,j)=255;
        else
            I(i,j)=0;
       end
    end
end
figure,imshow(I),title('Otsu法');   

 function T=Otsu(I)
[m,n]=size(I);
I=double(I);
count=zeros(256,1); 
pcount=zeros(256,1);
for i=1:m
    for j=1:n
       pixel=I(i,j);
        count(pixel+1)=count(pixel+1)+1;
    end
end
dw=0;
for i=0:255
    pcount(i+1)=count(i+1)/(m*n);
    dw=dw+i*pcount(i+1);
end
Th=0;
Thbest=0;
dfc=0
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值