为了改善这件事,有个东西叫HDR,用最后从传感器拿到的图像重构光进入传感器前的场景。HDR其实是高动态范围的图像,最大值和最小值的差距很大。 重构原理是因为拍照只留下设定的亮度范围,只有这一段会被量化。那么我们不断改变曝光量,得到这个序列当中各个亮度范围的细节,再把图像叠到一起。假设曝光时位置不变,那么每个pixel就可以对起来。 我们把没有饱和的像素都选出来,做平均——这个首先要在线性化以后的值上做,把原来的值线性化——叠加完后拿到HDR图像,每个通道上的值都是一个浮点数,这样就可以表达很大的动态范围。 然而我们的vision不是孤立地看一个,要看很多像素。这些像素有固定的结构和pattern,local feature在很多vision task里面都要用到。 vision代表着图像中物体的piece,它虽然对物体的feature没有理解,但它企图去抓feature,这就是认定图像有一致的localization,不管在什么位置,不管物体的位置和朝向,这个特定的feature点都跟着物体走。 feature找到后,要去encode这个feature,这个的对slam或stereo非常有用。 我们再回归边缘检测。边缘检测就是在图像中找到比较显著的不连续的边界。 在一维里,用高斯函数的二阶导卷积图像里得到一些小波浪,这些小波浪会跟着图像走,这就是有localization特性。然而对一个pattern,要用两个边界去刻画。我们不仅需要知道feature的位置,还要知道大小。 这个函数的积分信号和卷积和不是我想要的。信号的size当和卷积和的kernel size差不多的时候,我们可以得到一个local minimum,这个点就是我们想要的。 这个点可以告诉我们feature的位置和大小。实际上遍历各种不同大小的kernel去卷积,我们把它拓展到二维,就是一维函数沿轴旋转一下。 二维函数的本身是高斯和的二次求导。这个函数能够在不同的宽度间拿到不同的值,使得不同的层互相比,到处找local minimum。最后拿到的数据中,每个圆圈的中心表示feature在哪里,每个圆圈的大小表示feature有多大。 最关键的在于如果我把这个图像挪动,缩小,转动,这些feature点也会跟着走。还有就是卷积的图像不只是一张。这些feature点是在不同的层上找的。因此找minimal不是在x,y上找,而是在x,y,z上找,然后投影。 所以当我们很好的抓到这些位置之后,那么首先要确定feature的位置,当feature点位置确定,要确定来自同一个函数,意味着我们要有一个尺度的衡量,我们不仅要知道一个feature点的大小和位置,我们还要在知道内容是什么。 基于算法找到feature后,用一个向量表示feature的内容,并抵御缩放带来的影响。这个feature里物体的远近出来的值差不多。x,y的移动已经归一化。z轴也归一化掉。 这个大量被使用在3D重构。本质思想是线条朝向记下来,计算梯度,用朝向刻画内容,再用8个bit去刻画。由于相机的图像是在不同的位置拍摄的,假如没有运动的很快,就会是有重叠的,但拍的时候由于在动,不能简单的叠加,要一对一对的解图像间的关系并拼起来。 抓到feature点后就来找对应。对应里可能会有很多的错误。求解的就是把所有的对应关系联立上面大方程。每一个点做一个变换。这个变化是一个3×3的矩阵。只要超过9个方程,矩阵就可以求解。 不正确的对应关系不能包含在线性系统里面,不然结果会偏掉,假设正确的对应远大于错误的,随便找几个对应关系。求解t,大部分正确但有偏差的。反向验证对应关系,跟transformation是否一致,过于不一致就丢掉。 拍摄的时候光照的参数有点不一样,细节一致,绝对亮度稍微有点不一样。这就已经不是vision的事情了,是graphics的问题。有个泊松image的方法,梯度留下,绝对亮度丢掉。点与点之间的相对梯度关系连起来求泊松方程,解出image。这样解完以后边界就会消失了。 摒弃了绝对亮度,利用梯度的亮度重新生成。 那么三维空间的投影是怎么发生的,成像是怎么成的呢? (责任编辑:本港台直播) |