"np.uint8()使法向量被错误计算"

2024-10-08 18:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我想通过对深度图像应用梯度来计算边缘的法向量。当我出于某种原因(第一次尝试)使用np.uint8()更改矩阵图像时,法线指向错误的方向,如下图所示。在法线函数中,我使用ndimage.sobel来计算梯度。 Wrong Normal Vectors

当我从生成的实矩阵(第二次尝试)更改输入图像时,法向量计算正确,如图所示。有人能解释为什么会这样吗? Correct Normal Vectors

#1st try
sm_im = np.zeros((100,100))
sm_im[30:-30, 20:-20] = 1
sm_im = nd.rotate(sm_im, 25, mode='constant')
sm_im_copy = np.uint8(sm_im) #HERE IS THE np.uint8
sm_edge_im = cv2.Canny(sm_im_copy, 1, 5)
normals_pm, edge_pm = normals(sm_im_copy, sm_edge_im) #PAY ATTENTION HERE
cv2.imwrite(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple_debug_edge.png', sm_edge_im)
save_arr = r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\sm_normal_debug.png'
depth = Image.open(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple.png')
draw_normals(edge_pm, normals_pm, depth, save_arr)

#2nd try
sm_im = np.zeros((100,100))
sm_im[30:-30, 20:-20] = 1
sm_im = nd.rotate(sm_im, 25, mode='constant') #USING THE ORIGINAL MATRIX
sm_im_copy = np.uint8(sm_im)
sm_edge_im = cv2.Canny(sm_im_copy, 1, 5)
normals_pm, edge_pm = normals(sm_im, sm_edge_im) #PAY ATTENTION HERE
cv2.imwrite(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple_debug_edge.png', sm_edge_im)
save_arr = r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\sm_normal_debug.png'
depth = Image.open(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple.png')
draw_normals(edge_pm, normals_pm, depth, save_arr)

Tags: imagenpusersdocumentssmplanningassignmentedge

热门问题