分治法三维重构

2019.4.11--4.12

一:Delaunay三角剖分-分治法(Divide and conquer)

1: 散乱点云排序,按照x从小到大,若x 相同则按照y从小到大排序

分治法三维重构_第1张图片             分治法三维重构_第2张图片

                   (图1)原始点集排序                          (图2)将点集分割成每个子集个数不大于3的点集

2:划分子集,将所有点集递归的划分两个数量相近的子集,每个子集的点数不大于3.

       如何递归的划分子集并保存子集数据。

      递归分割:(输入左侧最大子集,右侧最大子集

                          如果左侧最大子集个数>3;递归分割

                          否则保存左侧数据

                          如果右侧最大子集>3;递归分割

                          否则保存右侧数据

         获得左侧第一个最小子集及右侧第一个最小子集

3:合并规则定义:LL边:边的两点坐标均在分割线左侧,

                               LR边:边的两点左边一个在左侧,一个在右侧,及两点之间的连线与分割线相交,

                               RR边:边的两点坐标均在分割线右侧

分治法三维重构_第3张图片分治法三维重构_第4张图片

               (图3)左侧子集合并                                                (图4)右侧子集合并

       确定一条LR基线,位于最下方且不与其他线相交       

分治法三维重构_第5张图片分治法三维重构_第6张图片

               (图5)LR基边确定                                                  (图6)第二条LR边相对基边角

        3.1  分割线怎么确定?需要保存吗?分割线根据点的索引位置来划分,保存分割后的点,自然就得到分割线的坐标了

        3.2  代码中怎么定义边的类型,代码如何实现?   用边的两点坐标的值小于分割线,则为LL边,两边大于分割线则为RR边, 否则为RL边。利用排序后坐标的索引来分割边,当两个子集合并成一个父集时,需要更新边的相对定义。

        3.2 查找LR基线,如何确定基线?   找出LL边y值最小和RR边y值最小

分治法三维重构_第7张图片分治法三维重构_第8张图片

图(7)第二个候选点在圆内的情况                                                       (图8)判断下一个潜在候选点

4:根据确定的基线,选定下一条LR边。候选点如何选取?            需要保存到数组? 候选点存入临时数组,更新使用

        利用角度搜索,两个规则:

       4.1  LR边判定时需要外接圆内不包含下一个候选点,如果包含下一个候选点,则需要删除边。

       4.2  角度小于180度

分治法三维重构_第9张图片

                                                                  (图9)利用空圆特性连接候选点

分治法三维重构_第10张图片                                                                               (图10)连接新的LR边

5:合并左右两个子集(输入左右,右侧,此时只有最小单元),按照规则合并左侧、右侧数据,更新为左侧。同时根据排序的规则,可以利用左侧的数据读取右侧两个最小单元的数据,合并后更新为右侧,更新候选点,再次递归。直到所有点都加入完成,不在有新增的候选点,退出索引,网格划分完成。

 

翻译自: http://www.geom.uiuc.edu/~samuelp/del_project.html

参考文献    [1] https://www.jianshu.com/p/172749e6116a 

                  [2]https://www.sciencedirect.com/science/article/pii/S0010448597000821

 

你可能感兴趣的:(数学算法,c++,图像处理,三维重构)