2023년 7월 11일 화요일

파이썬 기반 포인트 클라우드 특징 계산 방법 소개

이 글은 파이썬 기반 포인트 클라우드 특징 계산 방법을 소개한다. 점군은 포인트 간의 관계를 통해, 수직도, 수평도, 법선, 곡률 등 다양한 특징을 수학적으로 계산할 수 있다. 직접 코딩해도 되지만, jakteristics 라이브러리를 이용하면, 쉽게 이 값들을 얻을 수 있다. 이 라이브러리는 다음과 같은 point cloud data 특징을 계산해 준다.
  • Eigenvalue sum
  • Omnivariance
  • Eigenentropy
  • Anisotropy
  • Planarity
  • Linearity
  • PCA1
  • PCA2
  • Surface Variation
  • Sphericity
  • Verticality
  • Nx, Ny, Nz (The normal vector)

점군 특징 중 하나인 법선벡터

설치 
설치 및 테스트는 다음과 같다.
 
    python -m pip install -r requirements-dev.txt
    python setup.py pytest

사용방법
사용법은 다음과 같다. 
jakteristics input/las/file.las output/file.las --search-radius 0.15 --num-threads 4

코딩방법
파이썬을 이용해, 다음과 같이 얻고자 하는 특징을 옵션으로 설정한 후, 함수를 호출해 주면 된다. 
from jakteristics import FEATURE_NAMES, extension, las_utils, utils
def compute_features(input_path, output_path):
'''
FEATURE_NAMES = [
"eigenvalue_sum",
"omnivariance",
"eigenentropy",
"anisotropy",
"planarity",
"linearity",
"PCA1",
"PCA2",
"surface_variation",
"sphericity",
"verticality",
"nx",
"ny",
"nz",
"number_of_neighbors",
"eigenvalue1",
"eigenvalue2",
"eigenvalue3",
"eigenvector1x",
"eigenvector1y",
"eigenvector1z",
"eigenvector2x",
"eigenvector2y",
"eigenvector2z",
"eigenvector3x",
"eigenvector3y",
"eigenvector3z",
]
'''
xyz = las_utils.read_las_xyz(input_path)
features = extension.compute_features(xyz, 0.1, feature_names=FEATURE_NAMES)
print(features)
las_utils.write_with_extra_dims(input_path, output_path, features, FEATURE_NAMES)

이 함수를 이용해, las 파일을 이용해 특징을 계산해 본다. 다음과 같이 호출하면 된다. 
compute_features('input.las', 'output.las') 

클라우드 컴페어를 통해 확인한 결과는 다음과 같다.
출력파일 수직도 확인 결과(청색 - 적색 스키마)

해당 도구에서 scalar 항목을 변경해 보면, 앞서 언급된 점군 특징이 모두 계산되어 있는 것을 확인할 수 있다.

레퍼런스

댓글 없음:

댓글 쓰기