图像分割的一些简单实现

图像分割中阈值的自动选取的研究及其算法实现

图像分割是图像处理这门学科中的基础难题,基于阈值的分割则又是图像分割的最基本的难题之一,其难点在于阈值的选取。事实证明,阈值的选择的恰当与否对分割的效果起着决定性的作用。由于阈值选取对图像分割的基础性,本文主要在【 1 】、【 2 】、【 3 】、【 4 】等的基础上,对一些当前流行的阈值选取算法做了探讨、实现和比较。多阈值分割虽然能进一步提高图像分割的质量,但由于它只是分割技巧的处理问题,而与单阈值分割并无本质的区别。因此本文并不对多阈值分割进行讨论,而只考虑单阈值分割的情形。

1. 双峰法

双峰法的原理及其简单:它认为图像由前景和背景组成,在灰度直方图上,前后二景都形成高峰,在双峰之间的最低谷处就是图像的阈值所在。根据这一原理,我们给出了它的实现,部分代码如下( Pascal 语言描述,以下同):

//intPeak 、 intPeak2 、 intValley :峰值和直方图值

//intIndx: :相应的灰度值

intPeak,intIndx,intPeak2,intIndx2,intValley,intValleyIndx:integer;

// 初始双峰值

intPeak:=0;

intPeak2:=0;

// 取得第一峰值

for intLoop:=0 to 255 do

if intPeak<=intGrayLevel[intLoop] then

begin

intPeak:=intGrayLevel[intLoop];

intIndx:=intLoop;

end;

// 取得第二峰值

for intLoop:=0 to 255 do

Begin

if (intPeak2<=intGrayLevel[intLoop]) and (intLoop<>intIndx) then

begin

intPeak2:=intGrayLevel[intLoop];

intIndx2:=intLoop;

end

end;

// 取得双峰之间的谷值

intValley:=intSize;

if intIndx2

  1<intindx do="" for="" if="" intindx="" intloop:="intIndx2" intvalley="" then="" to="">intGrayLevel[intLoop] then 
  2
  3begin 
  4
  5intValley:=intGrayLevel[intLoop]; 
  6
  7intValleyIndx:=intLoop; 
  8
  9end; 
 10
 11从分割的效果来看,当前后景的对比较为强烈时,分割效果较好;否则基本无效。 
 12
 132.  迭代法 
 14
 15迭代法是基于逼近的思想,其步骤如下: 
 16
 171.  求出图象的最大灰度值和最小灰度值,分别记为  ZMAX  和  ZMIN  ,令初始阈值  T0=(ZMAX+ZMIN)/2  ; 
 18
 192.  根据阈值  TK  将图象分割为前景和背景,分别求出两者的平均灰度值  ZO  和  ZB  ; 
 20
 213.  求出新阈值  TK+1=(ZO+ZB)/2  ; 
 22
 234.  若  TK=TK+1  ,则所得即为阈值;否则转  2  ,迭代计算。 
 24
 25以下给出迭代求阈值的部分实现: 
 26
 27//  阈值初始为  0 
 28
 29intThresholdVal:=0; 
 30
 31intThresholdVal2:=0; 
 32
 33//  总灰度值 
 34
 35intTotalGrayLevel:=0; 
 36
 37for intLoop:=0 to 255 do 
 38
 39if intGrayLevel[intLoop]&lt;&gt;0 then 
 40
 41intTotalGrayLevel:=intTotalGrayLevel+intLoop*intGrayLevel[intLoop]; 
 42
 43//  求出初始最大灰度值 
 44
 45for intLoop:=0 to 255 do 
 46
 47if intGrayLevel[intLoop]&gt;0 then 
 48
 49begin 
 50
 51intLGrayLevel:=intLoop; 
 52
 53intThresholdVal:=intLoop; 
 54
 55break; 
 56
 57end; 
 58
 59//  求出初始最小灰度值和初始阈值 
 60
 61for intLoop:=255 downto 0 do 
 62
 63if intGrayLevel[intLoop]&gt;0 then 
 64
 65begin 
 66
 67intRGrayLevel:=intLoop; 
 68
 69intThresholdVal:=(intThresholdVal+intLoop)div 2; 
 70
 71break; 
 72
 73end; 
 74
 75//  迭代求解 
 76
 77while intThresholdVal&lt;&gt;intThresholdVal2 do 
 78
 79begin 
 80
 81intThresholdVal2:=intThresholdVal; 
 82
 83intCount:=0; 
 84
 85intLGrayLevel:=0; 
 86
 87for intLoop:=0 to intThresholdVal do 
 88
 89if intGrayLevel[intLoop]&lt;&gt;0 then 
 90
 91begin 
 92
 93intCount:=intCount+intGrayLevel[intLoop]; 
 94
 95intLGrayLevel:=intLGrayLevel+intLoop*intGrayLevel[intLoop]; 
 96
 97end; 
 98
 99intRGrayLevel:=intTotalGrayLevel-intLGrayLevel; 
