Python: 포인트 클라우드를 만들고 시각화하는 방법
1. 소개
포인트 클라우드 애플리케이션은 로봇, 자율주행차, 보조 시스템, 의료 등 어디에나 있습니다. 포인트 클라우드는 특히 물체의 거리, 모양, 크기와 같이 장면/객체의 기하학적 구조가 필요할 때 실제 데이터를 처리하는 데 적합한 3D 표현입니다.
포인트 클라우드는 현실 세계의 장면이나 공간의 객체를 나타내는 점 집합입니다. 기하학적 객체와 장면을 개별적으로 표현한 것입니다. 즉, 포인트 클라우드 PCD는 n 포인트의 집합이며, 여기서 각 포인트 Pi는 3D 좌표로 표시됩니다.
포인트 클라우드를 설명하기 위해 RGB와 같은 다른 기능을 추가할 수도 있습니다. 색상, 메소드 라인 등 예를 들어 RGB 색상을 추가하여 색상 정보를 제공할 수 있습니다.
2. 포인트 클라우드 생성
포인트 클라우드는 일반적으로 3D 스캐너(레이저 스캐너, 비행 시간 스캐너 및 구조광 스캐너) 또는 CAD(컴퓨터 지원 설계) 모델을 사용하여 생성됩니다. 이 튜토리얼에서는 먼저 임의의 포인트 클라우드를 생성하고 시각화합니다. 그런 다음 Open3D 라이브러리를 사용하여 3D 표면의 점을 샘플링하여 3D 모델에서 생성합니다. 마지막으로 RGB-D 데이터에서 이를 생성하는 방법을 살펴보겠습니다.
Python 라이브러리를 가져오는 것부터 시작하겠습니다.
import numpy as np import matplotlib.pyplot as plt import open3d as o3d
2.1 임의의 점 구름
가장 쉬운 방법은 임의의 점 구름을 만드는 것입니다. 일반적으로 GAN(Generative Adversarial Network)에 대한 노이즈를 생성할 때를 제외하고는 처리할 무작위 포인트를 생성하지 않습니다.
일반적으로 포인트 클라우드는 (n×3) 배열로 표현됩니다. 여기서 n은 포인트 수입니다. 5개의 무작위 포인트로 포인트 클라우드를 만들어 보겠습니다.
number_points = 5 pcd = np.random.rand(number_points, 3)# uniform distribution over [0, 1) print(pcd)
포인트를 직접 인쇄할 수 있지만 이는 그다지 효율적이지 않습니다. 특히 포인트 수가 많은 경우 대부분의 응용 프로그램에서는 더욱 그렇습니다. 더 나은 접근 방식은 3D 공간에 표시하는 것입니다. Matplotlib 라이브러리를 사용하여 시각화해 보겠습니다.
# Create Figure: fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.scatter3D(pcd[:, 0], pcd[:, 1], pcd[:, 2]) # label the axes ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") ax.set_title("Random Point Cloud") # display: plt.show()
Random Point Cloud Visualization
2.2 Sampling Point Clouds
3D 모델을 직접 처리하려면 시간이 걸립니다. 따라서 3차원 표면에서 포인트 클라우드를 샘플링하는 것이 잠재적인 솔루션입니다. Open3D 데이터세트에서 토끼 모델을 가져오는 것부터 시작해 보겠습니다.
bunny = o3d.data.BunnyMesh() mesh = o3d.io.read_triangle_mesh(bunny.path)
또는 다음과 같이 가져옵니다.
mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
다음으로 3D 모델을 표시하여 어떻게 보이는지 확인합니다. 마우스를 움직여 다양한 관점에서 볼 수 있습니다.
# Visualize: mesh.compute_vertex_normals() # compute normals for vertices or faces o3d.visualization.draw_geometries([mesh])
Rabbit 3D Model
포인트 클라우드를 샘플링하는 방법에는 여러 가지가 있습니다. 이 예에서는 가져온 메쉬에서 1000개의 점을 균일하게 샘플링하고 시각화합니다.
# Sample 1000 points: pcd = mesh.sample_points_uniformly(number_of_points=1000) # visualize: o3d.visualization.draw_geometries([pcd])
Rabbit Point Cloud
생성된 포인트 클라우드를 다음과 같이 .ply 형식으로 저장할 수 있습니다. 표시:
# Save into ply file: o3d.io.write_point_cloud("output/bunny_pcd.ply", pcd)
2.3 점 RGB-D 데이터의 클라우드
RGB-D 데이터는 RGB 이미지와 깊이 이미지를 모두 제공하는 RGB-D 센서(예: Microsoft Kinect)를 사용하여 수집됩니다. RGB-D 센서는 실내 탐색, 장애물 회피 및 기타 분야에서 널리 사용됩니다. RGB 이미지는 픽셀 색상을 제공하므로 깊이 이미지의 각 픽셀은 카메라로부터의 거리를 나타냅니다.
Open3D는 RGB-D 이미지 처리를 위한 일련의 기능을 제공합니다. Open3D 기능을 사용하여 RGB-D 데이터에서 포인트 클라우드를 생성하려면 두 개의 이미지를 가져오고 RGB-D 이미지 객체를 생성한 후 마지막으로 다음과 같이 포인트 클라우드를 계산하면 됩니다.
# read the color and the depth image: color_raw = o3d.io.read_image("../data/rgb.jpg") depth_raw = o3d.io.read_image("../data/depth.png") # create an rgbd image object: rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth( color_raw, depth_raw, convert_rgb_to_intensity=False) # use the rgbd image to create point cloud: pcd = o3d.geometry.PointCloud.create_from_rgbd_image( rgbd_image, o3d.camera.PinholeCameraIntrinsic( o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)) # visualize: o3d.visualization.draw_geometries([pcd])
색상 생성 RGB-D image 포인트 클라우드
3, Open3D 및 NumPy
때때로 Open3D와 NumPy 간에 전환해야 할 때가 있습니다. 예를 들어 시각화를 위해 NumPy 포인트 클라우드를 Open3D.PointCloud 개체로 변환하고 Matplotlib를 사용하여 토끼의 3D 모델을 시각화한다고 가정해 보겠습니다.
3.1 NumPy에서 Open3D로
이 예에서는 [0,1]의 균일 분포에서 무작위 샘플을 생성하는 NumPy.random.rand() 함수를 사용하여 2000개의 무작위 점을 생성합니다. 그런 다음 Open3D.PointCloud 객체를 생성하고 Open3D.utility.Vector3dVector() 함수를 사용하여 Open3D.PointCloud.points 기능을 임의의 점으로 설정합니다.
# Create numpy pointcloud: number_points = 2000 pcd_np = np.random.rand(number_points, 3) # Convert to Open3D.PointCLoud: pcd_o3d = o3d.geometry.PointCloud()# create point cloud object pcd_o3d.points = o3d.utility.Vector3dVector(pcd_np)# set pcd_np as the point cloud points # Visualize: o3d.visualization.draw_geometries([pcd_o3d])
임의 포인트 클라우드의 Open3D 시각화
3.2 从 Open3D到NumPy
这里,我们首先使用Open3D.io.read_point_cloud()函数从.ply文件中读取点云,该函数返回一个Open3D.PointCloud对象。现在我们只需要使用NumPy.asarray()函数将表示点的Open3D.PointCloud.points特征转换为NumPy数组。最后,我们像上面那样显示获得的数组。
# Read the bunny point cloud file: pcd_o3d = o3d.io.read_point_cloud("../data/bunny_pcd.ply") # Convert the open3d object to numpy: pcd_np = np.asarray(pcd_o3d.points) # Display using matplotlib: fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.scatter3D(pcd_np[:, 0], pcd_np[:, 2], pcd_np[:, 1]) # label the axes ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") ax.set_title("Bunny Point Cloud") # display: plt.show()
使用 Matplotlib 显示的兔子点云
4、最后
在本教程中,我们学习了如何创建和可视化点云。在接下来的教程中,我们将学习如何处理它们。
위 내용은 Python: 포인트 클라우드를 만들고 시각화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









