RealSense D435i로 3D 스캐너 설치
Depth 카메라로 3D 스캐너와 유사한 설치(Open 3D 검색 겸)
지난 리얼센스 D435i로 계속 놀아요.
개요
컨디션
참고 자료
http://www.open3d.org/docs/release/
https://qiita.com/tishihara/items/90ce0f0f722deddea34a
https://stackoverflow.com/questions/56965268/how-do-i-convert-a-3d-point-cloud-ply-into-a-mesh-with-faces-and-vertices
절차.
import pyrealsense2 as rs
import numpy as np
import open3d as o3d
align 대상을 사용하여 시각을 정렬합니다.SDK는 이런 방법이 있어서 매우 편리하다.
# ストリーム(Depth/Color)の設定
config = rs.config()
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
# ストリーミング開始
pipeline = rs.pipeline()
profile = pipeline.start(config)
# Alignオブジェクト生成
align_to = rs.stream.color
align = rs.align(align_to)
create_from_color_and_depth
입니다.try:
while True:
# フレーム待ち(Color & Depth)
frames = pipeline.wait_for_frames()
aligned_frames = align.process(frames)
color_frame = aligned_frames.get_color_frame()
depth_frame = aligned_frames.get_depth_frame()
if not depth_frame or not color_frame:
continue
color_image = o3d.geometry.Image(np.asanyarray(color_frame.get_data()))
depth_image = o3d.geometry.Image(np.asanyarray(depth_frame.get_data()))
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(color_image, depth_image);
RGBD 이미지
PointCloud.create_from_rgbd_image
가 있으면 Point Cloud를 한 번에 만들 수 있습니다. pcd = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image,
o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))
※ 지정PrimeSenseDefault
했지만 원래 이곳은 리얼센스 D435i로 카메라 교정을 하고 내부 파라미터를 계산한 토대에서 내부 파라미터(instric)의 행렬을 제공해야 한다고 생각합니다.이번에는 교정이 불가능해 이 같은 내용을 잠정 설정했다. # 回転する
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
# 法線計算
pcd.estimate_normals()
# 指定したvoxelサイズでダウンサンプリング
voxel_down_pcd = pcd.voxel_down_sample(voxel_size=0.01)
문서를 볼 때
create_from_point_cloud_ball_pivoting
방법이 있기 때문에 이 방법을 사용하면 PCD에서 격자 데이터를 생성할 수 있다.일부는 그물 모양을 붙이지 않는 것이 반경 설정의 문제입니까?
알고리즘은 여기에 기록되어 있다.
https://ieeexplore.ieee.org/document/817351
distances = voxel_down_pcd.compute_nearest_neighbor_distance()
avg_dist = np.mean(distances)
radius = 1.5 * avg_dist
# メッシュ化
radii = [radius, radius * 2]
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(voxel_down_pcd, o3d.utility.DoubleVector(radii))
# 再度法線計算
mesh.compute_vertex_normals()
# 一応データ保存
o3d.io.write_triangle_mesh("output.ply", mesh)
# メッシュデータの表示
o3d.visualization.draw_geometries([mesh])
finally:
# ストリーミング停止
pipeline.stop()
잘한 건 이거야.끝맺다
오픈 3D와 리얼센스SDK 탐색을 결합해 3D 스캐너 같은 것을 만들어 봤다.
각 방향에서 점 그룹 데이터를 생성하고 Merge 이후에 이 처리를 실행하면 제대로 된 3D 데이터를 생성할 수 있습니다.
그럼
Reference
이 문제에 관하여(RealSense D435i로 3D 스캐너 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tishihara/items/f14c6b5db98d44f4d4ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)