Gray level thresholding in badly illuminated image
Abstract
-
大多数灰度阈值化方法在原始栅格图像中光照梯度规律且不大的情况下能够产生非常好的结果。在其他情况下,比如光照变化幅度较大时,就无法生成令人满意的二值图像。一种方法是首先定位目标像素,然后在它们周围生成区域,为每个像素生成一个阈值。可以有很高的把握地认为,位于灰度梯度较大的区域中的像素属于某个对象,并且邻近具有相似灰度值的像素也将属于同一对象。如果仔细生成区域,就可以生成一个阈值图像。
-
Local Intensity Gradient (LIG) 是一种基于局部图像属性分析的方法,主要用于图像处理和计算机视觉领域,尤其是在边缘检测、特征提取和图像分割等任务中。其工作原理主要涉及以下几个核心概念:
-
灰度梯度(Intensity Gradient):图像中的每一个像素点都有一个灰度值,灰度梯度描述的是相邻像素间灰度值的变化率。它能够反映出图像中亮度变化的剧烈程度,是图像边缘和纹理信息的基础。
-
局部性:LIG强调在每个像素周围的小区域内计算梯度,这个小区域称为窗口或者邻域。通过限制在局部范围内分析,可以减少噪声影响并更好地捕捉到图像细节。
-
梯度计算:通常使用两个基本的差分运算来估计局部灰度梯度:水平方向(Gx)和垂直方向(Gy)的导数。对于像素位置(x, y),灰度梯度可以表示为这两个方向梯度的向量和,或者计算梯度的大小(即梯度模),公式为: ∣ Δ I ∣ = G x 2 + G y 2 |\Delta I|=\sqrt{G_x^2+G_y^2} ∣ΔI∣=Gx2+Gy2。其中 I 表示图像的灰度值, G x = I ( x + 1 , y ) − I ( x , y ) , G y = I ( x , y + 1 ) − I ( x , y ) G_x=I(x+1,y)-I(x,y),G_y=I(x,y+1)-I(x,y) Gx=I(x+1,y)−I(x,y),Gy=I(x,y+1)−I(x,y) 分别是 x 和 y 方向的一阶差分。
-
方向信息:除了梯度的大小,有时还会关注梯度的方向,这对于某些应用如边缘跟踪和特征描述非常有用。梯度方向可以用反正切函数计算得出:
- θ = a r c t a n G y G x \theta=arctan\frac{G_y}{G_x} θ=arctanGxGy
-
INTRODUCTION
-
灰度阈值化旨在从某些图像中提取代表对象的像素,而背景像素则被忽略。通常,对象是文本或其他线形图像数据(如图形和地图)。经过阈值化处理后,对象像素将全部具有相同的灰度值,而背景像素则具有另一灰度值——通常情况下,对象像素是“黑色”,而背景是“白色”,这样就形成了二值或黑白图像。最佳阈值是能够选取所有对象像素并将其映射为黑色的阈值。遗憾的是,对于任意灰度图像来说,通常无法找到一个“最佳”的单一阈值。
-
可以用一个简单的小图像来进行说明,如下图(a)所示。这是一个32×32像素的图像,可以看到其中包含四个不同灰度的上case字母“I”。不可能选择一个阈值,使得所有字母在二值化图像中都可见。图(b)-(e)展示了在不同阈值下进行尝试的结果。图(b)是应用迭代选择算法[Picture thresholding using an iterativelection method]的结果,其中对对象和背景的灰度值进行猜测,然后在每次迭代中根据猜测调整阈值。图©是应用灰度级直方图方法[A threshold selection method from gray-level histograms,大津法]的结果,其中使用直方图来使原始图像和二值化图像之间的距离平方和最小化。
-
(a)难以阈值化的图像。(b)使用迭代选择阈值。©使用灰度直方图阈值。(d)使用二维相关设定阈值。(e)“正确”设定阈值。
-
上图©是使用二维相关方法[Gray-level thresholding of images using a correlationcriterion]的结果,其中应用了所有合理的阈值,每种情况下的阈值图像都与原始图像相关。选择最大相关性对应的阈值。最后,图(e)是基于对图像的手动观察所期望的结果,也是通过下面描述的方法所发现的结果。任何产生单个阈值的方法都不会产生图(e)所示的结果。
-
虽然上图中的图像是人为设计的,但在实际图像中也会由于噪声或非均匀光照等因素而产生类似的效果。线性光照梯度和高斯光照斑点都会产生这个问题。在这些情况下,没有一个单一的阈值能够生成合理的二值图像。另一个原因是,通常单个阈值是不够的,因为物体的反射率可能存在很大差异,因此图像中不同部分的物体可能比(或比背景)更亮(或更暗)。如果再加上光照效果,就会得到无法通过常规方法进行阈值化的图像。如果单个阈值不可接受,那么剩下的选择就是在图像的每个小子区域使用多个阈值。子区域的最大数量与图像中的像素数相同;此外,任何更大的区域都可能因光照效果而发生扭曲,尽管扭曲程度比整个图像要小。制定阈值化方法的起点可以是为每个像素选择不同的阈值。该方法将根据图像的局部特性来确定这些阈值。随着与已知像素点的距离增大,我们对局部阈值的信任度会降低。
-
所提出的阈值化方法首先通过使用灰度梯度来定位图像中的“物体”,然后记录图像中各个区域与“物体”相对应的灰度级,最后将这些灰度级作为初始阈值的猜测。然后使用局部图像特性为图像的其余部分分配阈值 。该方法能够对在不同光照条件下生成的图像进行阈值化。
INTENSITY GRADIENT BASED THRESHOLDING
-
阈值化处理的目的是提供一幅二值图像,以区分图像中的对象与背景。因此,了解对象的大致位置及其灰度值将很有用。这些位置周围的区域可以作为该区域附近阈值的初始猜测值。众所周知的同态滤波操作包含一个在这方面有用的想法。该操作基于以下原则:图像中的对象提供了高空间频率分量,而照明主要由较低的空间频率分量组成,两者相乘生成原始图像。该滤波器试图通过滤除低频分量来最小化照明效应。如果存在一个基于周围物体照明条件的光照分量(I),以及一个基于图像中物体特性的反射分量(R),那么合成图像(C)就是 R 乘以 I 的积。因此,C的对数为 ln® + ln(I)。如果 I 主要包含低空间频率分量,那么高通滤波器将从 ln© 中去除部分ln(I)。这通常是这种情况。
-
另一种看待这个问题的方法是说,图像中的物体会产生小的区域,其强度梯度相对较大,这些区域位于物体的边界附近,而其他区域的梯度相对较小。这一事实被许多边缘增强算法所利用。通过寻找高梯度区域,可以找到图像中物体像素的样本。假设这些像素属于一个在阈值图像中会显得明显的物体。将假设物体为黑色(0),而背景为白色(1或更高),尽管也可以使用相反的情况。
-
强度梯度通常具有方向性。物体边界附近的像素在朝向边界的方向上的梯度通常比远离边界或平行于边界的方向上的梯度更大。由于处理的是离散图像,因此梯度实际上是沿小距离内的强度差计算得出的。因此,在任何像素处计算强度梯度的方法是找到在指定距离内所有方向上的最大强度差。一个简单的例子是距离为一像素的情况,此时每个邻域的方向数为8。仍然有许多方法可以测量强度梯度,但对于本文的目的来说,一个有用的方法是
- G ( i , j ) = m i n ( I ( i , j ) − I ( i + δ i , j + δ j ) ) ; a n d δ i = − 1 , 1 ; δ j = − 1 , 1 G(i,j)= min(I(i,j)-I(i+ δ_i,j+ δ_j));~and~ δ_i=-1,1;δ_j=-1,1 G(i,j)=min(I(i,j)−I(i+δi,j+δj)); and δi=−1,1;δj=−1,1
-
在这个过程中,图像 I 被用来计算差异图像G。这是非定向的,在边界像素和对象内部某些像素处会产生较大的负梯度。下图展示了该过程在上图的示例图像中的应用。不出所料,梯度图像中最强烈的像素是 I 形区域边界上的像素。下图的梯度图像中的像素值很特殊,因为背景区域的对应区域的值为0或接近0。这并非总是如此。噪声、变化的光照和其他效应通常会生成具有正负值的背景梯度。下图还具有这样的特性,即梯度图像有一个单一的阈值,成功地定位了所有对象像素。这是因为该图像中的所有像素都属于边缘。许多图像不具有这种特性。在那些情况下,边缘像素给出了剩余像素的局部阈值估计,可以通过使用边缘值对其进行阈值化。当寻找具有大梯度的对象像素时,问题是:多大才足够大?这相当于对梯度图像进行阈值化处理,即将原始问题应用于不同的图像上。
-
Intensity gradient image.
-
因为梯度图像的绝对值仅在边缘像素处较大,而大多数图像中的边缘像素只占总像素数的一小部分,因此梯度图像中的像素值的标准差小于相应灰度图像的标准差。边缘像素的较大梯度使其在背景中更加突出,更容易定位。实际上,结果表明,梯度图像通常可以使用全局阈值进行阈值化。然而,梯度图像在某种程度上受到光照的影响,当存在噪声时,全局阈值可能并不完全适用。一种可以使用梯度图像选择对象边缘像素的方法是使用小的梯度图像子区域来找到局部均值/偏差。这与Wall[The gray level histogram for threshold boundary determina-tion in image processing with applications to the scene segmentationproblem in human chromosome analysis]和[Automatic systems for chomosome identi-fication]中使用的自适应阈值化技术类似,其中将染色体图像分为较小的区域,在这些区域中单个阈值有效。它也类似于Chow和Kaneko[Automatic boundary detectionof theleft ventricle from cineangiograms]用于增强心电图边缘的阈值化方法。区域必须足够小,以便可以忽略光照效果。这个过程只应用于梯度图像,以努力考虑光照对灰度梯度的影响。实际上,建立了照明的二维模型,并用于寻找局部阈值。
-
然后使用邻域平滑区域均值,以说明图像中的低梯度(接近恒定的灰度级)区域。这给出了梯度变化的地图,作为图像中位置的函数。最后,将这些值插值到像素级,在图像的所有位置给出一个合理的梯度值;任何超过该值超过三个标准差的像素将被认为是边缘像素,相应的灰度像素被归类为目标像素,例如,考虑一个宽度为256像素,高度为256像素的图像,如下图(a)所示。计算梯度图像,并给定这些值的16 x 16数组,计算每个16像素× 16像素区域的均值和偏差。这给出了上面的每个条目代表一个分区的平均梯度。现在,通过将每个值替换为相邻值的加权平均值,可以对上面的值进行平滑处理。所使用的权重是给考虑的像素最大的权重,而给相邻像素较小的权重与距离成比例。对梯度区域进行平滑处理的结果为:
-
(a)手印文本。(b)键入文本。©肖像。(d)条染色体。
-
现在假设这些值中的每一个对于各自区域的中心像素都是正确的,并且执行线性插值以在每个像素处产生具有计算值的新梯度图像。平滑和插值对整个图像的影响可以用照明和图像在平滑前后(仅照明,处理前,处理后)的线形图来显示。
-
16 × 16的区域大小有些随意,实际上应该是光照分布的函数。当使用较小的区域时,更高的照明梯度会产生更好的阈值图像。事实上,16 × 16的尺寸对于所有照明测试都是完全可以接受的,其中梯度不会被照明效果所淹没。例如,下面是一组使用8,16,32和64像素的区域大小进行阈值处理的图像:
-
在对象中找到样本对象像素后,下一步是确定剩余图像像素的阈值,通常是绝大多数尚未表征的图像像素。这可以使用基于局部环境灰度的区域增长程序来完成,并从已知属于对象的像素开始。虽然可以使用许多区域增长程序,但用于生成图中图像的区域增长程序使用已知目标像素的灰度级别作为所有近邻的阈值。任何灰度值小于相邻目标像素的像素都被归类为目标像素。这个过程在整个图像上重复,直到没有新的对象像素被发现,结果是一组像素几乎肯定属于一个对象,尽管一些对象像素从集合中丢失。
-
线性照明中CORR和LIG的比较。(a)手印文本-CORR。(b)手印文本LIG。©输入文本-CORR。(d)输入文本-LIG。(e)肖像——CORR。(f)肖像 - LIG.(g) chromosomal corr. (h)Chromosomes-LIG。
-
为了完成像素集,可以再次重复扫描图像,但这次使用所有相邻对象像素的平均值为每个未分类像素设置阈值。这将产生一个更完整的集合,但也允许错误地包含一些背景像素。要求至少四个相邻对象像素可以减少此错误。最后,可以再次扫描图像,如果任何未分类的像素有6个或更多的对象像素作为邻居,则使用object pixels 的最大值作为阈值。这样做的目的是填充对象区域内部的像素。同样,一些背景像素可能分类不当。虽然使用子区域给出局部梯度阈值会得到很好的结果,但在许多情况下,将单个梯度阈值应用于整个图像几乎同样有效。作为比较的基础,测试了一种将灰度直方图(GLH)方法应用于梯度图以给出阈值的方法;所选像素的灰度级别用作区域生长过程的种子值。
IMPLEMENTATION
- 上面描述的阈值方法(从现在起称为局部强度梯度(LIG)方法)是在运行UNIX的Sun4主机上用C语言实现的。LIG的摘要如下。
- 步骤1:对于图像(IM1)中的所有像素,计算像素与所有八个相邻像素之间的最小差异。这可以保存在另一个图像中:称之为IM2。
- 步骤2:将IM2分解为N × N个子区域。计算每个子区域的平均值(QIM)和平均偏差(QDEV)。
- 步骤3:使(QIM)和QDEV都平滑。每个点的QIM值被所有相邻子区域的加权平均值所取代,QDEV也是如此。
- 步骤4:再次在N × N区域内插入/外推 (QIM) 和QDEV的值。线性插值是可以接受的。这将得到一个大小为 IM2 的图像,其中包含每个像素的梯度和偏差估计。
- 步骤5:对于IM2的所有像素[i,j]:
- 如果QIM[i,j]≥-1或QDEV[i,j]≥-1,则像素[i,j]保持未分类状态。(区域为flat/常量。)
- 如果 IM2[i,j]≤QIM[i,j]+ 3*QDEV[i,j] 则 pixel[i,j] 为目标像素(选择目标像素)。
- 否则[i,j]为未分类。
- 步骤6:对于所有未分类像素[i, j],通过在相邻(8个邻居)对象像素中寻找最小的灰度值(像素聚合)来选择灰度阈值。如果IM1[i, j]小于此值,则为对象像素。重复步骤6,直到不再找到对象像素。
- 步骤7:(可选) 对于所有仍然未分类的像素,计算至少四个相邻对象像素的平均值作为阈值(区域增长)。重复步骤7,直到没有发现新的对象像素。
- 步骤8:(可选)对于所有仍然未分类的像素,计算一个阈值,作为至少六个相邻对象像素的最大值(区域增长)。重复步骤8,直到没有发现新的对象像素。
- 步骤9:将 IM1中的所有对象像素移至0,将所有未分类像素移至正值。IM1 现在包含阈值图像。
- 在像素聚合步骤之后,该过程可以被认为是完成的,但是区域生长过程通常会产生更好的结果。
RESULTS AND CONCLUSIONS
-
在三种不同光照效果下,将LIG方法与迭代选择(IS)、灰度直方图(GLH)和两种基于相关性的算法(CORR)进行了比较。因为这会产生大量的阈值图片(180),所以这里只显示其中的一些结果。事实上,由于IS、GLH和CORR产生的图像几乎相同,因此将只显示CORR的结果。下图显示了将用于说明LIG和corr阈值方法的四幅图像样本集。
-
(a)手印文本。(b) Typedtext。©肖像。(d)条染色体。
-
这四幅图像可以用任意一种方法进行合理的阈值分割,结果具有可比性。阈值图像(使用CORR)出现在上文图中,可用于与这些图像的光照较差版本的阈值进行比较。人工提供照明效果:编写程序对数字图像应用线性照明(下图)和高斯光斑(下第二图)。然后将所有的阈值分割方法应用于这些改变后的图像。同样,IS、GLH和CORR产生相似的结果,因此将只显示CORR图像。
-
添加线性照明梯度的样本图像(a)手印(b)打字©肖像(d)染色体。
-
添加高斯照明梯度的样本图像。(a)手印文本(b)打字文本©肖像(d)染色体
-
上文 线性照明中CORR和LIG的比较 图显示了由上第一图中的线性照明图像得到的CORR和LIG的阈值图像。请注意,corr的全局阈值导致每张图像的很大一部分被认为是黑色的;这仅仅是由于照明梯度。LIG的结果没有显示出这个问题,高斯图像,当使用CORR阈值时,显示一个阈值良好的中心区域,周围是一个没有细节的暗区域。这也是光效应单独造成的结果。当使用LIG时,整个图像中的细节变得可见。当然,当光照梯度变得太大时,LIG方法也将不起作用。如果两个相邻像素之间的光照差与物体边缘的梯度差异不显著,则图像无法阈值。
-
此外,就LIG而言,阴影和大多数其他阈值保持方法都是对象,因为阴影的照明梯度与对象边缘的梯度相同。使用单个梯度图像阈值对测试图像进行阈值分割的结果如下图所示。而图像继续显示一些照明的影响,结果是足够的,在下图中,图像有一个高斯照明强加于他们,这些可以与图中的结果进行比较。对许多样本的观察表明,大多数图像都可以用更简单的方法阈值化。总的来说,LIG 方法虽然比其他方法需要更长的时间,但正确的阈值更大的图像集,目前它被用于 DNA 测序凝胶的分割和手印字符识别实验。
-
Results of using a single gradient threshold.