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

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

当我从生成的实矩阵中更改输入图像时(#2nd Try),可以正确计算法向矢量,如图所示。有人可以解释为什么会这样吗? 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,mode='constant') #USING THE ORIGINAL MATRIX
sm_im_copy = np.uint8(sm_im)
sm_edge_im = cv2.Canny(sm_im_copy,edge_pm = normals(sm_im,save_arr)
djjyqwj 回答:np.uint8()使法向向量被错误地计算

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3153691.html

大家都在问