up目录
一、理论基础
选取阈值往往是通过直方图来选择的,一方面我们可以人为的设置一个阈值进行一次二值化处理达到全局阈值处理的目的,但这样的阈值处理往往效果并不好;另一方面我们也可以先人为的设置一个阈值,之后通过迭代的方法得到最合适的阈值再进行二值化处理,这种方法显然比前者要更加适合。
1.1otsu
otsu,最佳阈值处理也叫最大类间差法。最大类间差法是一种使用类间方差最大的自动确定阈值的方法。算法步骤:
一、首先直方图统计Pi,C1为灰度值小于T的所有像素组成,C2为灰度值大于T的所有像素组成
二、令阈值T从0-255开始,遍历计算C1组和C2组的平均灰度m1和m2,以及全局均值mG,求类间方差的最大值
分配到c1像素的平均灰度m1 = mk/p1;
K级累加均值即T=k时,mk = 求和(i*Pi) i = 0,1,2,...,k
全局均值 mG = 求和(i*Pi) i = 0,1,2...L-1
C1发生的概率 P1 = 求和(Pi) i = 0,1,2,...,k
C2发生的概率 P2 = 1-P1
因为 P1*m1 + P2*m2 = mG,所以m2 = (mG-P1*m1)/P2
而类间方差 = P1(m1 - mG)*(m1 - mG) + P2(m2 - mG)*(m2 - mG)
= P1*P2*(m1-m2)*(m1-m2)
所以,最终变量只需要求mk,P1.全局均值mG是常量,一开始就能算出来
三、阈值确定后,小于等于K的为0,大于K的为255.
1.2区域分割
对于一个典型的模式识别系统,其一般包括数据获取、预处理、区域分割、特征提取、模式分类、训练学习等几个部分。其中区域分割,是指将待分析的数据进行区域划分,将其中感兴趣的数据片段提取出来做进一步处理,而将其它的数据抛弃。区域分割的主要目的,是减少后续处理的数据量。
区域增长法和分裂合并法是基于区域信息的图像分割的主要方法。区域增长有两种方式,一种是先将图像分割成很多的一致性较强的小区域,再按一定的规则将小区域融合成大区域,达到分割图像的目的。另一种实现是给定图像中要分割目标的一个种子区域,再在种子区域基础上将周围的像素点以一定的规则加入其中,最终达到目标与背景分离的目的;分裂合并法对图像的分割是按区域生长法沿相反方向进行的,无需设置种子点。其基本思想是给定相似测度和同质测度。从整幅图像开始,如果区域不满足同质测度,则分裂成任意大小的不重叠子区域,如果两个邻域的子区域满足相似测度则合并。
区域生长是区域分割最基本的方法。所谓区域生长就是一种根据事先定义的准则将像素或者子区域聚合成更大区域的过程。以一组生长点(可以是单个像素,也可以是某个小区域)开始,搜索其邻域,把图像分割成特征相似的若干区域,比较相邻区域与生长点特征的相似性,若它们足够相似,则作为同一区域合并,形成新的生长点。以此方式将特征相似的区域不断合并、直到不能合并为止,最后形成特征不同的各区域。这种分割方式也称区域扩张法。
在实际应用时,要解决三个问题:
1)确定区域的数目,也就是选择一组能正确代表所需区域的生长点像素;
2)选择有意义的特征,也就是确定在生长过程中将相邻区域像素包括进来的方式;
3)确定相似性准则,即获取生长过程停止的准则。
特征相似性是构成与合并区域的基本准则,相邻性是指所取的邻域方式。根据所用的邻域方式和相似性准则的不同,产生各种不同的区域生长法。
将灰度相关的值作为区域生长准则,区域生长可分为单一型(像素与像素)、质心型(像素与区域)和混合型(区域与区域)三种。
二、核心程序
clc;
clear;
close all;
warning off;
f=imread('叶片切片.bmp');
figure,imshow(f);
[T,SM]=graythresh(f);%采用Otsu's方法进行分割,对模糊边界有效果
%T=T*255;
g=im2bw(f,T);
figure,imshow(g);
%%
f=imread('叶片切片.bmp');
figure,imshow(f);
[TGlobal]=graythresh(f);%计算阈值
gGlobal=im2bw(f,TGlobal);%分割图像
figure,imshow(gGlobal);title('ostu方法分割的图像');%采用全局阈值的结果
g=localthresh(f,ones(3),30,1.5,'global');%执行局部阈值处理
SIG=stdfilt(f,ones(3));%stdfilt函数用于计算局部标准差
SIG=im2bw(SIG);
%g=rgb2gray(g);
figure,imshow(SIG,[]);title('局部标准差图像');
figure,imshow(mat2gray(g));title('局部阈值处理的图像');%采用局部阈值的结果
clc;
clear;
close all;
warning off;
f=imread('叶片切片.bmp');
[g,NR,SI,TI]=regiongrow(f,1,0.9);
figure,imshow(SI);
title('种子点');
figure,imshow(TI);
title('通过阈值测试的像素的二值图像');
figure,imshow(mat2gray(g));
title('对种子点进行8连通性分析之后的结果');
up91
三、测试结果