【图像分割】基于贝叶斯算法阙值图像分割matlab代码

356 阅读3分钟

1 简介

图像预处理是后期继续进行图像相关研究的先驱,准确有效的采用合适的预处理方法起着关键作用;在对贝叶斯公式和相关理论的深入研究后,针对贝叶斯算法处理庞大数据的高效性和处理对象的独立性强的特点,以此为基础设定整体阈值和分段阈值,并且寻找最佳阈值分割图像的方法,对人脸图像进行预处理;仿真实验得出结论表明:此法能利用短时间,清晰明了的分辨出人脸及器官,屏蔽外界影响。

在实际应用中,预处理的主要作用有两方面: 其一,由于受噪声、光照等方面的影响,系统获得的图像的质量不高,所以需要进行预处理,以有利于提取大家感兴趣的信息。这种情况下,要根据系统的不足或环境的影响( 如光照) ,采取有一定针对性的措施。其二,获取的图像信息不符合后续操作的具体要求,这时也需要对图像按照一定的要求进行预处理,例如尺寸,角度方面的要求。总之,预处理是一个承上启下的过程。需要全面考虑整个系统的性能。

2 部分代码

%基于贝叶斯分类算法的图像阈值分割 
clear 
clc
Init = imread('SLR.bmp')
Im=rgb2gray(Init);
subplot(131),imhist(Im),title('直方图') 
subplot(132),imshow(Im) 
title('原始图像') 
[x,y]=size(Im);                    % 求出图象大小 
b=double(Im);                   
zd=double(max(Im))                  % 求出图象中最大的灰度 
zx=double(min(Im))                % 最小的灰度  
T=double((zd+zx))/2;                     % T赋初值,为最大值和最小值的平均值 

count=double(0);                         % 记录几次循环 
while 1                   % 迭代最佳阈值分割算法 
   count=count+1
   S0=0.0; n0=0.0;                   %为计算灰度大于阈值的元素的灰度总值、个数赋值 
   S1=0.0; n1=0.0;                   %为计算灰度小于阈值的元素的灰度总值、个数赋值 
   for i=1:x
       for j=1:y
           if double(Im(i,j))>=T
               S1=S1+double(Im(i,j));  %大于阈域值图像点灰度值累加
               n1=n1+1;                %大于阈域值图像点个数累加
           else 
               S0=S0+double(Im(i,j));  %小于阈域值图像点灰度值累加
               n0=n0+1;                %小于阀域值图像点个数累加
           end 
       end 
   end  
   T0=S0/n0; %求小于阀域值均值
   T1=S1/n1; %求大于阀域值均值
   if abs(T-((T0+T1)/2))<0.1     %迭代至 前后两次阀域值相差几乎为0时 停止迭代。
       break;
   else
      T=(T0+T1)/2;                 %在阈值T下,迭代阈值的计算过程 
  end 
end 

count                                %显示运行次数
T
i1=im2bw(Im,T/255);               % 图像在最佳阈值下二值化 
subplot(133),imshow(i1) 
title('实验结果') 

3 仿真结果

4 参考文献

[1]王筱薇倩. "基于贝叶斯相关理论的最佳阈值分割图像处理." 重庆工商大学学报(自然科学版) 30.3(2013):55-57.

部分理论引用网络文献,若有侵权联系博主删除。