MATLAB数字图像处理 图像分割技术 迭代法

本文为博主原创,转载请注明出处:

http://blog.sina.com.cn/s/blog_156532ba70102wmjf.html

迭代法首先选择一个近似阈值T,将图像分割成两部分R1和R2,计算区域R1和R2的均值μ1和μ2,选择新的分割阈值T = (μ1 + μ2)/2 ,重复上述步骤知道μ1和μ2(或T)不再变化为止。这里我已经将迭代法写成了函数,直接调用就可以了。函数源代码如下:

function [ TK ] = diedai( I )  
% 图像分割之迭代法获取阈值  
% 形参I为原始图像灰度图,返回值为阈值    
I = imread('rice.jpg');  
ZMAX = max(I);%取出最大灰度值  
ZMIN = min(I);%取出最小灰度值  
TK = (ZMAX+ZMIN)/2;%初始阈值  
BCal = 1;  
iSize = size(I);%图像大小  
while (BCal)  
    %定义前景和背景数  
    iForeground = 0;  
    iBackground = 0;  
    %定义前景和背景灰度总和  
    ForegroundSUM = 0;  
    BackgroundSUM = 0;  
    for i = 1:iSize(1)  
        for j = 1:iSize(2)  
            tmp = I(i,j);  
            if tmp >= TK  
                %前景灰度值  
                iForeground = iForeground + 1;  
                ForegroundSUM = ForegroundSUM + double(tmp);  
            else  
                iBackground = iBackground + 1;  
                BackgroundSUM = BackgroundSUM + double(tmp);  
            end  
        end  
    end  
    %计算前景和背景的平均值  
    ZO = ForegroundSUM/iForeground;  
    ZB = BackgroundSUM/iBackground;  
    TKtemp = uint8((ZO + ZB)/2);%新的阈值  
    if TKtemp == TK  
        BCal = 0;  
    else  
       TK = TKtemp;  
    end  
    %当阈值不再变化时,迭代结束  
    end  
disp(strcat('迭代后的阈值:',num2str(TK)));  
end  灰度图。

下面简单说下怎么调用,只有一点需要注意,迭代法操作对象为灰度矩阵,不是灰度图的要先转为灰度图。代码如下:

I1 = imread('rice.jpg');  
I = rgb2gray(I1);  
TK = diedai(I);  
newI = imbinarize(I,double(TK/255));  

我这里的‘rice.jpg’图片不是灰度图,所以就要先转为灰度图。
效果图我就不放了。图像分割的方法有很多,所以并不是所有的图都适合用迭代法来分割,有的图甚至效果还会非常差,所以想要获得好的分割效果只能不断尝试好的方法。所以,加油吧!我也是刚学,写的不好请见谅!

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值