光和阴影(Light and shadow)

332 阅读5分钟

成像 (Image formation)

漫反射 (Diffuse / Lambertian reflectance)

公式: ID(x)=ILRN(x)LI_D(x) = I_LRN(x) \cdot L

  • ID(x)I_D(x):在点 xx 上的漫反射光的强度。
  • ILI_L:从光源来的光的强度。
  • RN(x)R_N(x):在点 xx 上的表面法线与入射光方向之间的夹角的余弦值。这是一个介于 0 和 1 之间的值,表示光线与表面的相对方向。
  • LL:物体的反射率,描述了物体表面反射光线的能力。

光(Light)

色彩的表示(Colour representation)

  • RGB (红、绿、蓝)

    • 这是数字图像中最常用的颜色空间。通过组合红、绿、蓝三个颜色通道的不同强度,可以表示大多数可见的颜色。
  • HSL/HSV (色调、饱和度、亮度/值)

    • 这种颜色空间试图更接近人类对颜色的理解。其中,“色调”代表颜色的种类(如红、蓝、绿等),“饱和度”代表颜色的纯度,而“亮度”或“值”则代表颜色的明亮程度。
  • CIE 1931 XYZ

    • 这个颜色空间是基于人类视网膜上的三种锥状细胞(对应于红、绿、蓝色)的敏感性来定义的。它是其他许多颜色空间的基础。
  • LAB (亮度, a = 红/绿, b = 蓝/黄)

    • 这是一个大致上感知上均匀的颜色空间,意味着在此空间中的两种颜色之间的数学距离与人类眼睛感知到的颜色差异大致相对应。其中,L代表亮度,a表示从绿色到红色的范围,b表示从蓝色到黄色的范围。

颜色的转换 (Colour transforms)

在不同的颜色空间之间转换颜色是直接的。以下是转换的基本步骤:

  1. 线性化 R, G, B 值

    • 通常,数字图像中的 R、G、B 值可能不是线性的。在进行颜色空间转换之前,首先需要将这些值线性化,这样可以确保颜色转换的准确性。
  2. 线性变换

    • 使用一个矩阵 ( M ) 对 R、G、B 值进行线性变换,从而获得新的颜色空间的值,例如 XYZ。公式为:

      [XYZ]\begin{bmatrix} X \\ Y \\ Z \\ \end{bmatrix} = M [RGB]\begin{bmatrix} R \\ G \\ B \\ \end{bmatrix}

  3. 查找矩阵 ( M ) 的值

    • 对于各种颜色空间和白点(在给定颜色空间中定义为“白色”的值),都可以查找矩阵 ( M ) 的值。这些矩阵定义了如何从一个颜色空间转换到另一个颜色空间。
  4. 使用现有库

    • 一些编程库,如 OpenCV 和 scikit-image,都提供了内置的函数来进行颜色空间转换,这使得在实践中进行转换变得非常简单。

小结

颜色的表示不仅仅是三个值,但人的眼睛(以及标准的摄像机)仅依赖于三个传感器来感知颜色。

  • 有许多三色性颜色空间。
  • RGB 是存储图像时最常用的颜色空间,但在颜色操作中,其他颜色空间可能更为有用。

阴影和表面 (Shading and surfaces)

💡 法线(normal): 是一个与给定表面上的某点处的切面垂直的矢量。在三维空间中,任何平面(或曲面上的微小片段)都有一个与之垂直的矢量,称为该平面或曲面上该点的法向量。

恢复表面法线(Recovering surface normal)

假设表面的颜色或反射率没有变化(常数反照率)

ID(x)=N(x)L=cosθxI_D(x) = N(x) \cdot L = cos \theta_x

  • ID(x)I_D(x):在点 xx 上的漫反射光的强度。
  • N(x)N(x): 是在点 xx上的表面法向量。
  • LL: 是光源的方向。
  • θx\theta_x: 是光源方向与表面法向量之间的夹角。

我们可以恢复表面法线与光源之间的夹角,但不能直接恢复法线的确切方向。然而,我们可以添加一些额外的假设来辅助:

  • 已知物体边界上的法线:这意味着我们已经知道物体边缘上点的表面方向。
  • 相邻的法线是相似的:这意味着物体表面的一个小区域内,各点的法线方向是相似的或变化平滑的。

将这些假设结合起来,可以帮助我们更准确地估计或恢复整个物体表面的法线方向。

从阴影中恢复形状(Shape from shading)

这是一种仅基于表面亮度(或阴影)从2D图像中恢复3D形状的技术。

这种方法需要一些额外的假设,并且没有一个算法可以适用于所有情况。

频率反射率 (Reflectance from frequency)

方法:假设照明变化在图像中产生低空间频率的变化,在频率域中去除照明。

  • L=R×IL = R \times I

  • lnL=lnR+lnI\ln L = \ln R + \ln I

  • FT(ln(L))=FT(ln(R))+FT(ln(I))FT (\ln( L)) = FT( \ln (R)) + FT( \ln( I))

在频率域中应用一个高通滤波器 ( g ):

  • Image=eFT1(g×FT(lnL))Image = e^{FT^{-1} (g \times FT( \ln L))}

恢复表面性质

方法:假设光照是模糊/平滑的,而硬边缘总是由于反射率产生

  • 但是,有些反射边缘是平滑的。
  • 而有些光照产生的边缘并不平滑(如纹理、角落)

实际应用中,情况更为复杂!

  • 光照通常并不均匀。
  • 大多数表面并不是哑光 / Lambertian的。

一个Lambertian表面(或称为哑光表面)指的是一个完美散射光线的表面,这意味着从表面的任何角度观察,它都有相同的亮度。这种性质是基于Lambert的余弦定律。

小结

从单张图像中恢复表面的形状和反射率是困难的:

  • 通常需要额外的假设或约束:
    • 对表面的假设(例如,哑光(matte)、光滑)
    • 对形状和/或光照的先验知识
  • 图像包含了大量的信息,而将这些信息的来源分离开来并不容易