1. 서론
광학 센서로부터 탐지되는 3차원 점군(point cloud)은 학계뿐만 아니라 업계에서도 다양한 목적으로 활용되는 주요 데이터베이스이다. 점군은 다수의 영상에서 추출된 대응점을 활용한 3차원 좌표 복원 등 간접적인 방법이나 빛의 이동 거리와 도달 시간을 이용해 위치를 측정하는 직접적인 방법을 통해 얻을 수 있다. 특히, 최근 차량자동주행(Wolcott and Eustice, 2014), 정밀측량(Han et al., 2012), 변화탐지(Lee et al., 2011) 등 여러 분야에서 활용되고 있는 라이다(LiDAR)는 고정된 위치에서 단일레이저와 반사 거울의 정밀 회전을 통해 영상과 레이저 정보를 동시에 획득하는 방식의 2D 레이저 스캐너뿐만 아니라 다중 레이저를 활용한 3D 레이저 스캐너 등(Kim et al., 2012) 실시간 탐지를 위한 여러 상용기술이 차용되고 있어 향후 연구자가 다루어야 하는 누적 자료의 수가 큰 폭으로 증가할 것으로 예상된다. 라이다로부터 얻어지는 점군은 센서의 종류나 촬영 범위에 따라 적게는 수백에서 많게는 수백만개에 달해 관측이 누적될 경우, 지점 조회 속도가 느릴 뿐만 아니라 불연속성을 가지는 각 지점의 특성으로 인한 잡음이 발생할 수 있어 자료를 다루는데 한계가 있다. 따라서 효율적인 점군 데이터 조회 방법과 더불어 타 관측 자료와의 연계를 위한 차원 감소 방법의 제시가 중요하다.
기존 연구에서는 점군 조회를 위한 방법으로 주로 트리 기반의 알고리듬을 활용하였는데(Shen et al., 2011; Vo et al., 2015) 그 종류로는 k개의 차원을 번갈아가며 데이터 중앙값을 찾아 분할하는 k차원-트리(kd-Tree), 차원별 데이터 범위 중심점을 기준으로 하위 8개 영역을 반복적으로 분할하는 옥트리(octree)(Fig. 1) 등이 있다. 특히, 옥트리는 임의의 연속형 자료를 구성하거나 검색할 때, 전체 데이터에 대한 정렬이 필요없고 검색 대상 지점 좌표와 노드에 대한 부분적인 계산만으로도 빠르게 데이터를 검색할 수 있는 장점(Meagher, 1980)이 있으며 최근까지도 트리 구성 및 구현 방법에 관한 연구가 활발히 이루어지고 있다. Han(2013)는 OpenMP를 활용하여 지정된 검색 영역의 범위를 일정 단위로 분할하여 단말노드(leaf node) 및 반경 내에서 각 지점을 병렬적으로 탐색하는 알고리듬을 제안하였으며 Elseberg et al.(2013)는 새로운 노드 구조 및 조회 방법 제안을 통해 10억개 이상의 라이다 데이터를 효율적으로 조회하고 시각화하는 방법을 제시했다.
Fig. 1. Octree in Morton code in a left-handed coordinate system.
옥트리의 등장 목적은 3차원 기하 정보의 효율적인 구조화에 있으나, 최근에는 이와 더불어 옥트리 구조적 특징과 연계해 새로운 탐색 및 구조화 방법을 제안하는 많은 연구가 수행되어왔다. 대표으로 Reveles et al.(2000)은 입력 좌표를 중심으로 방향벡터와 교차하는 노드 조회를 위해 옥트리 노드 경계면과 조회 조건을 활용하는 파라메트릭 알고리듬(Parametric Algorithm)을 제안하였으며 PCL(Point Cloud Library) 등의 라이브러리에서 활용되고 있다. 하지만 구현된 알고리듬은 SISD(Single Instruction Single Data) 방식으로 동작하는 CPU 기반 옥트리 만을 활용하여 연산 환경의 물리적 선택지가 다양해진 현시점에 최선이라 담보할 수 없으며 탐색된 3차원 데이터 분석을 위한 차원 축소 방법이 추가로 제시되어야 하는 필요성이 있다.
따라서 본 연구에서는 CPU와 GPU 상에 구현된 옥트리와 Revelles et al.(2000)의 파라메트릭 알고리듬을 활용하여 다중 위치에서 관측된 대용량 점군 조회 및 영상 투영 방법을 구현하고 연산 과정에서 구현 환경에 따른 성능 평가를 수행하였다. 특히, 옥트리와 파라메트릭 알고리듬의 노드 경계면 조회 방식을 활용하여 임의의 위치와 지정된 자세 정보에서 관측된 점군을 투영하는 과정에서 발생할 수 있는 잡음을 제거하였다. 1절에서는 본 연구의 배경과 목적에 대해 간략히 소개하였고, 2절에서는 CPU와 GPU 기반 옥트리의 차이점과 파라메트릭 알고리듬의 특성에 따른 문제점에 대해 검토한다. 3절에서는 파라메트릭 알고리듬 구현을 위한 옥트리 환경 구성 및 투영 방법을 제시하고, 4절에서는 실험에 사용된 자료와 실험 환경 및 결과에 대해 논의한다. 끝으로 5절에서 결론 및 향후 과제에 대해 서술함으로써 본 논문을 맺는다.
2. 이론적 배경
1) 파라메트릭 알고리듬
Revelles et al.(2000)이 제안한 파라메트릭 알고리듬은 입력된 원점과 방향벡터를 기준으로 뿌리 노드부터 교차되는 단말노드를 순차적으로 검색하기 위한 알고리듬이다. 입력된 원점에서 시작되는 방향벡터와 옥트리 내 노드 경계면 교차점이 존재한다고 가정할 때, 해당 노드 경계면 상의 교차점은 입력 원점, 방향벡터 및 방향계수가 이루는 함수로 표현 가능하며((1)의 xr, yr, zr), 입력 원점, 방향벡터 및 트리 최소, 최대 좌표점을 초기변수로 활용하여 계산된 방향계수((1)의 tx, ty, tz)를 이용해 트리 내에서 교차되는 최종 노드 존재 여부와 교차 면의 위치를 결정할 수 있다. 이러한 연산을 위한 노드 교차점 및 방향계수 연산식은 (1)과 같다.
(1)
여기에서 px, py, pz는 입력 원점 벡터 요소, dx, d
Table 1. Comparisons to obtain the first node intersected(Revelles et al., 2000)
Table 2. State transition (Revelles et al., 2000)
Table 3. Initial procedure of parametric algorithm
알고리듬의 순서는 입력 방향벡터의 부호에 따라 초기 진입 평면에 영향을 주는 비트(a)를 결정하고, 트리의 최대, 최소 좌표점과 입력 원점, 방향벡터에 따른 방향계수(mnx, mn, mnz, mxx, mxy, mxz)를 계산한다(Table 3의 2). 이 과정에서 입력 방향벡터에 음의 값이 포함되어 있을 경우, 노드 중심 값을 기준으로 원점의 위치와 방향벡터의 부호를 변환하고 영향 비트의 해당하는 축의 자리에 OR연산을 통해 비트 1을 추가한다. 트리 최소 좌표점을 활용한 최소 방향계수(mnx, mny, mnz) 중 최대값이 트리 최대 좌표점을 활용한 최대 방향계수mxx, mxy, mxz)의 최소값보다 작아야 노드 경계면에 방향벡터가 진입하는 교차점이 존재하므로 해당하는 값의 비교를 통해 하위 노드 검색 함수를 호출할 지 결정한다(Table 3의 3). Revelles et al.(2000)은 하위 노드 탐지 과정을 종료하기 위한 분기 조건 세 가지를 제시하는데, 첫 번째는 입력노드의 단말노드 여부(성공 시)(Table 4의 4), 두 번째는 최대 방향계수가 음의 값을 포함할 경우(실패시)(Table 4의 1), 마지막은 이웃 노드의 검색 결과 하위 노드 존재 여부(실패시)(Table 4의 10)이다. 입력노드가 단말노드일 경우, 노드에 포함되는 지점의 번호를 모두 반환하고(Table 4의 5). 최대 방향계수 중 하나가 음의 값을 가질 경우 방향벡터가 노드 경계면의 좌표 범위를 벗어난 것으로 판단하여 직전 깊이로 돌아간다(Table 4의 2). 하위 노드가 존재할 경우, Revelles et al.(2000)에서 제시하는 조건에 따라 다음 진입 경계를 결정하고 함수를 한번 더 호출해 하위 레벨로 진입하며, 반대의 경우에는 이웃 노드로 이동해 한번 더 분기 조건을 판단한다(Table 4의 20). 이산적인 점군의 특징을 고려했을 때, 이렇게 순차적으로 진행되는 노드 경계면 중심 조회 방식은 연속성을 가지는 정육면체 노드의 장점을 살릴 수 있어 이산적인 점군에 대해 연속성을 부여할 수 있다는 장점이 있다.
Table 4. Child node search in parametric algorithm
2) CPU 및 GPU 기반 PCL 옥트리
본 연구에 활용된 PCL은 Rusu and Cousins(2011)에 의해 제안된 점군 데이터 연산을 위한 공개 라이브러리(Open Source Library)로서 필터링(filtering), 분할(segmentation), 특징 추출(feature estimation), 표면 재구성(surface reconstruction) 등 3차원 점군 자료 처리에 CPU 및 GPU를 활용한다. PCL은 점군에 대한 조회 및 관리를 위한 CPU 및 GPU 기반의 옥트리 알고리듬을 각각 제공하는데, CPU 기반 옥트리와 GPU 기반 옥트리의 차이점은 다음과 같다.
CPU 기반 PCL 옥트리는 구성 노드 내에 하위 노드를 포함하는 재귀적 구조를 가지므로 트리를 구성하거나 조회하는 과정이 대부분 재귀적 구조로 이루어져 있다. 옥트리를 구성하는 과정은 입력된 옥트리 해상도(r)를 이용해 전체 데이터 범위에서좌표의 차원별 최대, 최소값을 찾고(Table 5의 1) 이를 이용해 각 지점의 키 벡터를 계산하고(Table 5의 6) 트리의 깊이을 증가시키며 가지노드(branch node)인지 단말노드인지에 따라 새로운 가지노드를 만들거나 지점의 번호를 단말노드의 저장소에 저장하는 순서이다. Table 5과 6는 CPU 기반 PCL 옥트리 구성 과정을 정리한 의사코드이며, 재귀 함수(Table 6) 내에 자식 노가 존재할 경우는 그렇지 않을 경우와 거의 유사하므로 생략하였다.
Table 5. Procedure of CPU-based PCL octree
Table 6. Recursive function for creation of leaf node
트리 구성 과정에서 트리의 최소 좌표값, 목표 지점 좌표와 해상도를 이용해 목표 지점의 키 벡터(k)와 옥트리 깊이(d)를 구하는데, 이를 표현한 식은 (2)와 같다.
여기에서 r은 옥트리 해상도, pmin, pmax는 점군 내에서 최소, 최대 좌표로 구성된 벡터, maxp는 벡터 내 최대값을 반환하는 함수를 의미한다.
Fig. 2. Expression of child node using octree key and Morton code
GPU 기반 PCL 옥트리는 CUDA 메모리의 구조적 차이(Nvidia, 2018)로 인해 고정된 옥트리 깊이 값(10)과 테이블 구조로 트리를 생성한다. 그리고 연산의 효율을 위해 각 지점별 키 벡터를 계산하여 개별 저장했던 CPU와는 달리, 깊이 별 x, y, z 축의 키 비트를 연속 비트 형태로 계산하는 모턴 코드(Morton, 1966)를 활용한다. 모턴 코드 혹은 Z-order curve는 이산적 격자 체계에 연속성을 부여하기 위한 한 방법으로 CPU 옥트리 키 값의 비트를 왼쪽부터 x, y, z 순서(Fig. 2)로 교차해 옥트리 최소값을 기준으로 Z 형태로 진행되는 연속 값을 얻을 수 있다. 이를 연산하기 위한 방법은 (3)과 같다.
(3)
여기에서 spread 함수는 계산된 키 벡터 요소 x, y, z 각 비트값을 3개 비트로 교차하는 OR 연산이다.
연산된 키 값을 기준으로 점군을 오름차순으로 정렬(Table 7의 3) 후, 전체 반복문 내에서 작업 수를 증가시켜가며 각 코어당 하나씩의 작업을 할당해 뿌리 노드로부터 하위 노드의 좌표 범위, 코드, 부모 노드를 추출하는 작업을 수행한다. Table 7은 GPU기반 PCL 옥트리를 구성하는 과정을 정리한 의사 코드로 SIMT(Single Instruction Multiple Thread) 방식으로 동작하는 GPU 기반 PCL 옥트리의 특성상 현재까지의 탐지된 노드 수, 새로운 노드 수, 현재 작업 번호, 종료 작업 번호(node_num, total_new, task_bag, task_end)를 각 스레드가 동시에 접근 가능한 공유변수로 가진다.
Table 7. Creation of GPU-based PCL octree using CUDA
Fig. 3. Data table for GPU-based PCL octree.
3. 방법론
1) GPU 기반 파라메트릭 알고리듬 구현
Table 8. Serialization process for CPU-based PCL octree
Fig. 4. GPU-based octree implemented by serialization.
Table 9. Search for child node in a GPU-based octree
2) 점군의 2차원 영상 투영
단말노드 중심 좌표를 연산하기 위해 앞서 직렬화를 통해 얻어진 각 단말노드의 키, 옥트리 깊이 및 점군 최소 벡터를 이용할 수 있으며, 이는 (4)와 같다.
여기에서 c는 중심좌표, keyxyz는 단말노드 키, do는 옥트리 깊이, dc 현재 깊이, pmin은 점군 내 최소 벡터를 의미한다.
입력된 원점과 노드 중심 좌표의 차를 부호가 결정지 않은 파라메트릭 알고리듬을 위한 방향벡터로 정의하고, 방향벡터에서 영상 좌표로의 변환을 위해 x축에 음의 부호를 적용한다.
\(d=\frac{O-c}{\|o-c\|}, d_{x}=-d_{x}\) (5)
여기에서 d는 방향벡터, o는 원점, c는 중심좌표, dx는 방향벡터의 x요소이다.
구해진 방향벡터를 사용자가 원하는 자세 정보로 전환하기 위해 지정된 임의의 3차원 회전 행렬 R을 적용해 최종 방향벡터를 연산한다.
여기에서 dr는 3차원 회전이 적용된 방향벡터, R는 3차원 회전 행렬이다.
이렇게 구해진 방향벡터 요소 x, y, z를 이용해 중심점 기준 Yaw와 Pitch를 구할 수 있으며 여기에서 Yaw는 단말노드가 속하는 영상면을 결정하는 기준으로 활용된다.
\(M_{i}(x, y)=1, d_{y}=-d_{y}, d_{z}=-d_{z} D_{i}(x, y)=d\) (10)
4. 실험 환경 및 결과
1) 사용자료 및 환경설정
Fig 5. LiDAR image gathered from 9 sites.
2) 구현 및 실험결과
Fig. 6. Elapsed time for octree algorithms in different environment.
Table 10. Elapsed time for different image sizes
Fig. 7. Selected points by regular projection (a) and by GPU-based octree (b).
Fig. 9. Regular projection (a), projection by GPU-based octree (b), and panorama image (c).
5. 결론
References
- Kim, J., K.-K. Kwon, and S.-I. Lee, 2012. Trends and applications on LiDAR sensor technology, Electronics and Telecommunications Trends, 27(6): 134-143.
- Lee, S., J. Lee, S. Han, J. Choi, and Y. Kim, 2011. Object-based building change detection from LiDAR data and digital map using adaptive overlay threshold, Journal of the Korean Society for Geospatial Information Science, 19(3): 49-56 (in Korean with English abstract).
- Han, D., K. Yu, and Y. Kim, 2012. Georegistration of airborne LiDAR data using a digital topographic map, Journal of the Korean Society of Surveying, Geodesy, Photogrammetry and Cartography, 30(3): 323-332 (in Korean with English abstract). https://doi.org/10.7848/ksgpc.2012.30.3.323
- Han, S., 2013. Multi-core-based parallel query of 3D point cloud indexed in octree, Journal of the Korean Society of Surveying, Geodesy, Photogrammetry and Cartography, 31(4): 301-310 (in Korean with English abstract). https://doi.org/10.7848/ksgpc.2013.31.4.301
- Elseberg, J., D. Borrmann, and A. Nuchter, 2013. One billion points in the cloud: An octree for efficient processing of 3D laser scans, ISPRS Journal of Photogrammetry and Remote Sensing, 76: 76-88. https://doi.org/10.1016/j.isprsjprs.2012.10.004
- Meagher, D. J. R., 1980. Octree encoding: A new technique for the representation, manipulation and display of arbitrary 3-D objects by computer, Electrical and Systems Engineering Department Rensseiaer Polytechnic Institute Image Processing Laboratory, Troy, NY, USA.
- Morton, G. M., 1966. A computer oriented geodetic data base and a new technique in file sequencing, International Business Machines Co., Ottawa, ON, Canada.
- Nvidia, 2018. CUDA C programming guide, https://docs.nvidia.com/cuda/cuda-c-programming-guide, Accessed on Sep. 6, 2018.
- PCL, 2018. PCL documentation, http://pointclouds.org/documentation, Accessed on Sep. 6, 2018.
- PCL, 2018. PCL Source codes, https://github.com/PointCloudLibrary/pcl, Accessed on Sep. 6, 2018.
- Revelles, J., C. Urena, and M. Lastra. 2000. An efficient parametric algorithm for octree traversal, Journal of WSCG, 8(2): 212-219.
- Rusu, R. B. and S. Cousins, 2011. 3D is here: Point Cloud Library (PCL), Proc. of 2011 IEEE International Conference on Robotics and automation, Shanghai, May 9-13, pp. 1-4.
- Shen, J., J. Liu, R. Zhao, and X. Lin, 2011. A kd-treebased outlier detection method for airborne LiDAR point clouds, Proc. of 2011 International Symposium on Image and Data Fusion, Tenchong, Yunen, Aug. 9-11, pp. 1-4.
- Vo, A. V., L. Truong-Hong, D. F. Laefer, and M. Bertolotto, 2015. Octree-based region growing for point cloud segmentation, ISPRS Journal of Photogrammetry and Remote Sensing, 104: 88-100. https://doi.org/10.1016/j.isprsjprs.2015.01.011
- Wolcott, R. W. and R. M. Eustice, 2014, Visual localization within lidar maps for automated urban driving, Proc. of 2014 IEEE International Conference on Intelligent Robots and Systems, Chicago, IL, Sep. 14-18, pp. 176-183.