《1 前言》

1 前言

近几十年立体匹配已经成为计算机视觉领域的中心问题。在传统的双目立体匹配算法中,一种最普通的假设是图像对中匹配像素的灰度是一致的,这种 Lambertian 假设在图像中存在镜面反射时是错误的,原因是镜面反射像素灰度值除了与景物的实际亮度有关外,更多的是与摄像方向有关,因此左右图像中在镜面反射区域匹配像素的灰度值不相等。笔者的思想是开发一种不受镜面反射影响的匹配测度,这样在镜面反射部分也能得到正确的视差。

存在镜面反射的立体匹配最主要的困难有两个,一是如何判断一个像素发生了镜面反射;二是在镜面反射区域用什么方法能建立匹配点的可靠测度。在 Lambertian 假设情况下,图像中的所有像素只发生了漫反射,传统的方法是通过匹配矩阵来计算匹配测度。笔者首先是利用灰度和最大色度,因为他们在漫反射区域和镜面反射区域有很大的不同,判断出发生了镜面反射的像素,然后根据文献 [1,2]建立一种基于“镜面+漫反射”模型的匹配测度。通过模型计算的匹配测度,在镜面反射区域视差估计的准确性能够得到很大提高。

《2 传统匹配测度》

2 传统匹配测度

一般来说,传统的立体匹配测度有 3 种类型,以点为基础的匹配测度,以区域为基础的匹配测度和以状态为基础的匹配测度。在双目立体稠密匹配中,用得最多的是以点为基础的匹配测度和以区域为基础的匹配测度,点匹配测度直接比较对应点的灰度或色彩差异,最普通的点匹配测度方法是 SD ( squared differences )和 AD ( absolute differences) [3] 。区域匹配假设以匹配点为中心的窗口内像素的视差是恒定的,比较以匹配点为中心的两个窗口像素灰度的差异,区域匹配测度有 SAD (sum - of -absolute -differences)和 NCC ( normalized cross correlation) [3] ,区域匹配测度通常用在局部匹配方法中,点匹配测试通常用在全局匹配方法中。还有一些其他的匹配测度,如以梯度为基础的测度和非参数测度。这些匹配测度都是假设图像符合 Lambertian 假设模型,但是在存在镜面反射的区域,像素的灰度值和色彩有很大的不同,用以上的这些匹配测度会引起严重的错误。

《3 镜面反射模型》

3 镜面反射模型

漫反射由光线内在的散射引起,它与摄像的方向和角度是无关的,漫反射的色彩由材料的载色体性质决定。镜面反射来自于材料边界的反射,因此它更多的依靠观察方向,因此镜面反射的色彩范围更多的是受到光源和摄像方向的影响。按照二色反射模型[4] ,从不同种类物体反射的光线是由镜面反射和漫反射两部分的线性组合而成。

考虑二色反射模型和数字摄像机图像构成,图像灰度可描述如下:

式(1)中,X ={xy}是二维图像的坐标; qc 是三维矢量;c 代表红、绿、蓝三元色(R,G,B); 分别是漫反射和镜面反射的权重系数;是漫反射比函数; 是照明光谱能量分配函数;Ω 是摄像可见光谱范围。

通过简化,式(1)可写为

式( 2 )中, Bc Gc 第一部分代表漫反射成分; 代表镜面反射成分。

对以上的二色反射模型作简化,图像中一点( uv)的灰度表述如下:

Id Is 分别代表点灰度漫反射和镜面反射部分。假设 d 代表视差,为了计算左图像上点(uv)和右图像上点( udv)的匹配测度。首先看一下这两个点的灰度差异。

这里 l r 分别代表左图像和右图像,从上面的公式可以看到,两点的灰度差异 ΔI  包含漫反射 ΔId 和镜面反射 ΔIs 两部分。

要建立一个合理的匹配算法,首先匹配点之间的匹配费用应该小,能够找到最佳的匹配点。

非匹配点:考虑两种情况,a. 两个点都是漫反射;b. 两个点中至少有一个存在镜面反射。在情况 a 中,ΔI =ΔId ,通常对于非匹配点 ΔId会比较大。在情况 b 中 ΔI =ΔId +ΔIs,ΔId 和 ΔIs 都比较大,总的灰度差异 ΔI 在大多数情况下将会比较大。简言之,对于非匹配点,两个点的灰度差异在两种情况下都会比较大。

匹配点:也分为两种情况,a. 两个点都是漫反射;b. 两个点中至少有一个存在镜面反射。在情况 a 中,因为漫反射与摄像视角无关,ΔI 会很小。在情况 b 中,ΔI 的大小主要来自于ΔIs,既然镜面反射与摄像视角有关,ΔI 会比较大。

从以上的分析可以看出:用简单的只存在漫反射的模型在大多数情况下计算匹配都会是准确的。只有两个点中至少有一个存在镜面反射时这种模型计算匹配会产生错误。笔者的目的是考虑存在镜面反射的情况下匹配测度的设计。

