[open3D] RGBD images

About_work·2024년 9월 15일
0

SLAM

목록 보기
9/12

1. docs

  • Open3D는 이미지 처리를 위한 데이터 구조를 가지고 있으며, 이를 활용해 이미지 읽기, 쓰기, 필터링 및 시각화를 수행할 수 있습니다.

  • Open3D 이미지(Image)는 바로 numpy 배열로 변환할 수 있습니다.

  • RGBDImage는 두 개의 이미지로 구성됩니다: RGBDImage.depthRGBDImage.color.

  • 이 두 이미지는 동일한 카메라 프레임에 정합되어 있고 같은 해상도를 가져야 합니다.

  • 아래 튜토리얼에서는 유명한 RGB-D 데이터셋에서 이미지를 읽고 사용하는 방법을 보여줍니다.

Redwood 데이터셋

  • 이 섹션에서는 Redwood 데이터셋에서 RGBDImage를 읽고 시각화하는 방법을 설명합니다 [Choi2015].

  • Redwood 포맷은 16비트 단일 채널 이미지로 깊이 정보를 저장

    • 이 정수 값은 깊이 측정값을 밀리미터 단위로 나타냅니다.
    • 2의 16승이 65536 이니까 -> 63.536 m 를 커버 가능
  • 이것이 Open3D에서 깊이 이미지를 파싱하는 기본 포맷입니다.

print("Read Redwood dataset")
redwood_rgbd = o3d.data.SampleRedwoodRGBDImages()
color_raw = o3d.io.read_image(redwood_rgbd.color_paths[0])
depth_raw = o3d.io.read_image(redwood_rgbd.depth_paths[0])
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
    color_raw, depth_raw)
print(rgbd_image)

출력 결과:

Read Redwood dataset
RGBDImage of size
Color image : 640x480, with 1 channels.
Depth image : 640x480, with 1 channels.
Use numpy.asarray to access buffer data.
  • 기본 변환 함수 create_rgbd_image_from_color_and_depth는 컬러 이미지와 깊이 이미지 쌍으로부터 RGBDImage를 생성합니다.

  • 컬러 이미지는 그레이스케일 이미지로 변환되어 [0, 1] 범위의 실수값으로 저장됩니다.

  • 깊이 이미지는 실수값으로 저장되며, 미터 단위로 깊이 값을 나타냅니다.

  • 변환된 이미지는 numpy 배열로 렌더링할 수 있습니다.

plt.subplot(1, 2, 1)
plt.title('Redwood grayscale image')
plt.imshow(rgbd_image.color)
plt.subplot(1, 2, 2)
plt.title('Redwood depth image')
plt.imshow(rgbd_image.depth)
plt.show()

포인트 클라우드 변환

  • RGBDImage는 특정 카메라 파라미터를 사용하여 포인트 클라우드로 변환할 수 있습니다.
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
    rgbd_image,
    o3d.camera.PinholeCameraIntrinsic(
        o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))
# 포인트 클라우드가 거꾸로 보이지 않도록 뒤집기
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw_geometries([pcd])
  • 여기서는 기본 카메라 파라미터로 PinholeCameraIntrinsicParameters.PrimeSenseDefault를 사용했습니다.
  • 이 파라미터는 640x480의 이미지 해상도, (fx, fy) = (525.0, 525.0)의 초점 거리, (cx, cy) = (319.5, 239.5)의 광학 중심을 가지고 있습니다.
  • 기본 외부 파라미터로는 단위 행렬을 사용합니다.
  • pcd.transform은 포인트 클라우드의 시각화를 위해 상하 반전 변환을 적용합니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글