Open3D mesh 去除噪点

目录

一、概述

1.1去除噪点的方法

1.2应用

二、代码实现

三、实现效果

3.1原始点云

3.2添加噪声的mesh


Open3D点云算法汇总及实战案例汇总的目录地址:

Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客


一、概述

        在三维网格模型中,噪点通常是指一些孤立的、偏离主模型的无效数据点或面片,这些噪点可能是由于扫描过程中的误差或其他原因造成的。在 Open3D 中,可以使用多种方法来去除三维网格中的噪点,从而获得更加干净和光滑的网格模型。

1.1去除噪点的方法

  1. 顶点去噪: 通过滤除某些离群顶点来去除噪点。这种方法通常基于统计学方法,如半径邻域统计、均值或中值滤波。
  2. 面去噪: 通过移除网格中包含面积过小、形状异常或法向量偏差较大的三角面来实现去噪。
  3. 网格平滑: 通过平滑网格表面来减少噪点的影响,使得网格表面更加光滑。这种方法在去除高频噪声时非常有效。

1.2应用

  • 三维重建: 去除噪点后的网格模型可以用于更精确的三维重建。
  • 工业检测: 在工业扫描和检测中,去除噪点可以提高模型的精度和质量。
  • 科学计算: 在科学计算中,干净的网格模型可以提高仿真和计算的准确性。

二、代码实现

import open3d as o3d
import numpy as np

# ------------------- 加载三角网格模型 -------------------
mesh = o3d.io.read_triangle_mesh("monkey.ply")
mesh.compute_vertex_normals()

# ------------------- 生成带有噪点的网格 -------------------
vertices = np.asarray(mesh.vertices)

# 生成随机噪声并添加到顶点上
noise = np.random.normal(scale=0.01, size=vertices.shape)  # 标准差为0.01的高斯噪声
noisy_vertices = vertices + noise

# 创建一个新的网格模型,使用带有噪声的顶点
noisy_mesh = o3d.geometry.TriangleMesh()
noisy_mesh.vertices = o3d.utility.Vector3dVector(noisy_vertices)
noisy_mesh.triangles = mesh.triangles
noisy_mesh.compute_vertex_normals()
noisy_mesh += mesh

# ------------------- 可视化带有噪点的网格 -------------------
print("Noisy Mesh")
o3d.visualization.draw_geometries([noisy_mesh], window_name="Noisy Mesh", width=800, height=600)

# ------------------- 去除噪点 -------------------
# 移除孤立的顶点(噪点)
noisy_mesh.remove_unreferenced_vertices()

# 通过移除网格中的小连通组件来去除噪点
noisy_mesh = noisy_mesh.remove_degenerate_triangles()
noisy_mesh = noisy_mesh.remove_duplicated_triangles()
noisy_mesh = noisy_mesh.remove_duplicated_vertices()
noisy_mesh = noisy_mesh.remove_non_manifold_edges()

# 可视化去除噪点后的网格模型
print("Mesh after noise removal")
o3d.visualization.draw_geometries([noisy_mesh], window_name="Mesh after noise removal", width=800, height=600)

# ------------------- 进一步平滑网格 -------------------
# 对网格进行平滑处理,以减少表面噪声

smoothed_mesh = noisy_mesh.filter_smooth_simple(number_of_iterations=5)

# 可视化平滑后的网格模型
print("Smoothed Mesh")
o3d.visualization.draw_geometries([smoothed_mesh], window_name="Smoothed Mesh", width=800, height=600)

# ------------------- 可视化原始网格 -------------------
print("Original Mesh")
o3d.visualization.draw_geometries([mesh], window_name="Original Mesh", width=800, height=600)

三、实现效果

3.1原始点云

3.2添加噪声的mesh

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值