|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
对nerf代码中的_load_data函数,我有如下疑问:
1、当height is not None,为何是sh[0]除以height得到factor?这种计算采样因子的方式有什么依据吗?
2、imgfile的长度为何需要是poses的宽度?
3、为何取poses的第4行?
4、imgs = np.stack(imgs, -1) 有什么作用呢?扩展维度吗?
代码如下,有疑问处已经标红:
def _load_data(basedir, factor=None, width=None, height=None, load_imgs=True):
poses_arr = np.load(os.path.join(basedir, 'poses_bounds.npy'))
poses = poses_arr[:, :-2].reshape([-1, 3, 5]).transpose([1,2,0])
bds = poses_arr[:, -2:].transpose([1,0])
img0 = [os.path.join(basedir, 'images', f) for f in sorted(os.listdir(os.path.join(basedir, 'images'))) \
if f.endswith('JPG') or f.endswith('jpg') or f.endswith('png')][0]
sh = imageio.imread(img0).shape
sfx = ''
if factor is not None:
sfx = '_{}'.format(factor)
_minify(basedir, factors=[factor])
factor = factor
elif height is not None:
factor = sh[0] / float(height)
width = int(sh[1] / factor)
_minify(basedir, resolutions=[[height, width]])
sfx = '_{}x{}'.format(width, height)
elif width is not None:
factor = sh[1] / float(width)
height = int(sh[0] / factor)
_minify(basedir, resolutions=[[height, width]])
sfx = '_{}x{}'.format(width, height)
else:
factor = 1
imgdir = os.path.join(basedir, 'images' + sfx)
if not os.path.exists(imgdir):
print( imgdir, 'does not exist, returning' )
return
imgfiles = [os.path.join(imgdir, f) for f in sorted(os.listdir(imgdir)) if f.endswith('JPG') or f.endswith('jpg') or f.endswith('png')]
if poses.shape[-1] != len(imgfiles):
print( 'Mismatch between imgs {} and poses {} !!!!'.format(len(imgfiles), poses.shape[-1]) )
return
sh = imageio.imread(imgfiles[0]).shape
poses[:2, 4, :] = np.array(sh[:2]).reshape([2, 1])
poses[2, 4, :] = poses[2, 4, :] * 1./factor
if not load_imgs:
return poses, bds
def imread(f):
if f.endswith('png'):
return imageio.imread(f, ignoregamma=True)
else:
return imageio.imread(f)
imgs = imgs = [imread(f)[...,:3]/255. for f in imgfiles]
imgs = np.stack(imgs, -1)
print('Loaded image data', imgs.shape, poses[:,-1,0])
return poses, bds, imgs
1、在_load_data函数中如果给定了height,则会按照 height 来调整图片的尺寸。由于原始图像的尺寸是 sh[0] x sh[1],且宽高缩放比例应该相同,因此我们可以用 sh[0]/height 来计算缩放比例 factor。这种计算采样因子的方式是基于输入高度和图片高度之间的比例关系,可以根据需求进行调整。
2、imgs的长度需要与poses的宽度相同,即 len(imgfiles) = poses.shape[-1],因为每一个位姿对应着一张图片,每个位姿的姿态参数以及每张图片大小都不同,所有我们需要将位姿和图片配对,同时保证处理后的图片和位姿数量相同。
3、在poses_arr的最后两列存储了每个场景中图片的最小边界,第4行是指从上到下数第4行,即存储图片最小边界的行,我们需要将其覆盖为历史结果的高度值,并且将其乘以 1/factor 得到缩放后的边界位置,用于后面的相机参数设置。
4、imgs = np.stack(imgs, -1) 将存储着多个图像的列表 imgs 沿着最后一个轴(即-1轴,代表通道数)进行合并,得到一个新的数组。这里的作用并不是扩展维度,而是将处理后的多个图像拼接到一个数组中便于后续处理。
求最佳答案
|
|