《4 镜面反射像素判断》

4 镜面反射像素判断

在通常情况下,所处理的图像都是太阳光源,图像的镜面反射部分是纯白色(ΓR =ΓGB )。分离镜面反射方法建立在最大色度、镜面反射灰度和漫反射点这三部分之上。定义 RGB 三通道灰度各为 ,三通道的灰度和 ,则有:

定义最大色度如下:

图 1 (a ) 和(b)是 Sawtooth 左图像和右图像,(c)是真实视差图,(d)和(e)是 Sawtooth 左图像和右图像上发生了镜面反射的图像。可以看出,在图 1(d)和(e)中,图像的上面中间部分发生了镜面反射,这一区域变得比较亮。笔者等取右图像和发生了镜面反射的右图像进行 RGB 三通道灰度和的比较,如图 2 所示。

《图1》

图1 Sawtooth 图像

Fig.1 Sawtooth image

《图2》

图2 RGB 三通道灰度和

Fig.2 Gray sum of RGB

由图 2 可以看出在发生了镜面反射的区域,图像的三通道灰度和比原来变小了。也就是 Ic 值变大了。再取图像中 130 行的所有像素点,比较发生了镜面反射和没有发生镜面反射时的不同,如图 3 所示。

《图3》

图3 右视图第 130 行 RGB 三通道灰度和

Fig.3 RGB gray sum of 130 raw in right image

没有发生镜面反射时,RGB 灰度和 Ic 最大的地方是 160,发生了镜面反射后,有一部分像素 Ic 值超出了 160,最大的达到了 250。而这一部分正好对应了图 1(e)中发生了镜面反射的部分。

接下来取图像中 130 行的所有像素点,比较发生了镜面反射和没有发生镜面反射时最大色度 σ 的不同,如图 4 所示。

《图4》

图4 右视图第 130 行最大色度

Fig.4 Maximal chromaticity of 130 row in right image

可以看出发生了镜面反射的部分,最大色度比其他地方最大色度都要小。所以笔者等综合三通道灰度和最大色度来判断像素是否发生了镜面反射。建立如下公式:

给 ρ 取一个阈值,大于的那部分像素,就认为在这些像素发生了镜面反射。因为发生镜面反射一般都会是一个区域,所以笔者以 ρ 大于阈值的像素为中心,在图像中取 10 ×10 的窗口,如果窗口中有 25 个以上的像素 ρ 大于阈值,也就是这 25 个像素都可能发生了镜面反射,才最后判断在该窗口中心像素发生了镜面反射。

《5 考虑镜面反射的像素匹配测度》

5 考虑镜面反射的像素匹配测度

以上提出了一种检查发生镜面反射像素的方法。接下来在发生了镜面反射的像素匹配中适当地调整匹配测度函数。

按照 Torrance -Sparrow 镜面反射模型,在一个稳定的环境,镜面反射灰度由两个因素引起:视觉方向 v 和物体表面法线 n。考虑一个小的窗口 ,窗口中心点( uv)的视觉方向 可以被当作窗口内所有点视觉方向的近似平均值。假设在平滑物体表面,对于物体表面法线n也可以作相同的近似。基于此,窗口中心点的镜面反射色彩差异也能用窗口内所有点的镜面反射差异的平均来近似,即 。存在镜面反射的相匹配点有,因此 。基于此,调整匹配费用函数,改为从最初的色彩差异 减去 ,其中, 计算如下:

匹配测度的调整如下:

1)通过式(4)计算色彩差异集合 ;

2)利用式(9)计算最大色度 ρ;

3)如果 ρ>thv,那么有

是匹配点的灰度差异。其中 Wn n × n 的窗口;thv 是 ρ 的阈值。从上面的描述可以看到,匹配规则通过调整绝对值差 AD,存在镜面反射时也是健壮的。这种调整后的测度称为 AAD。

《6 实验结果》

6 实验结果

对镜面反射像素的测度计算是以点为基础的,所以同时适用于局部和全局的立体匹配方法,对图 1 中左右图像都发生了镜面反射的 Sawtooth 图像采用以区域为基础的 SAD 算法和以点为基础的 DP (动态规划)算法进行了立体匹配实验,匹配测度分别用 AD 和 AAD,明显看到笔者采用的方法,镜面反射部分匹配更为准确如图 5 所示。

《图5》

图5 匹配结果

Fig.5 Matching result

《7 结语》

7 结语

提出了一种解决存在镜面反射像素区域立体匹配的一种方法,因为假设图像的 Lambertian 反射模型,传统的立体匹配方法在镜面反射区域匹配会有错误,只能尽量避免镜面反射,或是在立体匹配时剪除掉镜面反射部分,用插值的方法估计镜面反射部分的视差。采用“漫反射+镜面反射”模型,利用漫反射和镜面反射在灰度和色度的不同,首先判断出发生镜面反射的像素,然后在镜面反射区域设计了一种新匹配算法。实验证明,该算法在镜面反射区域的匹配是准确的。