图像分割之一维二维最大熵阈值

图像进行二值化的过程中,显然是需要一个阈值的,这个阈值取多少?前面已经有一种通过像素领域动态确定每个像点点阈值的方法 。

OpenCV中提供了自适应阈值化函数adaptiveThreshold来实现自适应阈值处理。

函数adaptiveThreshold的原型如下:

C++: void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)

各参数作一个中文说明!

InputArray src:源图像

OutputArray dst:输出图像,与源图像大小一致

int adaptiveMethod:在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 。

ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值

ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值

int thresholdType:这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV  具体的请看官方的说明,这里不多做解释

int blockSize:adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定

double C:在对参数int adaptiveMethod的说明中,我已经说了这个参数的作用,从中可以看出,这个参数实际上是一个偏移值调整量。

从上面的说明中可以看出,使用函数adaptiveThreshold的关键是确定blockSize和C的值,明白了这两个值的意义之后,在实际项目中,应该可以根据试验法选出较为合适的值吧!

案例代码:

//OpenCV版本2.4.9  
 
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
int main( )
{
  // 图像读取及判断
  cv::Mat srcImage = cv::imread("hand1.jpg");
  if( !srcImage.data ) 
      return 1;
  // 灰度转换
  cv::Mat srcGray;
  cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY);
  cv::imshow("srcGray", srcGray);
  cv::Mat dstImage;
  // 初始化自适应阈值参数
  int blockSize = 5;  
  int constValue = 10;  
  const int maxVal = 255;
    /* 自适应阈值算法
  0:ADAPTIVE_THRESH_MEAN_C
  1: ADAPTIVE_THRESH_GAUSSIAN_C
  阈值类型
  0: THRESH_BINARY
  1: THRESH_BINARY_INV */
  int adaptiveMethod = 0;
  int thresholdType = 1;
  // 图像自适应阈值操作
  cv::adaptiveThreshold(srcGray, dstImage, 
    maxVal, adaptiveMethod, 
    thresholdType, blockSize, 
    constValue);   
  cv::imshow("dstImage", dstImage);
  cv::waitKey(0);
  return 0;
}

   

                                                       一维最大熵原理

 

阈值分割是一种常用的图像分割方法,基于灰度阈值的选取将图像灰度划分为一个或几个集合,实现图像的分割。

阈值分割方法的关键是阈值选取准则,常用的准则有最大类间方差(OTSU 大津法)和信息熵。

信息熵包括很多种:一维最大熵,二维最大熵,交叉熵,待分割目标与背景最大类间交叉熵,分割前后图像间最小交叉熵等。

信息熵表示从信息源中可能获得的信息的大小。假设事件xi发生的概率为,其自信息量定义为pi:

自信息量的数学期望称为事件xi的信息熵,表示事件在不同发生概率时的信息量。统计每个灰度值像素点的个数以及概率,灰度值t把图像分为目标和背景,计算目标与背景中灰度值像素点的概率和w1,w2、分别得到目标信息熵与背景信息熵H1、H2,以目标和背景信息熵总和最大时的灰度值t为最终的分割阈值。具体步骤如下:

设图像的总像素个数为M*N,图像灰度级的概率分布为:

式中表示灰度级为i的像素点个数。背景包含的像素点的灰度范围为,运动目标包含的像素点灰度范围为。背景的灰度分布概率为:                    

运动目标的灰度分布概率为:          

背景的信息熵为:        

运动目标的信息熵为: 

   

总信息熵为:       

        

t*为图像一维信息熵最大时的灰度值,及分割阈值。       

      

                                                         二维最大熵原理


  近期在做图像处理灰阶分割的研究,发现网上有很多将一维最大熵阈值分割的文章与程序代码,但是二维最大熵的资源相对较小。故本博客的目的就在于此,在学习的过程中记录相关笔记,以便帮助后面的研究者少走些弯路。希望与大家一起进步,共同提高。
