yxuhan / AdaMPI

[SIGGRAPH 2022] Single-View View Synthesis in the Wild with Learned Adaptive Multiplane Images
218 stars 24 forks source link

大佬,你的文章太棒了,我有一个问题,就是,你的系统相机内外参和真实的关系是什么,有人问过你这个问题,你没有明确解释 #18

Open Frown000 opened 1 year ago

Frown000 commented 1 year ago

def gen_translate_path(num_frames=2, r_x=0.65, r_y=0., r_z=0): poses = torch.eye(4).repeat(num_frames, 1, 1) poses[1, 0, 3] = r_x poses[1, 1, 3] = r_y poses[1, 2, 3] = r_z

yxuhan commented 1 year ago

hi,感谢您对我们工作的兴趣。

我们的方法在coco数据集上训练,由于coco数据集的图片没有提供相机内参,所以我们在coco上训练/测试时假设所有图片的相机内参均为一个预设但比较合理的值,也就是:fx=width 0.58,fy=height 0.58

相机外参的尺度与DPT depth map相同。DPT的depth map尺度与真实世界的尺度并没有准确联系,e.g. dpt depth map上一个pixel的值为1不代表这个pixel的深度就是1m。

Frown000 commented 1 year ago

假设我需要输出的结果是,在水平方向上,前一张图片和后一张图片的水平距离是1cm,请问这个地方我如何修改呢

def gen_swing_path(num_frames=90, r_x=0.14, r_y=0., r_z=0.10):
    "Return a list of matrix [4, 4]"
    t = torch.arange(num_frames) / (num_frames - 1)
    poses = torch.eye(4).repeat(num_frames, 1, 1)
    poses[:, 0, 3] = r_x * torch.sin(2. * math.pi * t)
    poses[:, 1, 3] = r_y * torch.cos(2. * math.pi * t)
    poses[:, 2, 3] = r_z * (torch.cos(2. * math.pi * t) - 1.)
    return poses.unbind()

我是这样修改的,似乎结果有点不对,如果有问题请问我应该怎么修改呢:

def gen_swing_path(num_frames=10, r_x=0., r_y=0., r_z=0.):
    delta_x = 0.01
    poses = torch.eye(4).repeat(num_frames, 1, 1)
    poses[0, 0, 3] = 0
    poses[0, 1, 3] = 0
    poses[0, 2, 3] = 0
    for i in range(1, num_frames):
        poses[i, 0, 3] = r_x
        poses[i, 1, 3] = r_y + i * delta_x
        poses[i, 2, 3] = r_z
    return poses

@yxuhan

yxuhan commented 1 year ago

你需要先自己计算DPT depth map的scale,比如用一张已知scale的depth map和DPT map做对齐。

假设DPT depth map的scale是1m,那你把delta_x设置成0.01就可以生成水平距离1cm的图;如果DPT depth map的scale是10m,那delta_x就需要设置成0.001。

Frown000 commented 1 year ago

你的意思我用任何一张图像去做都需要对齐dpt的scale

Frown000 commented 1 year ago

假设我用你例子给的图像和depth,他的dpt对应的scale是多少呢