Python 通过积分使用形状从法线贴图计算深度贴图

Python 通过积分使用形状从法线贴图计算深度贴图,python,computer-vision,normals,Python,Computer Vision,Normals,我试图计算给定法线贴图的深度贴图。我做了一些研究,发现这可以通过使用Forsyth&Ponce的“通过集成的形状”方法来实现。我尝试了一个实现,但是它不起作用,它只是返回一个白色图像。我不确定我是否构造了scipy积分,或者我是否没有理解它背后的概念。我遵循了第33-37页的pdf格式。我们将不胜感激。 以下是我现在掌握的代码: def fx(s, y, normals): s = int(s) return normals[s,y,0]/normals[s,y,2] def

我试图计算给定法线贴图的深度贴图。我做了一些研究,发现这可以通过使用Forsyth&Ponce的“通过集成的形状”方法来实现。我尝试了一个实现,但是它不起作用,它只是返回一个白色图像。我不确定我是否构造了scipy积分,或者我是否没有理解它背后的概念。我遵循了第33-37页的pdf格式。我们将不胜感激。 以下是我现在掌握的代码:

def fx(s, y, normals):
    s = int(s)
    return normals[s,y,0]/normals[s,y,2]

def fy(t, x, normals):
    t=int(t)
    return normals[x, t, 1]/normals[x,t,2]


n_img = np.clip(np.asarray(Image.open("normal.png"), dtype=float) / 255, 0, 1)
d_img = np.zeros((n_img.shape[0], n_img.shape[1]))
h,w,d = n_img.shape

for i in range(h-1):
    for j in range(w-1):
        abc = n_img[i, j]
        #this is to reduce the number of calculations done for each integral summation
        x = 0 if i < 35 else (i-34)
        y = 0 if j < 35 else (j - 34)
        #print(i, j, x, y)
        inte = np.asarray(quad(fx, x, i, args=(j, n_img))) + np.asarray(quad(fy, y, j, args=(i, n_img)))
        #print(np.array([inte[0], inte[1]], dtype=float))
        d_img[i][j] = inte[0]

cv2.imshow("tmp", d_img)
cv2.waitKey()
def fx(s,y,法线):
s=int(s)
返回法线[s,y,0]/法线[s,y,2]
def fy(t,x,法线):
t=int(t)
返回法线[x,t,1]/法线[x,t,2]
n_img=np.clip(np.asarray(Image.open(“normal.png”),dtype=float)/255,0,1)
d_img=np.zero((n_img.shape[0],n_img.shape[1]))
h、 w,d=n_img.形状
对于范围(h-1)内的i:
对于范围(w-1)内的j:
abc=n_img[i,j]
#这是为了减少每次积分求和的计算次数
如果i<35,则x=0,否则(i-34)
如果j<35,则y=0,否则(j-34)
#打印(i、j、x、y)
inte=np.asarray(quad(fx,x,i,args=(j,n_img)))+np.asarray(quad(fy,y,j,args=(i,n_img)))
#打印(np.array([inte[0],inte[1]],dtype=float))
d_img[i][j]=inte[0]
cv2.imshow(“tmp”,d_img)
cv2.waitKey()