1、 基于二维最大熵阈值分割
阈值化是图像分割中一种重要的技术。现有大多数方法都通过图像的一维灰度直方图选择阈值。但是, 当图像的信噪比递减时, 采用这些方法将产生很多的分割错误。近年来, 出现了一些方法开始利用图像的二 维 灰 度 直 方 图———像 素 的 灰 度 值分布及其邻域的平均灰度值分布所构成的直方图 来 进 行 阈 值分割。这些方法由于利用了图像的灰度信息和邻域的空间相关信息, 其效果较传统方法有明显改善。
1.1  二维直方图
通常, 图像可看作一个二维灰度函数, 其中包含 N×N 个象素点, G={0, 2, ⋯, L- 1}为灰度取值范围, 这里 L=256。定义位于
坐标( x, y) 象素的灰度值为 f( x, y) 。设 T∈G 为一分割阈值, 则对 图 像 函 数 f( x, y) 以 灰 度 值 T 阈 值 化 的 结 果 即 为 二 值 函 数fT( x, y) :
fT( x, y) =
b0 f( x, y) ≤T
b1 f( x, y) > # T
( 1)
其中: 0≤b0, T, b1≤L- 1。二维阈值化方法同时考虑象素的灰度值 及 其 邻 域 平 均 灰度值。象素( x, y) 处的 n×n 邻域平均灰度值为: 

其中: n≤N, n 一般取奇数, [n2]表示取整, 本文取 n=3。通过对原图进行邻域平均得到另一“平滑图像”, 由原图像和平滑图像构造出一个二维直方图。因为图像像素与其邻域像素的相关性是相当大的, 所以物体和背景的分布在二维直方图中就会比在一维直方图中更容易区分。一般地, 二维直方图呈双峰或多峰特性。如以灰度、邻域平均灰度值对[f( x, y) , g( x, y) ]来表示图像,并以二维矢量( S, T) 来分割图像, 这里, 0≤S, T≤L- 1。则二维阈值化函数可定义为:

则{pij}就是图像的二维灰度直方图, 如图所示。其起始点在左上方, 灰度值从左至右增加, 邻域平均灰度值自上 而 下
增加。二维直方图上共有 L2个点, 每一点的函数值即为 rij。若图像的分割阈值矢量为( S, T) , 则直方图被分成 4 块, 根据同态
性, 在目标和背景处, 象素的灰度值和邻域平均灰度值接近, 在目标和背景的分界邻域, 象素的灰度值与邻域平均灰度值差异较大。因此目标和背景中的象素将出现在对角线周围, 故方块0 和 1 包含了目标类和背景类的分布; 远离对角线的方块 2 和3, 对应边缘和噪声。

基本思想:利用点灰度和区域灰度均值的二维直方图,根据熵最大原则寻找最佳阈值。

• 做法:首先以原始灰度图像(L个灰度级)中各象素及其4邻域组为一个区域,计算出区域灰度均值图像(L个灰度级),这样原始图像中的每个象素都对应一个点灰度-区域灰度均值对,这样的数据对存在L×L种可能的取值。


设ni,j为图像中点灰度为i及其区域灰度均值为j的象素点数,pi,j为点灰度-区域灰度均值对(i,j)发生的概率,
则{pi,j,i,j=0,1,……L-1}就是该图像关于点灰度-区域灰度均值的二维直方图。

结论:

1.在强噪声干扰下,一维直方图是单峰的,二维直方图利用了图像邻域的相关信息,目标和背景的双峰仍然明显;
2. 点灰度-区域灰度均值的概率高峰主要出现在XOY平面的对角线附近,并且在总体上呈现双峰和一谷的状态;

这是由于图像的所有象素中,目标点和背景点所占比例最大,而目标区域和背景区域内部象素灰度级比较均匀,点灰度及其区域灰度均值相差不大,所以都集中在对角线附近,两个峰分别对应于目标和背景;远离XOY平面对角线的坐标处,峰的高度急剧下降,这部分所反映的是图像中的噪声点、边缘点和杂散点。

3. 应该在A区和B区上用点灰度-区域灰度均值二维最大熵法确定最佳阈值,使真正代表目标和背景的信息量最大。

这是由于图像的所有象素中,目标点和背景点所占比例最大,而目标区域和背景区域内部象素灰度级比较均匀,点灰度及其区域灰度均值相差不大,所以都集中在对角线附近,两个峰分别对应于目标和背景;远离XOY平面对角线的坐标处,峰的高度急剧下降,这部分所反映的是图像中的噪声点、边缘点和杂散点。

 

视觉小新 CSDN认证博客专家 结构光编解码 视觉系统图像处理
追求精致机器视觉算法的猪猪尸。主攻结构光三维重建以及相关图像处理,分享英语学习心得和博士所感。关注公众号:视觉小僵尸 即可第一时间获得同步更新博文。
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页