Open3D

(Open3D)#4 포인트 클라우드로 직사각형 단면 수치 정보 확인하기 - RANSAC 알고리즘 적용

IT & Civil Oreh 2024. 8. 29. 21:57

(Open3D)#3 포인트 클라우드로 직사각형 단면 수치 정보 확인하기 - RANSAC 알고리즘 실습 (tistory.com)

 

(Open3D)#3 포인트 클라우드로 직사각형 단면 수치 정보 확인하기 - RANSAC 알고리즘 실습

RANSAC 알고리즘 실습 내용은1. 어떤 임의의 단면에서 3D 포인트 클라우드를 추출했다고 가정한다. (보통 건축/토목에서는 3D스캐너 활용)2. 추출된 포인트 클라우드는 어떤 임의의 단면일 것이고,

ywlee3460.tistory.com

 

 

 

지난 글에서 파이썬 RANSAC 알고리즘에 대해 가상의 데이터를 직접 만들어 실습하는 과정을 거쳤다.

 

이번에는 실제 공사현장에서 취득한 포인트클라우드 데이터를 가지고 RANSAC 알고리즘에 적용해보겠다.

 

사용한 데이터는 지하철 공사 현장에서 스캐너를 통해 직접 취득하였다.

 

데이터의 용량이 큰 관계로, 데이터의 일부를 잘라서 사용하였다.

 

이번 목표는 지하철 공사현장의 포인트 클라우드 데이터에서 노이즈를 제거하고 바닥면의 포인트클라우드를

RANSAC 알고리즘으로 도출하는 것이다.

 

먼저, RANSAC 알고리즘을 적용하기전에 원본 포인트 클라우드 데이터를 불러온다.

 

 

실제 공사현장에서 취득한 데이터의 일부이다. 공사현장에 바닥면에 있는 철근도 스캔되었다.

그리고 보다시피 노이즈가 존재한다.

 

이 데이터를 가지고 RANSAC 알고리즘을 적용하여 바닥면만을 분리해보겠다.

RANSAC 알고리즘 적용 방식은 저번 글에서 실습했던 방식과 같지만, 색상과 포인트의 크기를 지정하는 부분에서 조금 달랐다. 

 

반복횟수를 높이면 정밀도가 좋아지겠지만, 그냥 반복횟수는 100회로 설정하였다.

중요한것은 임계값을 설정하는 것인데, 임계값을 크게하면 많은 노이즈가 포함될것이고, 그렇다고 너무 작게하면

원하는 이상적인 결과가 나오지 않을 것이다. 나는 0.01로 설정하였고, 평면을 얻기 위해 임의의 점 3개를 선택하여

알고리즘에 적용하였다. (실제 퀄리티 좋은 결과를 얻으려면 임계값을 계속 바꿔가면서 확인하면 좋을듯함.)

 

 

저번 실습때와 같이 이런 식으로 평면방정식의 Ax + By + Cz + D = 0 의 계수와 inlier 의 개수,

그리고 각 반복횟수에 따른 결과들을 그래프로 확인할 수 있다.

 

그리고 outlier(노이즈)와 inlier(평면)으로 분리된 데이터를 확인해보겠다.

 

위 사진들과 같이 잘 분리가 되었음을 확인할 수 있다. 

outlier는 초록색, inlier는 빨간색으로 지정해주었다. 사실 색상분리와 포인트 크기를 지정하는 과정에서 조금 어려웠지만 그래도 할 수 있었다.

 

팁이 있다면, RANSAC 알고리즘을 적용하고 outlier와 inlier의 포인트 클라우드를 도출하고나서 포인트 크기와 색 지정을 해주는 프로세스는 다음과 같다. ( 포인트 클라우드 크기가 크면 용량도 커지고 안예쁘게 시각화되고, 색 지정을 각각 해주지 않으면 어떤 데이터가 outlier인지 inlier인지 알 수 없음)

 

1. 시각화 객체 생성
2. 시각화 창 생성
3. 시각화 옵션 불러오기
4. 점 크기 설정
5. 배경 색상 설정
6. 점 색상 설정
7. 생성한 포인트클라우드 객체를 시각화 창에 추가
8. 데이터 시각화

 

이 순서대로 하면 오류없이 잘 코딩된다.

 

물론 어차피 inlier 데이터가 중요하기 때문에 inlier 포인트만을 추출해서 시각화도 가능하다.

 

노이즈 없이 결과가 나름 잘 나온듯 하다. 위 사진에서 구멍이 난 것처럼 보이는 부분은 아마 지면 상태가 불안정하거나, 주변 구조물에 의해 잘 스캔되지 않았거나, 노이즈가 제거된 부분일 것이다. 

 

이렇게 RANSAC 알고리즘을 사용하여 실제 공사현장의 포인트클라우드 데이터를 분석해보았고, 이제 마지막으로는 단면의 수치정보를 확인해볼것이다. 

 

 

 

 

(Open3D)#5 포인트 클라우드로 직사각형 단면 수치 정보 확인하기 - Convex Hull 알고리즘 개념 (tistory.com)

 

(Open3D)#5 포인트 클라우드로 직사각형 단면 수치 정보 확인하기 - Convex Hull 알고리즘 개념

지난 글에서 RANSAC 알고리즘을 통해 실제 공사현장의 포인트 클라우드에서 바닥 평면의 포인트클라우드 데이터를 뽑아냈다. 최적의 평면 데이터, 즉 최적의 plane에서 이제 수치 정보(가로,세로)

ywlee3460.tistory.com