이 글은 파이썬 기반 포인트 클라우드 특징 계산 방법을 소개한다. 점군은 포인트 간의 관계를 통해, 수직도, 수평도, 법선, 곡률 등 다양한 특징을 수학적으로 계산할 수 있다. 직접 코딩해도 되지만, 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 항목을 변경해 보면, 앞서 언급된 점군 특징이 모두 계산되어 있는 것을 확인할 수 있다.
레퍼런스

댓글 없음:
댓글 쓰기