xucao-42 / bilateral_normal_integration

Official implementation of "Bilateral Normal Integration" (BiNI), ECCV 2022.
GNU General Public License v3.0
182 stars 18 forks source link

关于原论文中的MADEs计算 #4

Closed Li0317 closed 12 months ago

Li0317 commented 1 year ago

我想知道MADEs计算的细节,以及是如何进行计算的

Li0317 commented 1 year ago

还有readme文档中的gif图片是如何生成的

xucao-42 commented 1 year ago

抱歉忘记回了。 Mean absolute depth error先计算估计的depth map和GT depth map的median offset,对估计的depth map用这个offset纠正后再计算其和GT depth map的made。 参考代码如下

offset = np.nanmedian(depth_gt - depth_est)
offset_depth = depth_est + offset
absolute_difference_map = np.abs(offset_depth - depth_gt)
made = np.nanmean(absolute_difference_map)

gif图片我是用Pyvista这个包对迭代中每一步出来的mesh从固定视角渲染后拼起来的。

Li0317 commented 12 months ago

谢谢您的回复,我发现DiLiGenT数据集中并没有相关的GT depth map 同时我注意到代码中给出的K矩阵和DiLiGenT中给出的K矩阵的数据位置不一样,(上为您代码中的K矩阵,下为DiLiGenT中的K矩阵),请问为何要这样处理 image

xucao-42 commented 12 months ago

你可以在这里下载GT depth map。 https://www.dropbox.com/scl/fi/uhg8538lr43h2g2arim2l/diligent_depth_GT.zip?rlkey=4qdmse25e0lmrtbo9bsfvifk1&dl=0 并参考以下代码读取

xyz = scipy.io.loadmat(“*.mat")["XYZ”]
depth_gt = xyz[..., 2]
depth_gt[depth_gt > 2000] = np.nan

K不一样是因为Diligent的相机坐标系和我们有区别。 Diligent 是x右y下。 在积分的时候我们用的是x上y右。 严格来讲还需要对255.875那一项变成(511-255.875), 因为竖直方向的坐标轴方向变了,principle point的坐标也要相应变换。 这个是写代码时粗糙了,不过出来的结果几乎没有区别。

xucao-42 commented 12 months ago

另外在diligent这个perspective情况下,evaluation代码需要变更为

scale = np.nanmedian(depth_gt / depth_est)
scaled_depth = depth_est * scale
absolute_difference_map = np.abs(scaled_depth - depth_gt)
made = np.nanmean(absolute_difference_map)
xucao-42 commented 12 months ago

刚更新了diligent上的evaluation代码。参考文档 https://github.com/xucao-42/bilateral_normal_integration#evaluation-on-diligent-benchmark

希望有帮助。