2022年5月18日,下午07:46
复制:将相机放置在场景中,并将其指向30x50x10毫米的块(附件)。用:
打开生成的pcd。使用MeshLab或点云查看器的xyz文件。
预期结果:生成的点云是一个矩形块,尺寸为30x50x10。
实际结果:得到的点云尺寸不是30x50x10,角度也不是90度。
修复z-distortion:如果我在将img归一化为0到1之间后插入以下行:
然后得到的点云具有正确的尺寸。注意,上面的变换是0到0和1到1,并将直线和平面转换为直线和平面,但扭曲了距离和角度。也许有人在某处插入了某种伽马校正?
代码:
从robodk导入robolink
导入numpy为np
进口操作系统
导入的时间
RDK = robolink.Robolink()
#获取深度快照
cam = RDK。项目(深度相机)
cam.setParam(“开放”)
time . sleep (0.1)
RDK.Cam2D_Snapshot(os.path.join(os.path.abspath('.'), 'tmp.grey32'), cam, 'Depth')
Grey32 = np.fromfile('tmp.grey32', dtype='>u4')
W, h = [:2]
Img = np. fluid (np;(2:], (h, w)))
Img = (Img / np.iinfo(np.uint32).max) # rescale to float 0.0 to 1.0
FAR_LENGTH = 100 #无论FAR_LENGTH设置为多少
img = img * FAR_LENGTH
Img = Img .astype(np.uint16)
#保存为点云与open3d
导入open3d为o3d
FOV = 63.91 #无论FOV设置为多少
fy = h / (2*np.tan(np.radians(FOV) / 2)) # FOV为相机视场
3d.camera. pinholecameraintrinsic ()
宽度= w,
身高= h,
对fx和fy使用相同的值
=年度财政年度
Cx =w / 2,
Cy =h / 2,
)
pcd = o3d.geometry.PointCloud.create_from_depth_image(o3d.geometry.Image(img), intrinsic)
o3d.io.write_point_cloud (pcd。xyz', pcd, write_ascii=True)
预期结果:生成的点云是一个矩形块,尺寸为30x50x10。
实际结果:得到的点云尺寸不是30x50x10,角度也不是90度。
修复z-distortion:如果我在将img归一化为0到1之间后插入以下行:
代码:
Img = Img / (2 - Img)