포인트클라우드는 자율주행, 디지털 트윈, 스마트시티 등에서 중요한 3D 데이터입니다. 특히 도로 주행 환경을 스캔한 포인트클라우드를 딥러닝에 활용하려면, 도로면을 평면으로 정렬하거나 2D 이미지처럼 표현하는 전처리 과정이 필요합니다.
이글에서는 도로와 같은 경사 있고 굴곡진 포인트클라우드를 projection 하기 위한 4가지 대표적인 방법 중 첫 번째 방법을 소개합니다.
1. RANSAC기반 평면추정
RANSAC(Random Sample Consensus)은 노이즈나 이상치가 많은 데이터에서도 강건하게 평면을 추정할 수 잇는 고전적 기법입니다. 도로면이 전체 포인트 클라우드에서 가장 넓은 평면일 것이라는 가정 하에 사용됩니다.
핵심 아이디어
1. 임의로 최소 샘플 수 만큼 점을 선택(예: 평면 -> 3점)
2. 이 샘플로부터 모델을 생성(평면방정식 추정)
3. 전체 데이터 중 이 모델에 부합하는 점들(inliers) 찾기
4. 부합하는 점들(inlier)의 개수가 가장 많은 모델을 최종 선택
즉, 이상치에 방해받지 않고 "가장 잘 설명되는 평면"을 찾는 방식입니다.
3D 공간에서 평면은
\(ax+by+cz+d = 0\)
- (a,b,c)는 평면의 법 선벡터
- d는 평면의 절편
- 특정 점\((x_i, y_i, z_i)\)이 평면에서의 거리가 작을수록, 이 점은 inlier일 가능성이 높음
import open3d as o3d
# 1. 포인트클라우드 불러오기
pcd = o3d.io.read_point_cloud("road_scene.pcd")
# 2. RANSAC을 이용한 평면 추정
plane_model, inliers = pcd.segment_plane(distance_threshold=0.1,
ransac_n=3,
num_iterations=1000)
[a, b, c, d] = plane_model
print(f"Plane equation: {a:.3f}x + {b:.3f}y + {c:.3f}z + {d:.3f} = 0")
# 3. 결과 시각화
inlier_cloud = pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([1.0, 0, 0]) # 빨간색으로 표시
outlier_cloud = pcd.select_by_index(inliers, invert=True)
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])
#
파라미터 - 설명
distance_threshold - 모델에 포함될 수 있는 점의 거리 허용치(클수록 부정확, 작을수록 민감)
ransac_n - 모델 추정에 필요한 최소 점 개수(평면은 3점)
num_iterations - 반복 횟수(높을수록 정확하나 계산량 증가)
결과 해석
- inlier_cloud : 도로로 추정된 평면 영역
- outlier_cloud : 나무, 사람, 차량 등의 기타 객체
- 추정된 법선 벡터를 사용하여 point cloud 전체를 z-축정렬(평면 projection) 할 수 있음
RANSAC의 한계
- 도로가 완전히 평평하지 않은 경우 (예: 언덕, 굴곡, 경사 등) 정확한 평면 추정 어려움
- 복수의 평면이 존재할 경우 (예: 인도, 차선, 도로 경계 등) 가장 넓은 평면 하나만 추정
- 초기 파라미터 설정이 중요(Threshold 조절이 핵심)
활용팁
- RANSAC으로 추출한 inlier는 이후 height map, BEV 변환등에 사용할 수 있음
- 하나의 평면만으로 부족할 경우, 계층적 RANSAC 또는 Sliding Window 방식으로 로컬 평면 추정 가능
- 필요시 평면 정렬 후, 전체 포인트를 회전하여 z 축 기준으로 정렬하는 과정도 포함 가능
'On Going > Point Cloud Data' 카테고리의 다른 글
[pcd] 도로 포인트클라우드를 평면으로 정렬하는 4가지 방법: 딥러닝 전처리를 위한 접근(3. DTM기반 CSF) (0) | 2025.04.14 |
---|---|
[pcd] 도로 포인트클라우드를 평면으로 정렬하는 4가지 방법: 딥러닝 전처리를 위한 접근(2. Moving Least Squares) (0) | 2025.04.14 |
[PCD]Frontal view Lane Detection K-lane 논문 리뷰 (0) | 2025.03.17 |
[PCD] Point Transformer V3(PTv3) 논문리뷰 (0) | 2025.03.17 |
[PCD] start (0) | 2025.03.12 |
댓글