用KITTI做单目深度估计的时候需要用NYU Depth Toolbox工具处理KITTI数据集中原始的深度图,得到补全后的深度图。网上这方面的教程比较少,记录一下在此过程中踩的坑。
首先在官网https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html下载工具箱。
发现其中既有.m文件又有.cpp文件,demo_fill_depth_cross_bf_test.m是用作深度补全的文件,需要用到mex_cbf_windows.cpp,所以要使用matlab的混合编译功能,设置办法参考https://blog.csdn.net/BillyPan/article/details/98071221
mex -setup成功之后,输入mex mex_cbf_windows.cpp cbf_windows.cpp进行编译,运行demo_fill_depth_cross_bf_test.m会发现图片大小不对,因为源程序处理的图片大小是480640,而KITTI数据集中图片的大小是3751242,需要修改的地方有以下几处:
crop_image.m中:
get_projection_mask.m中:
cbf_windows.h中(记得修改完之后要重新编译):
然后程序就可以跑通了,但是输出的补全深度图却显示成这样:
???
找了好久原因都没有找到,最后求助了mujiangyao的代码才找到了原因,在此特别感谢mujiangyao的帮助.原因是用imshow显示double类型的图像时应该先调整范围或者转化为uint16,后者会影响图像显示的精度.具体解释参考https://blog.csdn.net/lihe4151021/article/details/89372688
使用imshow(uint(imgDepthFilled16))显示的补全深度图:
使用imshow(imgDepthFilled,[])显示的补全深度图:
参考:
https://blog.csdn.net/billypan/article/details/100926643
https://blog.csdn.net/mujiangyao/article/details/112106263