C 언어에는 내장 합계 기능이 없으므로 직접 작성해야합니다. 합계는 배열 및 축적 요소를 가로 질러 달성 할 수 있습니다. 루프 버전 : 루프 및 배열 길이를 사용하여 계산됩니다. 포인터 버전 : 포인터를 사용하여 배열 요소를 가리키며 효율적인 합계는 자체 증가 포인터를 통해 달성됩니다. 동적으로 배열 버전을 할당 : 배열을 동적으로 할당하고 메모리를 직접 관리하여 메모리 누출을 방지하기 위해 할당 된 메모리가 해제되도록합니다.

구별되고 구별되는 것은 구별과 관련이 있지만, 다르게 사용됩니다. 뚜렷한 (형용사)는 사물 자체의 독창성을 묘사하고 사물 사이의 차이를 강조하는 데 사용됩니다. 뚜렷한 (동사)는 구별 행동이나 능력을 나타내며 차별 과정을 설명하는 데 사용됩니다. 프로그래밍에서 구별은 종종 중복 제거 작업과 같은 컬렉션에서 요소의 독창성을 나타내는 데 사용됩니다. 홀수 및 짝수 숫자를 구별하는 것과 같은 알고리즘이나 함수의 설계에 별개가 반영됩니다. 최적화 할 때 별도의 작업은 적절한 알고리즘 및 데이터 구조를 선택해야하며, 고유 한 작업은 논리 효율성의 구별을 최적화하고 명확하고 읽을 수있는 코드 작성에주의를 기울여야합니다.

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

