1、下载安装包
github链接:https://github.com/colmap/colmap
去releses里面下载对应的版本,例如:
然后进行解压,如果是windows版本,运行.bat文件即可。
2、准备图片
colmap处理的是图片文件,如果是视频文件,需要对其进行抽帧。抽帧的代码如下所示:
import cv2
if __name__ == "__main__":
# cap = cv2.VideoCapture(0) #读取摄像头
cap = cv2.VideoCapture("./VIDEOS/example_videos1.mp4") #读取视频文件
counter = 0
num = 1 # 抽帧间隔
while(True):
ret, frame = cap.read()
if ret:
counter += 1
if counter % num == 0:
cv2.imwrite(f"./images/{counter}.jpg", frame)
# cv2.imshow("frame", frame)
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
else:
break
cap.release()
print(counter)
将其保存在我们项目下的images文件夹中。
3、colmap新建项目数据库文件并进行特征提取和匹配
首先需要新建一个.db结尾的数据库文件,并选取images文件夹作为数据源。在file → newproject中。
然后在processing → feature extract 和 prcessing → feature matching 。进行数据特征提取及匹配
4、开启三维重建
- 点击reconstruction → start reconstruction开启三维重建stf建立稀疏点云。
重建的结果是稀疏点云(就是刚刚提取的特征点三角化后的三维坐标)和相机位姿恢复的示意图(这里发现一个问题,当画面中有固定位置的像素,会对相机位姿恢复产生较大影响)。
可以将稀疏点云导出为ply文件进行查看 file → save project,可以使用另一个软件打开查看,例如:MeshLab。
- 点击reconstruction → dense reconstruction 进入稠密重建的步骤。
- 点击右上角的select选择筹募重建项目保存的文件夹,可以在项目文件夹下新建一个dense文件及来进行保存。
- 点击左上角的Undistortion进行图像的去畸变。
- 点击Stereo进行密集匹配,时间将会较久。
- 完成密集匹配后,可以看到生成的深度图,colmap采用的是PatchMatch的倾斜窗口密集匹配算法。点击Fusion进行深度图融合生成稠密点云。
- 完成后,可以导出稠密点云结果(实际,在dense文件夹下已经进行了自动保存。)
- 接下来需要进行表面重建,可以选择Possion泊松表面重建和Delaunay狄洛尼三角网重建。
- 接下来就可以使用三维软件进行查看了,例如在meshlab里面打开dense文件夹下的meshed-possion.ply即可。
4、使用colmap生成NeRF输入数据格式 LLFF
我们在第三步中对图片进行信息提取和和匹配,就可以对相机的位姿进行保存和输出。在特征提取时,需要注意Camera model选择为SIMPLE_PINHOLE,其他配置可以不用更改,点击Extract后,自动开始提取图片特征。提取过程中可以在右侧Log一栏中查看进度,请确保提取过程中没有Erro报错(本文后面会对部分Erro报错给出可能的原因)。
点击File → Export model 以导出模型,注意,请在工作目录下新建/sparse/0/文件夹,并将模型导入到该路径下例如(./COLMAP_test/sparse/0/),选择改文件夹。或者经过稠密匹配后也会在dense文件夹中生成。
使用脚本生成LLFF格式数据集,需要注意的是,脚本需要修改这个部分:
parser.add_argument('--scenedir', type=str,
default="D:/software/colmap/COLMAP-3.8-windows-cuda/COLMAP-3.8-windows-cuda/Project2/",
help='input scene directory')
最终会生成.npy文件,最终构建数据集。