首先是反射系数,多少量的光强达到这个表面上有多少量的光强被反射出去了,并且这个光强和入射角度和出射角度都是有关系的,进去一个球面的角度,出去一个球面的角度,所以总共它是一个四维的函数。 这个在图形学里面被非常heavy的study。因为我们要在计算机里重现真实世界中物体的外观,这个函数就决定了这个物体的外观是什么样子的。我们做一个matching,做stereo,从不同的角度看物体,试图去找到对应的点。 这里的挑战是假设这个函数是一个常量,就意味着对这个特定的点,不论从哪个角度,颜色一样。真实世界不是这样的。 真实的世界中,这个BRDF并不是一个常量。即使是同一个点不同视角去看颜色也是不一样的。 早年的vision里面,会假设一个所谓的lambertian surface。 反射是由于物体表面粗糙的微元面导致的,光打上去后会朝不同的方向去发散反射。假设光强在各个方向的反射是均匀的,这个就叫diffuse reflection。 粉笔和石膏就和这个十分接近。diffuse reflection意味着什么呢?早年的stereo算法都假设对特定的点从不同角度去看都是一样的,我们就可以用不同角度图片上的feature点去做对应,推演其三维空间的位置。但是实际问题是specular reflection。 光源反射不均匀,通常会在镜面方向上多一点,然后形成沿着镜面光源散射的specular peak。 如果这个specular peak很瘦,就会形成一个很亮的点。极限情况下它可能是一个冲击函数,这个时候物体看起来就像一面镜子。有点时候又会宽一点,比如哑光的材料。 这个会带来很多困难。因为multiple view的时候颜色会发生变化,尤其specular很强的时候,就会导致stereo,matching等很难做,很多算法也会受到影响。 这是一个简单的磨皮算法。大概三四行代码就可以实现。 大家怎么看一个磨皮算法的效果?就看在去掉脸上皱纹的同时,眉毛和头发有没有留下。磨皮算法本质上要把空间中一些细节去掉,但对于计算机来讲,很难区别纹路,是皱纹还是毛发。 这里的两张图,左边的图里把所看到的亮度的变化的G和B去掉,只用R来构造亮度的变化。当然只把亮度替换掉,把颜色留下。另外一张则把G留下。 由于不同波长的光在皮肤里散射的不同,散射强的红色就会把皮肤的褶皱给blur掉,但毛发不受影响。绿色就基本没有做什么blur,留下了皮肤上各种粗糙的东西。 有种说法是尼康相机适合拍人像,原因是什么呢?人类构造图像有三条三原色的曲线。相机为了接近人类的视觉,构造出人类最后可以看到的图像,同样也有类似的三条曲线,尼康的传感器里构造RGB系统时分量系统往绿色和蓝色的分量少一点。当系统把很高维的分量投射到三维里面去的时候,背后的光路是不一样的,虽然投影后颜色是一样的。佳能往高能量的光谱多一些。因此尼康拍人像的时候,细节更多来自红色的通道,所以皮肤就会看起来很好。当然这个差异不是非常的大。 说完光谱的事情,我们现在假设所有的事情在一个通道上发生。 对于现有的大部分传感器,光进来后经过一系列的处理最终变成图像上面pixel上的value,这里有几个步骤。 首先经过一个镜头并处理后,有一个exposure。因为传感器不是真的拿一个snapshot,其实是积分了一段时间才能测量到光的强度。然后经过模式转换器,把光通量模拟量转换成一个数据量。最后还有一些post-processing。 为了尽可能多得看清细节,亮部暗部都要有一些。但我们发现最终的图像有些部分饱和掉了看不清楚了。 那么在vision的采集系统里都有哪些坑? 首先,过镜头的时候会滤掉一部分波长的光,因为大部分系统不是为vision understanding设计的,是为拍照设计的。为了得到更好的成像的质量就会滤掉一些对于构造图片没有用的光。紫光一般被反射出去了。 这是一个増透膜,使得更多的光进入镜头,可以提高照片质量。 大部分CCD和相机其实对红外光都是很敏感的,我们可以拿遥控器对着手机看是很亮的,所以几乎所有的镜头都会对红外光有一个过滤。如果不过滤,几乎是一片白。 这部分做了一个filter mask,把我们不想看的紫外红外干掉。剩下可见光透过镜头。 接着是曝光。 (责任编辑:本港台直播) |