威斯尼斯人wns8888小白必读)三维人脸重建必备入门--pipeline

  新闻资讯     |      2024-04-07 14:47

  威斯尼斯人wns8888小白必读)三维人脸重建必备入门--pipeline这个代码主要介绍了3D人脸的一些功能,处理网格数据,生成3D人脸,从单张二维人脸图片重建三维图像,face3D是个非常轻量化的,而且都是用numpy写的。

  这个算法主要介绍了一些常用的技术,投影,旋转,平移,变换等,pipeline输入是一个三维人脸,投影到二维图片,对原始的三维人脸做一些光照,旋转,平移等一些操作,然后投影到二维图像中,并进行着色。1_pipeline做的就是这样的操作。上面的图片就是渲染出来的操作,输入就只有正脸,没有什么光照,就只有顶点和纹理的信息。这部分将会理解三维变换到二维是怎么做的。

  上面的代码就是导入三维模型,读取顶点信息vertices,顶点上的颜色信息colors澳门威斯人,三角面片信息triangles。

  这个是颜色的信息,在已经有r,g,b的颜色信息上进行处理,为什么要进行处理,因为要进行颜色的渲染澳门威斯人,需要使用到光照模型,将某些地方进行打光,首先要确定打光的位置点。

  这行代码是确定光照的位置放在-128, -128, 300点上。为什么要设置二维数组,是因为有可能有多个光点。

  是r,g,b三个光照的强度,也就是发的什么光,例如我们将[[1, 1, 1]] 变换成[[1, 0, 1]],可得下图:

  我们将三角形的第一列,第二列,第三列取出来,得到点的信息,得到向量,将图片中的向量进行X乘。得到垂直于三角平面的法向量。

  我们有了每一个点的法向量normals ,光线入射的向量direction_to_lights,那么就可以求得每一个点的夹角。夹角越大,光线更弱,

  我们将顶点,颜色都进行变换了,那么接下来就是将三维模型渲染到二维图片。那么一般将现实世界进行拍照的时候,我们就要拿相机,进行拍照,所以首先的知道相机的位置。

  将拼接成一个矩阵,将矩阵减去一个eye,然后去乘一个旋转矩阵,返回的就是人脸的位置回归到照相机的位置,接着我们做了一个正交投影。

  可以看到我们得到的是53215,3个点,但是我们想要变换成图片,大小应该是256*256的尺寸,怎样将53215个点放在图像上,就得渲染图像。

  主要是渲染图片,传入图片,点,三角面片。我们将三角形的三个点,得到三角形的内部的,进行三角剖分,得到每个三角形的索引.tri_p0_ind,tri_p1_ind,tri_p2_ind.

  根据三角形的索引取得三个点的坐标澳门威斯人,p0.x,p1.x,p2.x 算的横轴坐标的最大值最小值,x_min,x_max,y_min,y_max。用来求取三角形内部的像素值是多少。遍历矩阵里面三角形,求取的像素值。