后来"熵"的概念被引入了图像处理技术,人们提出了许多基于熵的阈值分割法。1980年,Pun提出了最大后验熵上限法,1985年,Kapur等人提出了一维最大熵阈值法,1989年Arutaleb将一维最大熵阈值法与Kirby等人的二维阈值方法相结合,提出了二维熵阈值法。对于一维最大熵分割方法,它的思想是统计图像中每一个灰度级出现的概率 ,计算该灰度级的熵 ,假设以灰度级T分割图像,图像中低于T灰度级的像素点构成目标物体(O),高于灰度级T的像素点构成背景(B),那么各个灰度级在本区的分布概率为:
O区: i=1,2……,t
B区: i=t+1,t+2……L-1
上式中的 ,这样对于数字图像中的目标和背景区域的熵分别为:

对图像中的每一个灰度级分别求取w= ,选取使w最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法。我们定义了一个函数GetMaxHtoThrod()来实现该算法,它的返回值就是用来分割图像的阈值。
int GetMaxHtoThrod(BYTE *pData,int Width,int Height) { int i,j,t; float p[256],a1,a2,num[256],max,pt; if(pData==NULL) { AfxMessageBox("图像数据为空,请读取图像数据!"); return -1; } //初始化数组p[]; for(i=0;i<256;i++) p[i]=0.0f; //统计各个灰度级出现的次数; for(i=0;i<Height;i++) for(j=0;j<Width;j++) { p[*(pData+ Width*8)*i+j]++; } //统计各个灰度级出现的概率; for(j=0;j<256;j++) { p[j]=p[j]/(Width*Height); } //对每一个灰度级进行比较; for(i=0;i<256;i++) { a1=a2=0.0f; pt=0.0f; for(j=0;j<=i;j++) { pt+=p[j]; } for(j=0;j<=i;j++) { a1+=(float)p[j]/pt*logf(p[j]/pt); } for(j=i+1;j<256;j++) { a2+=(float)p[j]/(1-pt)*logf(p[j]/(1-pt)); } num[i]=a1+a2; } max=0.0f; //找到使类的熵最大的灰度级; for(i=0;i<256;i++) { if(max<num[i]) { max=num[i]; t=i; } } return t; } |
这种方法的缺点是仅仅考虑了像素点的灰度信息,没有考虑到像素点的空间信息,所以当图像的信噪比降低时分割效果不理想。毫无疑问,像素点的灰度是最基本的特征,但它对噪声比较敏感,为此,在分割图像时可以再考虑图像的区域信息,区域灰度特征包含了图像的部分空间信息,且对噪声的敏感程度要低于点灰度特征。综合利用图像的这两个特征就产生了二维最大熵阈值分割方法。二维最大熵阈值分割算法实现时首先以原始灰度图像中各个像素的每一个像素及其四邻域的四个像素构成一个区域,该像素点的灰度值i和四邻域的均值j构成一个二维向量(i,j),统计(i,j)的发生概率 ,如果图像的最大灰度级为 ,那么 (i,j=0,1… )就构成了该图像关于点灰度-区域均值的二维直方图。对于给定的图像,由于大部份的像素点属于目标区域或背景,而目标和背景区域内部像素点的灰度级比较均匀,像素点的灰度和其邻域均值的灰度级相差不大,所以图像对应的二维直方图 主要集中在i,j平面的对角线附近,并且在总体上呈现双峰和一谷的状态,两个峰分别对应于目标和背景。在远离IOJ平面对角线的坐标处,峰的高度迅速下降,这部分对应着图像中的噪声点、杂散点和边缘点。二维直方图的IOJ平面图如图六所示,沿对角线的方向分布的A区、B区分别代表目标和背景,远离对角线分布的C区、D区分别代表边界和噪声,所以应该在A区和B区上用点灰度-区域灰度平均值二维最大熵法确定阈值,使之分割的目标和背景的信息量最大。
 图 六 二维直方图的IOJ平面图
确定二维最大熵的算法和确定一维最大熵算法类似,设分割图像的阈值为(s,t),则A区、B区概率分别为:

则A区、B区的二维熵分别为:

对于确定图像的二维直方图,对不同的( )分别计算w=H(A)+H(B),选取使w达到最大的( )作为最佳分割图像的阈值。该算法实现的函数和上述一维最大熵算法大同小异,只是在二值化时对图像上的像素点不仅要考虑灰度值,同时还要考虑该点邻域的灰度均值。
 (a)标准lena图像
|  (b)一维最大熵
|  (c) 二维最大熵
| 图七 二值图像 上图中a、b、c分别显示了标准lena图像、采用一维最大熵法、二维最大熵法得到的分割效果。可以看出,二维最大熵法可以很好的分割包含目标和背景两类区域的图像,效果最好。
由于篇幅有限,本文只能是蜻蜓点水一般对比较特殊的分割算法介绍了一下,其实无论二值化还是边缘提取的处理,对应的算法都很多,都各有特色,读者可以针对不同的图像,结合前人提出的各种算法,找到实际应用中最佳的处理效果。
|