! x 이해! x는 C 언어로 된 논리적 비 운영자입니다. 그것은 x의 값, 즉 실제 변경, 거짓, 잘못된 변경 사항을 부수합니다. 그러나 C의 진실과 거짓은 부울 유형보다는 숫자 값으로 표시되며, 0이 아닌 것은 참으로 간주되며 0만이 거짓으로 간주됩니다. 따라서! x는 음수를 양수와 동일하게 처리하며 사실로 간주됩니다.

합에 대한 C에는 내장 합계 기능이 없지만 다음과 같이 구현할 수 있습니다. 루프를 사용하여 요소를 하나씩 축적합니다. 포인터를 사용하여 요소를 하나씩 액세스하고 축적합니다. 큰 데이터 볼륨의 경우 병렬 계산을 고려하십시오.

코드 취약점, 브라우저 호환성, 성능 최적화, 보안 업데이트 및 사용자 경험 개선과 같은 요소로 인해 H5 페이지를 지속적으로 유지해야합니다. 효과적인 유지 관리 방법에는 완전한 테스트 시스템 설정, 버전 제어 도구 사용, 페이지 성능을 정기적으로 모니터링하고 사용자 피드백 수집 및 유지 관리 계획을 수립하는 것이 포함됩니다.

코드 복사 및 붙여 넣기는 불가능하지는 않지만주의해서 처리해야합니다. 코드의 환경, 라이브러리, 버전 등과 같은 종속성은 현재 프로젝트와 일치하지 않으므로 오류 또는 예측할 수없는 결과를 초래할 수 있습니다. 파일 경로, 종속 라이브러리 및 Python 버전을 포함하여 컨텍스트가 일관되게 유지하십시오. 또한 특정 라이브러리의 코드를 복사 및 붙여 넣을 때 라이브러리 및 해당 종속성을 설치해야 할 수도 있습니다. 일반적인 오류에는 경로 오류, 버전 충돌 및 일관되지 않은 코드 스타일이 포함됩니다. 성능 최적화는 코드의 원래 목적 및 제약에 따라 재 설계 또는 리팩토링되어야합니다. 복사 코드를 이해하고 디버그하고 맹목적으로 복사하여 붙여 넣지 않는 것이 중요합니다.

크롤링하는 동안 58.com 작업 페이지의 동적 데이터를 얻는 방법은 무엇입니까? Crawler 도구를 사용하여 58.com의 작업 페이지를 크롤링 할 때는이 문제가 발생할 수 있습니다.
