PhotometricStereo

 
PhotometricStereo
 
小强老师留下了道CMU的习题,见此题十分有趣,而且博客许久不曾更新,特把该作业奉上。作业是CV中的Photometric Stereo方面的,基本原理还是视觉领域的复原建模,详见这篇论文:
Aaron Hertzmann, Steven M. Seitz.
Example-Based Photometric Stereo: Shape Reconstruction with General, Varying BRDFs.
IEEE Transactions on Pattern Analysis and Machine Intelligence。
 
简言之,该实验的基本目的就是通过分析物体的一组照片来恢复该物体的三维模型。实验提供的素材照片是在一个暗室内拍摄的。基于BRDFs,将物体A与参照球体B涂上同样的涂料。固定该物体A以及参照球体B的位置,在不同角度的点光源照射下,拍摄一组照片(佳能 D40)。由于两者的表面反射率相同,光源一致,如果物体A上一点的亮度与球体B上某点的亮度相同,那么可以确定这两点具有相同的法向量。由于参照球体B的法向量已知,可以反向求得物体A各个象素点的法向量,通过法向量复原就可以恢复物体A的三维模型。
 
实验环境:Matlab 7.0
图片素材:
l         8张bottle的照片以及8张球体sphere的照片,分别拍摄于不同角度点光源照射条件下。
l         bottlemask照片一张,spheremask照片一张。用于截取图像的有用部分。
 
程序步骤:
 
1.       编写creatObjectVectors函数,用于读取8张bottle或者8张球体sphere形成一个8×M的向量矩阵。提示显示该函数每回仅读取RGB三个通道中的一个分量。但是为了避免麻烦,以及提高KD匹配的准确性,我每回读取了3个通道,这样就形成了一个24×M的向量矩阵。在这里我也用到了mask图片,用于仅仅读取照片有用部分的灰度值,而其他部分的灰度值则全部置零。这样做是为了提高KD匹配的速度。
2.       分别读取物体A的向量组以及参照球体B的向量组。
PixA = creatObjectVectors(TargetImageName,NumberOfImages,ColorIndex);
PixB = creatObjectVectors(RefImage,NumberOfImages,ColorIndex);
利用K-D树匹配具有相同法向量的各个象素点,通过实验发现K-D树的匹配效率还是很高的,有待进一步研究利用。
IDX=kdtreeidx2(PixB, PixA);
3.       利用surfnorm函数求得参照球体各点的法向量矩阵Rnormal。同样利用mask图片,用于仅仅计算照片有用象素点的法向量值,而其他象素点的法向量值则全部置零。
4.       利用IDX数组与Rnormal矩阵,反推求得物体A的法向量矩阵Normal。
5.       牛人Todd Zickler(Yale University)提供的integrability2函数恢复物体A的三维模型。
6.       由实验结果看来,有些地方还是不够精确,比如瓶体的纹路以及瓶底的底座轮廓。需要进一步细化精确。
 
 
 
阅读更多
上一篇无法形容的2007
下一篇看了段视频 想家了
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