欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

创新实训第五周总结

程序员文章站 2024-03-22 22:04:28
...

2019/4/17
上周我们得出smpl模型的法线图,深度图后,我们就要进行对smpl的轮廓和原图轮廓进行匹配了
1.得到smpl的黑白轮廓图mask 和原图的黑白轮廓图mask
创新实训第五周总结
使用抠图算法和opencv库的图像分割
创新实训第五周总结
2.求出原图mask与smpl.mask的对应关系
对应关系的含义:原图中每一个像素点寻找其对应在smpl像素点中的一个f(x)

首先获取内部点集合

import matplotlib.image as mpimg # mpimg 用于读取图片
 
def getPointIn(path,outPoint):
    outPoint=list(outPoint)
    img =mpimg.imread(path)
    q=[]
    if not len(img.shape)==2:
        img= img[:,:,2]
    print (img.shape)
    w,h=img.shape
    
    for i in range(w):
        for j in range(h):
            if not img[i,j]==0 and  (not [i,j] in outPoint ):
                q.append([i,j])
         
    return q
 
data1=data1.tolist()
inyuan=getPointIn('C:/Users/hsy/Desktop/xmsx/DIna/kuli_mask1.png',data1) 
data2=data2.tolist()
insmpl=getPointIn('C:/Users/hsy/Desktop/xmsx/DIna/a.png',data2)
 
inyuan=np.array(inyuan)
insmpl=np.array(insmpl)
print(insmpl.shape)
print(inyuan.shape)
insmpl+=[35,0]
data2=np.array(inyuan)
data2+=[35,0]
data2=data2.tolist()

3.求解f(x)
创新实训第五周总结
参考论文: M. S. Floater. Mean value coordinates. Computer aided geometric design, 20(1):19–27, 2003.
其中的角度关系创新实训第五周总结
求解tan(α/2)用数学公式:
已知两个矢量,使用矢量叉乘可以得到sin α 以及cos alpha
根据半角公式 tan(α/2)=(1+cos α )/sin α
创新实训第五周总结
相应代码

 
result=[]
 
for pos,j in enumerate(list_in_contours):
    tan=[] 
    for i in range(1,len(data1)):
        tan.append(getTan(data1[i-1],j,data1[i]))
    tan.append(getTan(data1[-1],j,data1[0]))
    w=[]
    sum=0
    for i in range(len(data1)):        
        w.append( (tan[i]+tan[i-1])/np.sqrt((data1[i][0]-j[0])*(data1[i][0]-j[0])+(data1[i][1]-j[1])*(data1[i][1]-j[1])))
        sum=sum+w[-1]
    w=w/sum
 
    a=0
    b=0
    for q in range(len(data1)):
        a=a+w[q]*data2[ (int)( lis[len1-1-q][1])  ][0]
        b=b+w[q]*data2[ (int)( lis[len1-1-q][1])  ][1]
    result.append((list_in_contours[pos],[a,b]))
    
    if(pos%1000==0):
        print(pos,result[-1]) 

接下来就是求解f(x)了