Open3D

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

IT & Civil Oreh 2024. 8. 28. 12:55

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

 

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

(Open3D)#1 파이썬 Open3D 라이브러리 설치 및 간단 코드 실행 (tistory.com) (Open3D)#1 파이썬 Open3D 라이브러리 설치 및 간단 코드 실행파이썬에는 Open3D라는 라이브러리가 있다. Open3D는 '점구름' 이라고

ywlee3460.tistory.com

 

 

 

 

RANSAC 알고리즘 실습 내용은
1. 어떤 임의의 단면에서 3D 포인트 클라우드를 추출했다고 가정한다. (보통 건축/토목에서는 3D스캐너 활용)
2. 추출된 포인트 클라우드는 어떤 임의의 단면일 것이고, 오차로 인한 노이즈가 있을 것이다.
3. 단면의 수치 정보를 얻기 위한 과정으로, 포인트 클라우드에서 평면방정식을 도출하고, 최적의 평면데이터를 얻어낸다.
 
위 과정에서 도출된 평면 포인트 클라우드는 RANSAC 알고리즘의 inlier가 될 것이고,
오차로 인한 노이즈는 outlier가 되어 제거 될 것이다.
 
따라서 RANSAC 알고리즘을 3D 포인트 클라우드로 실습하기 위해서는 실습에 필요한 데이터가 필요하다.
 
그래서 실습 데이터를 임의로 만드는 과정을 거쳤다.
 
실습 데이터 제작 과정은 다음과 같다.
1. 임의의 단면처럼 표현하기 위한 포인트 클라우드를 생성한다. y = x -10 부터 y = x +10 까지의 x,y 값을 랜덤하게 생성하고 z값은 단면처럼 보이기위해 일정 범위에서 랜덤하게 생성해주었다(z값으로 두께를 표현). 단면을 위한 포인트 클라우드 점의 개수는 1000개로 생성하였다.
 
2. 노이즈 표현을 위한 포인트 클라우드를 생성한다. 노이즈 데이터는 위의 생성과정과 같지만 포인트 클라우드의 생성 범위를 더 크게 하여 점이 여기저기 튀어 노이즈처럼 보일 수 있도록 하였다. 똑같이 포인트 클라우드 점 개수는 1000개로 생성하였다.
 
3. 두 데이터를 결합한다. 결합된 데이터는 어떤 단면의 형상을 가지며, 단면을 표현한 부분은 점의 밀도가 높다. 그리고 주변에는 노이즈처럼 튄 점들이 존재한다. 그리고 결합된 데이터를 시각화하였다.
 

실제 단면을 스캔하여 얻은 포인트 클라우드는 노이즈가 이렇게 심하진 않다. 하지만 실습 목적이니 괜찮다.
그럼 이제 이렇게 만든 실습 데이터를 가지고 RANSAC 알고리즘에 적용한다. 3차원이기 때문에 임의의 점 3개를 선택하여
평면방정식과 평면 포인트 클라우드 데이터를 도출한다. 평면을 추출하고 노이즈를 제거하기 위해서 임계값은 작게 설정하였다.
 
RANSAC 알고리즘은 100회 반복 설정하였고, 1회부터 100회까지의 RANSAC 알고리즘의 과정을 확인할 수 있도록 하였다. 결과는 다음 사진과 같다.

각 실행마다 평면방정식 Ax +By + Cz + D = 0 의 계수와 inlier의 개수, 그리고 실행 결과 중 best inlier 결과 값을 확인할 수 있다. 

 
RANSAC 알고리즘을 통해 최종적으로 도출한 결과값이다.
이런식으로 최적의 모델을 얻을 수 있는 것이다. 도출된 본 결과의 포인트 클라우드 데이터를 확인해보면 다음과 같다.
 

inlier 데이터를 빨간색으로 표시하여 잘 보일 수 있도록하였다. 빨간색으로 표시된 점들이 RANSAC 알고리즘으로 도출한 모델이다. 옆에서 보면 직선형태로, 한 평면에 존재할 수 있도록 결과값이 나름 잘 나온것 같다. 여기서 평면 데이터만 추출하면 다음과 같다.
 

실습을 위한 임의의 단면을 제작하는 과정에서 데이터의 퀄리티가 부족했던 탓에, 원하는 단면만을 추출하는데에는 결과값이 많이 아쉽지만 그래도 평면방정식과 평면의 포인트 클라우드 데이터를 추출할 수 있다는 것에 만족한다.
데이터 퀄리티가 좋으면 그만큼 더 좋고 원하는 결과값이 나올듯하다.

 

 

 

 

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

 

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

지난 글에서 파이썬 RANSAC 알고리즘에 대해 가상의 데이터를 직접 만들어 실습하는 과정을 거쳤다. 이번에는 실제 공사현장에서 취득한 포인트클라우드 데이터를 가지고 RANSAC 알고리즘에 적용

ywlee3460.tistory.com