Shape from shading(SFS)的原理和我的实现结果

【更新】我的新博客:www.ryuzhihao.cc,当然这个csdn博客也会更新

              本文在新博客中的链接:点击打开链接

完成时间:2016年6月13日(大二下学期)

博客时间:2017年4月19日


SFS效果截图:



       接触到SFS的一个契机,是我在大二期间做的一个ppt,这是我第一次去通过阅读各种论文来解决问题。如今过去一年了,在这一年里,我使用Qt+OpenGL做了很多关于计算机图形学(Computer Graphics)的小程序,涉及很多不同的方向,而阅读论文也渐渐变成了我的一个习惯,从中文paper到英文paper。关于image-based的重建,也有了其他的了解,也花了将近2个月的时间,完成了一个仿照visual SFM的多幅图像的三维重建程序(multi images-based)。现在,回头看当时写的这个单幅图像的三维重建,实在感慨万千啊!现在拿出当时做的这个一个小东西给大家分享。

       说明:下面的图片都是从我的ppt里截图的,渣手绘……


Shape from shading的数学原理:


        Shape from shading是由Horn于1980年提出的一种单幅图像恢复三维信息的一种方法(Single Image-based Reconstruction)。对于Lambert表面具有较好的效果。下面简要的介绍一下其基本步骤和原理:

         

1. 得到灰度图像I。

          可以利用如下关系式计算:

                                     gray = 0.3r + 0.59g + 0.11b;

2. 求出变换到光源坐标系的变换矩阵R

          已知光源的两个偏角φs 和θs,并通过下面的关系式计算变换矩阵R:

            

3. 将矩阵R与原灰度图像I相乘,调整相机沿光源方向看去,得到新灰度图像E。

            这一步实现了,从成像坐标系转换到光源坐标系

4. 计算新灰度图像E沿x和y方向的梯度(Ex和Ey),其实就是求偏导。

         

5. 计算物体表面某点的倾角φ

        下图表示了什么是倾角φ:

       

         关于倾角φ的计算,便是利用lambert表面的性质:

         lambert余弦定理(Lambert Cosin Law)

          

         我们利用Lambert Cosin Law 便可以很轻松的利用下面的关系式估计出某点的倾角:

         任意亮度对应的倾角φi:Ei=Emax*cos φi

          则,物体表面任意点的倾角φi即为:φi=arccos(Ei/Emax)

6. 计算物体表面某点的偏角θ

      下图表示了什么是偏角φ:


         关于偏角θ,可以通过前面第4步求出的两个方向的梯度计算出来:

                       θi = arctan( Ey / Ex);

7. 计算在光源坐标系下,物体表面任意点的法向量(nx,ny,nz)

        此时把物体表面任意面源仍看做是一个球体,此时在光源坐标系下,物体表面某点的法向量为:


        n' = (nx,ny,nz);

       其中:nx = sinφ*cosθ

                   ny = sinφ*sinθ

                   nz = cosφ

8. 计算在光源坐标系下,原图像某点对应的高度值:

              height' = nz* 反射率。  (反射率可以根据材质选取)

9. 将结果从光源坐标系恢复到原成像坐标系:

           只需将结果与如下的逆变换矩阵相乘即可


  • 18
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
在计算机视觉中,shape from shading法是一种利用光照信息估计物体表面形状的技术。在这种技术中,我们利用物体表面反射光线的亮度和阴影,通过推断出光照模式以及光照条件,来计算物体表面各个点处的法向量,从而推导出物体的三维形状。 实现shape from shading的过程大致可以分为以下几个步骤: 1.获取光照信息和图像数据 其中光照信息可以通过外将知识(如太阳位置和光源强度)或者内部知识(如物体表面材质)进行推断。基于这些信息,我们可以计算出光照强度、光照方向等参数。而图像数据则可以通过摄像机拍摄或者计算机生成得到。 2.计算图像亮度值 对于每个像素点,我们可以计算出其在不同光照条件下的亮度值。这可以通过将光源位置固定,再在不同位置拍摄多张照片并求平均值的方法得到。也可以通过第一步中的推断光照信息来计算。 3.求解法向量 在得到亮度值后,我们需要解出其对应的法向量。这可以通过最小二乘法求解。该方法会用已知点的法向量来拟合未知点的法向量,并通过迭代使所得结果收敛。 4.重建物体三维形状 最后,我们可以利用上一步得到的法向量,从而计算出物体各点的三维坐标。这可以通过求解偏微分方程得到,这个方程表示光线在物体表面上相互作用的方式。 总之,shape from shading技术可以用于解决许多计算机视觉中的问题,如三维建模、图像重建等。但由于它对光照的依赖较强,因此在实践中需要充分考虑光照条件以及其稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值