100
101intLGrayLevel:=intLGrayLevel div intCount; 
102
103intRGrayLevel:=intRGrayLevel div (intSize-intCount); 
104
105intThresholdVal:=(intLGrayLevel+intRGrayLevel)div 2; 
106
107end; 
108
109迭代所得的阈值分割的图象效果良好。  基于迭代的阈值能区分出图像的前景和背景的主要区域所在,但在图像的细微处(如图  1  中的浅色线条)还没有很好的区分度。 
110
111但令人惊讶的是,对某些特定图象,微小数据的变化却会引起分割效果的巨大改变,  两者的数据只是稍有变化,但分割效果却反差极大,个  中原因还有待进一步研究。 
112
1133.  大津法(  OTSU  法) 
114
115大津法由大津于  1979  年提出,对图像  Image  ,记  t  为前景与背景的分割阈值,前景点数占图像比例为  w0  ,  平均灰度为  u0  ;背景点数占图像比例为  w1  ,平均灰度为  u1  。图像的总平均灰度为:  u=w0*u0+w1*u1  。从最小灰度值到最大灰度值遍历  t  ,当  t  使得值  g=w0*(u0-u)2+w1*(u1-u)2  最大时  t  即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值  t  分割出的前景和背景两部分构成了整幅图像,而前景取值  u0  ,概率为  w0  ,背景取值  u1  ,概率为  w1  ,总均值为  u  ,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量  ,  方差值越大  ,  说明构成图像的两部分差别越大  ,  当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。 
116
117直接应用大津法计算量较大,因此我们在实现时采用了等价的公式  g=w0*w1*(u0-u1)2  。部分计算过程如下: 
118
119//  遍历所有灰度值求  Max g  。 
120
121for intCurrentLevel:=0 to intArrLen do 
122
123begin 
124
125if intSclGrayLevel[intCurrentLevel]=0 then 
126
127continue 
128
129else 
130
131begin 
132
133//  计算当阈值为  intCurrentLevel  时的  g 
134
135intCount:=0; 
136
137intSumPels:=0; 
138
139for intLoop:=0 to intCurrentLevel do 
140
141begin 
142
143intCount:=intCount+intSclGrayLevel[intLoop]; 
144
145intSumPels:=intSumPels+intSumPelsArr[intLoop]; 
146
147end; 
148
149w0:=intCount/intSize; 
150
151u0:=intSumPels/intCount; 
152
153w1:=1-w0; 
154
155if intSize-intCount&lt;&gt;0 then 
156
157u1:=(intTotalPels-intSumPels)/(intSize-intCount) 
158
159else 
160
161u1:=0; 
162
163RlTempO:=w0*w1*(u0-u1)*(u0-u1); 
164
165if RlTempO&gt;RlMaxO then 
166
167begin 
168
169RlMaxO:=RlTempO; 
170
171Result:=intCurrentLevel; 
172
173end; 
174
175end; 
176
177我们在测试中发现:大津法选取出来的阈值非常理想,对各种情况的表现都较为良好。虽然它在很多情况下都不是最佳的分割,但分割质量通常都有一定的保障,可以说是最稳定的分割。  由上可知,大津算法是一种较为通用的分割算法。在它的思想的启迪下,人们进一步提出了多种类似的评估阈值的算法,具体可参加【  5  】、【  6  】等。 
178
1794.  灰度拉伸-一种改进的大津法 
180
181大津法得到了广泛的应用,但有人发现,大津法致命的缺陷是当目标物与背景灰度差不明显时,会出现无法忍受的大块黑色区域,甚至会丢失整幅图像的信息。为了解决这个问题,有人提出了灰度拉伸的增强大津法。这种方法的原理其实就是在大津法的基础上通过增加灰度的级数来增强前后景的灰度差,从而解决问题。灰度增加的方法是用原有的灰度级乘上同一个系数,从而扩大灰度的级数,特别地,当乘上的系数为  1  时,这就是大津法的原型,因此,大津法可以看做是这种方法的一个特例。 
182
183在实现中,我们实现了多种灰度拉伸,发现对不同的图像,当遇上不同的拉伸系数时,分割效果也相差甚远。 
184
1855.  Kirsh  算子 
186
187在【  4  】中提出了基于  Kirsh  算子的分割方法,其思想为:对数字图像的每个像素  i  ,考虑它的八个邻点的灰度值,以其中三个相邻点的加权和减去剩下五个邻点的加权和得到差值,令三个邻点绕该像素点不断移位,取此八个差值的最大值作为  Kirsh  算子。即:设  Si  为三邻点之和,  Ti  为五邻点之和,则  Kirsh  算子定义为  K(i)=max{1,max  〔  5Si-3Ti  〕  }  如取阈值  THk  ,则当  K(i)&gt;THk  时,像素  i  为阶跃边缘点。此外,【  4  】的作者认为:假设图像大小为  H  ×  W  个像素点,其边缘点像素一般不会超过  5  ×  H  个。基于这一假设,该文作者提出:(对一幅图像)用  Kirsh  算法,取某一较低的初始阈值  THk  (以保证目标和背景间灰度变化很小的图像边缘也能被取出),对于每个像素点  i  计算其  Kirsh  算子,如果  K(i)&gt;THk  ,则  i  为边缘点  ,  边缘点数  N(  初始值为  0)  加  1,  一旦边缘点数超过  5  ×  H  ,而  i  还小于整幅图像的像素数,说明阈值取得太低,致使许多不是边缘点的像素也被取出,因此需提高阈值。如此反复,即可获得分割图像所需的阈值。 
188
189但在实现中,本文作者发现,【  4  】中的叙述颇有值得探讨之处,如在  H  ×  W  图像中,  H  和  W  之间的关系是完全对称的,两者之间如何抉择?此外,在求  Kirsh  算子  K(i)=max{1,max  〔  5Si-3Ti  〕  }  时也颇有疑虑之处,由其求得的结果分割图像效果并不明显。基于对称性和归一化的考虑,笔者把  Kirsh  算子改为:  K(i)=max{1,max abs(5Si-3Ti) div 15 }  ,并根据在实际运行中的效果,对  W  和  H  的选取为:  if W&gt;H then use 5*H else use 5*W  。在实际应用中表明,修改后的分割质量显著提高。但与【  4  】文中作者声称的效果及其示例相比,仍有相当的距离,特别是它不能解决前后景对比不强烈时的分割情形。  但当前后背景对比十分强烈且集中时,  Kirsh  算子法却会有十分突出的表现。  参考文献 
190
191【1】  崔屹,数字图像处理技术与应用,电子工业出版社,  1997 
192
193【2】  付忠良,图像阈值选取方法,计算机应用,  2000 
194
195【3】  吴冰、秦志远,自动确定图像二值化最佳阈值的新方法,绘测学院学报,  2000 
196
197【4】  曹莉华,图像边缘提取中的一种动态阈值获取法,小型微型计算机系统,  1997 
198
199【5】  付忠良,基于图像差距度量的阈值选取方法,计算机研究与发展,  2001 
200
201【6】  付忠良,一些新的图像阈值选取方法,计算机应用,  2001 
202
203【7】  Kenneth.R.Castleman  著,朱志刚等译,数字图像处理,电子工业出版社,  1998</intindx>
Published At
Categories with Web编程
comments powered by Disqus