计算表面法线贴图时发生了一些奇怪的事情

Something weird is happening when computing surface normal map

我正在使用以下代码从深度图像生成表面法线贴图:

for x in range(depth.shape[0]):
    for y in range(depth.shape[1]):
        try:
            dzdx=(depth[x+1,y,0]-depth[x-1,y,0])/2
            dzdy=(depth[x,y+1,0]-depth[x,y+1,0])/2
        except:
            dzdx=0
            dzdy=0
        sub=np.asarray([-dzdx,-dzdy,1])
        
        normals[x,y,:]=sub/np.linalg.norm(sub)

对发生的事情有什么想法吗?

您在行中有错误:

dzdy=(depth[x,y+1,0]-depth[x,y+1,0])/2

应该是

dzdy=(depth[x,y+1,0]-depth[x,y-1,0])/2