照片唤醒-photowakeup

记录暑假的一些结果…

在这里插入图片描述
这张图是数据集中的原始图片 ,利用smpl以及姿势检测cpm,得出拟合出的smpl模型,并得出他的相机投影的轮廓图、深度图、权重图。
值得注意的smpl得到的模型结果不够精细,需要进行warping得到更加精细的轮廓。

关于warping
也就是图像变形,通过拉伸得到准确轮廓的效果。
算法有很多种:例如
在这里插入图片描述
不要求准确度的情况下,当然怎样方便怎样来,随意选一种方法就好

在这里插入图片描述 在这里插入图片描述
上图为轮廓图,左边是原始smpl的轮廓,右边是经过warping后得到的轮廓图。这里要提到的是,既然要进行warping,那么就需要检测到原始图片的人体准确轮廓,这里我们使用的是MASK_RCNN来得到准确轮廓的,再以此为基准进行warping。
在这里插入图片描述 在这里插入图片描述
上图为深度图,左边是原始smpl的深度图,右边是经过warping后得到的深度图。接下来就可以根据深度图进行三维重建了,所以在整个过程中smpl模型只是为了给我们提供那深度图等几张图而已,最后的模型是我们自己根据深度图进行恢复出来的,从深度图恢复三维模型的过程就像地理中登高图拔起山脉一样,类似但是却要注意计算机视觉中的相机成像关系。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

因为我们通过深度图进行重建的方案其实是根据正反两张深度图,分别重建出人体的正面与背面,最后再将两个曲面缝合起来,在缝合的过程中出现了一些问题,就是一开始的缝合边缘漏洞特别大,就如上面第一张图一样,后面进行过改进,用类似贴胶带的方式得到第二张图的结果,但是还是有洞,效果欠佳,最终通过寻找“广义的轮廓点”才解决了这个问题,使得两个曲面完美缝合,成为封闭的人体模型。

#取轮廓点相关代码
ef getlunkuo(n):
    imag = cv2.imread(str(n) + '.png')
    resolution = imag.shape
    gray = cv2.cvtColor(imag, cv2.COLOR_BGR2GRAY)  # 转化成单通道灰度值
    smooth_image(gray, 6)
    gray = gray.T
    smooth_image(gray, 6)
    bfs_smooth(gray.shape[0], gray.shape[1], gray, 5, 12)
    flag = []
    # 逐个像素点寻找
    for u in range(resolution[1]):
        for v in range(resolution[0]):
            if gray[u, v] != 0:
                if(u-1>0 and v-1>0 and u+1<resolution[1] and v+1<resolution[0]):
                    if(gray[u-1, v+1]==0 or gray[u-1, v]==0 or gray[u-1, v-1]==0 or gray[u, v-1]==0 or gray[u+1, v-1]==0 or gray[u+1, v]==0 or gray[u+1, v+1]==0 or gray[u, v+1]==0):
                        flag.append([u, v])
    return flag

在这里插入图片描述
如图,通过Maya以及win10自带的3d工具进行纹理贴图,并使用Mixamo网站的在线功能(这个网站的确很良心,当初游戏设计课的时候就十分好用),手动添加了相应的姿势,进行粗略的运动尝试。
在这里插入图片描述在这里插入图片描述
如图,为在行走与奔跑两种情况下的演示gif,(图中的白点其实是我在使用Maya过程中失误掰出来的。。。),至此项目重心转移,当作入门练手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值