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

来源:互联网 发布:linux sys.h 编辑:程序博客网 时间:2024/05/21 19:36

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

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

原创粉丝点击