colmap代码解读

clomap是作者在ECCV2016年发表的基于两个概率的深度值和法线估计的论文(开源),下面就开源代码Patch_match_cuda.cu文件做简单的介绍

 

  1. 产生随机法向量和随机深度值
  2. 扰动法向量(产生随机三个方位角度)和扰动深度值
  3. 根据像素坐标计算三维空间坐标
  4. 传播深度(Since depth θl and normal nl define a local planar surface in 3D, we propagate the depth θlprp -1 of the intersection of the ray of the current pixel xl with the local surface of the previous pixel (θl-1; nl-1)
  5. 计算入射角(当前参考图像的法向量和原始图像的光线的夹角)和夹角(当前参考图像光线和原始图像光线夹角)
  6. 原始图像和参考图像的单应矩阵

  

 

 

Step1 工作空间的初始化

  1. 读入模型
  2. 建立缓冲区
  3. 图像下采样(根据精度来设置采样后的大小)
  4. 法线图和深度图的路径确定
  5. 深度图范围确定

5.1遍历模型中的三维点,找出这些点所对的图像ID,依次将这些点投影到对应图像的相机坐标系求出对应的深度值

5.2每张图像对应深度范围 ,升序排序深度值

最小值 = 深度值[size*0.01]

最大值 = 深度值[size*0.99]

最小值 = 最小值*(1-0.25)

最大值 = 最大值*(1+0.25)

Step2待处理的问题problem

  1. 获取model,获取patchmatch配置,像对个数和图像名字
  2. 构造参考图像和原始图像个数结构体
  3. 遍历参考图像,计算重叠度(参考图像和左右原始图像的重叠度,稀疏点的角度出发)计算每幅图像夹角(用图像的投影中心和三维点构成的夹角,然后取出所有顺序夹角的75%位置作为最后的夹角)
  4. 通过图像的夹角和重叠度,夹角大于阈值的情况下,重叠度按照降序排列获取重叠度最高的20张影像作为参考影像的原始影像

Step3 获取cuda个数(API调用)

Step4 初始化线程池

Step5 向线程池仍任务处理

  1. problem存放原始图像序列和参考图像(缓冲区)深度图,法线图
  2. patchMatchOption对应配置信息
  3. 构造 patchMatchCuda

假设 像对 pairCount= 5

3.1按照计算能力设置最好的显卡

 

3.2 初始化参考图像

参考图像分配显存、参考图像和分配显存、参考图像平方和分配显存

转换行数组,对参考图像进行滤波

滤波结果:

得到双边滤波后的图像,原始图像,双边滤波后的像素平方

 

3.3初始化原始图像序列

 

1、颜色图像

2、深度图像

 

3.4初始化转换矩阵

 

四个方向的内参矩阵,投影中心,相对转换矩阵和平移矢量,投影矩阵和逆投影矩阵

 

3.5初始化工作空间

随机状态,深度图,根据每张图像最小值最大值范围随机初始化深度图W*H,初始化法线图W*H*3,概率图W*H* pairCount,前一次概率图(0.5) W*H* pairCount 初始化代价图W*H* pairCount

  1. 开始执行patchmatch

4.1、计算初始化cost

输入:代价图、深度图、法线图、参考图的局部平方和,参考图局部双边权重和、空域权重、颜色权重

输出:代价图、深度图、法线图

细节:求出单应矩阵,对单应矩阵的颜色值求出NCC,NCC 的值给原始图像row col id

4.2、开始迭代

从上到下开始扫描

4.2.1、定义联合概率函数,计算概率图(反向信息)和初始化前向信息(0.5)

4.2.3 、估算出剩下行计算选择概率

读取反向信息计算概率,并且修正概率

用代价图计算和前向信息计算alpha, betal  =概率图

选择概率用alpha betal   权重球的

计算入射角,夹角,图像块面积比例对应的概率

采样概率(ID) = f(选择概率)*f(s1(入射角))*f(s2(夹角))*f(s3(比例))

归一化采样概率并计算累计分布概率

找出产生随机值大于累计分布概率的ID值,累计对应的cost,对剩下的深度值计算对应的cost,找出所有cost最小值对应的深度值和法线,用新的cost来更新选择概率图和前向信息

每张影像,根据深度值求出入射角和夹角,根据这些角度和概率值约束来判断这张影像是不是稳定点,判断这些点的个数是否满足要求来选择当前深度值和法向量

 

你可能感兴趣的:(colmap,dense,stereo)