matlab图像处理--预迭代阈值分割


预迭代阈值分割:图像分割关键在于找到最佳阈值,通过迭代方式逼近最佳阈值,是图像分割的有效办法。

算法思路:

    例如:1,99 

    取2,50,98都能分割1和99,但是50与1和99差别最大,为最佳阈值。可以看出两个数的中间值为最佳阈值。哪俩个部分呢?

    例如:1,2,98,99

    我们假设40作为阈值,得到1,2作为A部分,得到98,99作为B部分。A部分均值为1.5,B部分均值为98.5,中间值为50,50与假设值40误差过大,继续取50作于阈值重复上述步骤,得到50为最佳阈值。

    但是,在图像中可不止上述几个数的存在。实际上,不停的划分阈值,其A与B部分的均值必然会不断改变,只能用逼近的方法,即设T1为分割阈值时,A与B部分均值的中间值为T2,若T1与T2的误差很小时,也就是T1约等于T2时,此时的T2或者T1就是最佳阈值。

 程序如下:

close;clear;clc;
I=im2double(imread('coins.png'));     %读入图像,转换为双精度类型
level=0.001;                           %预设两阈值之间的误差

max_I=max(I(:));                      %得到最大灰度值
min_I=min(I(:));                      %得到最小灰度值
T1=1/2*(max_I+min_I);                  %假设初始阈值
[M,N]=size(I);                        %得到图像行列数

A_number=0;                           %初始化A部分总像素值
B_number=0;                           %初始化B部分总像素值
A_all=0;                              %初始化A部分总灰度值
B_all=0;                              %初始化B部分总灰度值
for i=1:M
    for j=1:N
        if (I(i,j)>=T1)
            A_number=A_number+1;      %A部分总像素值
            A_all=A_all+I(i,j);       %A部分总灰度值
        elseif (I(i,j)level)              %判断T1与T2之间的误差绝对值是否大于设定值
    T1=T2;                            %把T2赋给T1,反复重复上述程序,直到T2-T1的绝对值小于设定值为止 
    A_number=0;
    B_number=0;
    A_all=0;
    B_all=0;
    for i=1:M
        for j=1:N
            if (I(i,j)>=T1)
                A_number=A_number+1;
                A_all=A_all+I(i,j);
            elseif (I(i,j)



matlab图像处理--预迭代阈值分割_第1张图片


你可能感兴趣的:(图像处理)