前面我们介绍过了图像的二阶导数,并且指出,二阶导数比一阶导数有更好的细节增强表现。那么,其原理是什么呢?

我们仍然简化问题,考虑下x方向,选取某个像素,如下图所示:

二阶导数Hessian_图像处理

可以看出,在图中标红色框框的像素附近是一个明显的分界线,上面是一片平坦的灰度区域,下面是灰度缓慢变化的区域。而且有着明显的灰度突变:从100突变到50。我们可以把这个看作图像中物体的轮廓边缘。

根据前几篇文章的介绍,图像在x方向的一阶导数和二阶导数分别是:



∂f∂x=f(x+1)−f(x)



∂2f∂x2=f(x+1,y)+f(x−1,y)−2f(x,y)

我们根据上面的式子计算下这个像素x方向上的一阶导数和二阶导数,如下图所示:

二阶导数Hessian_二阶导数_02

我们注意到:对于一阶导数,除了灰度突变的地方,其它灰度缓慢变化的地方数值相同,而且符号也相同。而二阶导数在灰度缓慢变化的地方数值为0,而在灰度突变的地方有符号相反的2个数值。也即二阶导数产生了一个像素宽双边缘

前面提到,求一阶导数时,用的是绝对值,而二阶导数并没有用绝对值,因为在边缘处,有符号相反的二阶导数值,可以强化这个边缘的对比度。如下图所示:

二阶导数Hessian_二阶导数Hessian_03

我们看到,原图像与二阶导数图像合并后,在灰度均匀或灰度缓慢变化的地方,图像并没有任何改变;但在灰度突变的边缘处,原来是100和50的灰度差别,现在是150和10的灰度差别,对比度增强了很多。

因为二阶导数产生了一个像素宽的双边缘,且2个边缘的二阶导数值符号相反,因此在合并图像时,就要考虑符号的问题,不然就适得其反。如果像一阶导数那样,使用了绝对值,那么这种双边缘的对比反差就没有了,所以二阶导数也就没有使用绝对值。

一般来说,二阶导数比一阶导数获得的物体边界更加细致。但是,显而易见的,二阶导数对噪声点也更加敏感,会放大噪声的影响。看看下图就明白了:

二阶导数Hessian_二阶导数_04

在一片灰度均匀的区域,有一个噪声点,经过二阶导数处理后,噪声点更加孤立明显了,尤其在这些灰度平滑区域更加的显眼,噪声被放大了。