1. open3d에서 지원하는 포인트 클라우드 파일 포맷
https://www.open3d.org/docs/release/tutorial/geometry/file_io.html
크게는 이진파일(Binary)과 아스키파일(ASCII) 포맷으로 나누어짐
위표는 open3d에서 지원하는 파일 포맷을 나타낸다. format은 포인트 클라우드 파일의 확장자를 의미함
대표적인 포맷인 pcd, ply 포맷을 자세히 살펴본다
(1) pcd 포맷
Point cloud data 포맷으로 open3d가 나오기전에 많이 쓰던 PCL 라이브러리에서 사용되는 포맷
Header와 Data 세션으로 나누어 짐,
Header : 전체 포인트 수, 데이터 타입, 크기 등의 정보
Data : x,y,z 또는 x,y,z + 추가정보
ASCII 또는 Binary 형식
(2) ply 포맷
PLY 는 Polygon File Format 또는 Stanford Triangle Format 으로 알려진 컴퓨터 파일 형식
주로 3D 스캐너의 3차원 데이터를 저장하도록 설계됨
데이터 저장 형식은 평평한 다각형(polygon) 목록으로 단일 객체에 대한 비교적 간단한 설명을 지원
색상 및 투명도, 표면 법선, 텍스처 좌표 및 데이터 신뢰도 값을 포함한 다양한 속성을 저장할 수 있음
파일 형식에는 ASCII와 바이너리 두 가지 버전이 있음
2. pcd 파일 생성방법
(1) 먼저 open3d가 제공하는 포인트 클라우드 데이터를 pcd파일로 저장하는 방법
https://www.open3d.org/docs/release/tutorial/geometry/file_io.html
<ex1.py>
import open3d as o3d
print("Testing IO for point cloud ...")
sample_pcd_data = o3d.data.PCDPointCloud()
pcd = o3d.io.read_point_cloud(sample_pcd_data.path)
print(pcd)
o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)
<실행결과>
작업디렉토리에 pcd파일이 생성됨
o3d.data.PCDPointCloud -> PCD 포맷의 포인트 클라우드 파일을 저장하고 있는 클래스
o3d.io.read_point_cloud -> 포인트 클라우드 파일을 읽어주는 함수
o3d.io.write_point_cloud -> open3d 텐서를 포인트 클라우드 파일로 저장하는 함수
(2) 방금 저장한 pcd파일을 다시 읽어서 출력(시각화)하는 방법
https://www.open3d.org/docs/release/tutorial/visualization/visualization.html
<ex2.py>
import open3d as o3d
print("Testing IO for point cloud ...")
pcd = o3d.io.read_point_cloud("copy_of_fragment.pcd")
print(pcd)
o3d.visualization.draw_geometries([pcd],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024])
<실행결과>
이전 예제 ex1.py에서 저장한 pcd파일을 읽어서 화면에 출력해줌
o3d.visualization.draw_geometries -> 포인트 클라우드 객체를 화면에 출력하는 함수
마우스 왼쪽버튼 클릭 후 드래깅하여 뷰포인트를 조정해볼 것
마우스 휠을 조정하면 확대,축소 가능
3. ply파일 생성 방법
(1) 먼저 open3d가 제공하는 포인트 클라우드 데이터를 ply파일로 저장하는 방법
https://www.open3d.org/docs/release/tutorial/geometry/file_io.html
< ex3.py>
import open3d as o3d
print("Testing IO for point cloud ...")
sample_ply_data = o3d.data.PLYPointCloud()
ply = o3d.io.read_point_cloud(sample_ply_data.path)
print(ply)
o3d.io.write_point_cloud("copy_of_fragment.ply", ply)
<실행결과>
작업디렉토리에 ply파일이 생성됨
o3d.data.PLYPointCloud -> PLY 포맷의 포인트 클라우드 파일을 저장하고 있는 클래스
o3d.io.read_point_cloud -> 포인트 클라우드 파일을 읽어주는 함수
o3d.io.write_point_cloud -> open3d 텐서를 포인트 클라우드 파일로 저장하는 함수
(2) ex3.py에서 저장한 ply파일을 다시 읽어서 출력(시각화)하는 방법
https://www.open3d.org/docs/release/tutorial/visualization/visualization.html
<ex4.py>
import open3d as o3d
print("Testing IO for point cloud ...")
ply = o3d.io.read_point_cloud("copy_of_fragment.ply")
print(ply)
o3d.visualization.draw_geometries([ply],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024])
<실행결과>
4. 과제
(1) pcd,ply 외에 포인트 클라우드 파일 포맷을 조사하시오.
(2) 인터넷에서 pcd 포맷의 파일을 다운받아 화면에 출력해보시오.
(3) 인터넷에서 ply 포맷의 파일을 다운받아 화면에 출력해보시오.