OPEN3D学习过程中的报错解决记录

导入open3d

  • 遇到报错:
    File “D:\ProgramData\Anaconda3\envs\open3d\lib\site-packages\zmq\backend\cython_init_.py”, line 6, in
    from . import (constants, error, message, context,
    ImportError: DLL load failed: 找不到指定的模块。

  • 原因:
    缺少某些dll文件,但我又觉得是某个模块的版本不对,版本不够高级。

  • 解决方法:
    重装了pyzmq: pyzmq-18.0.0会报错。 pyzmq-19.0.1不会出错

pip uninstall pyzmq 
pip install pyzmq 

我参考了https://blog.youkuaiyun.com/lwgkzl/article/details/85202207

可视化

  • 遇到报错:
    TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:
    1.(geometry_list: List[open3d.open3d_pybind.geometry.Geometry], window_name: str = ‘Open3D’, width: int = 1920, height: int = 1080, left: int = 50, top: int = 50, point_show_normal: bool = False, mesh_show_wireframe: bool = False, mesh_show_back_face: bool = False) -> None
    Invoked with: [geometry::PointCloud with 301154 points., geometry::PointCloud with 297368 points.]; kwargs: zoom=0.4559, front=[0.6452, -0.3036, -0.7011], lookat=[1.9892, 2.0208, 1.8945], up=[-0.2779, -0.9482, 0.1556]

  • 定位错误代码:
    o3d.visualization.draw_geometries([pcd], zoom=0.4559, front=[0.6452, -0.3036, -0.7011], lookat=[1.9892, 2.0208, 1.8945], up=[-0.2779, -0.9482 ,0.1556])

  • 原因:
    估计是版本不对吧?查看draw_geometries()的函数定义就知道了

  • 解决办法:
    o3d.visualization.draw_geometries([pcd]) # 把各种参数去掉,只剩点云数据就好

点云配准

  • 遇到报错:
    RuntimeError: [Open3D ERROR] TransformationEstimationPointToPlane and TransformationEstimationColoredICP require pre-computed normal vectors.

  • 定位报错代码:
    result = o3d.registration.registration_icp(source, target, distance_threshold, result_ransac.transformation, o3d.registration.TransformationEstimationPointToPlane())

  • 原因:
    使用TransformationEstimationPointToPlane()需要提前计算点云的法向量

  • 解决办法:
    因为该代码传入的是源数据,没有估计过法线的。而降采样的点云有计算过法向量。故在此处可以把两个点云参数改为降采样后的点云(应该有算过的,在程序比较前面)

### 3D Slicer 中导入 PNG 文件报错解决方案 在使用 3D Slicer 进行医学图像处理时,如果遇到导入 PNG 文件失败的情况,可能的原因涉及多种因素。以下是针对该问题的详细分析和解决方法: #### 可能原因及对应措施 1. **文件格式不兼容** 3D Slicer 主要设计用于处理 DICOM 和 NRRD 等标准医学影像格式[^2]。虽然支持部分通用图像格式(如 PNG、JPEG),但如果 PNG 文件不符合特定条件,则可能导致加载失败。建议验证 PNG 文件是否为灰度图像或 RGB 图像,并确认其分辨率一致性。 2. **缺少必要的元数据** 医学图像通常附带重要元数据(如像素间距、切片厚度等)。对于普通的 PNG 文件,这些信息通常是缺失的,这会导致 3D Slicer 在解析时出现问题。可以通过以下方式补充元数据: - 使用第三方工具(如 ITK-SNAP 或 Fiji)将 PNG 转换为带有完整元数据的 NRRD 格式。 - 手动编辑 PNG 的 EXIF 数据或将多个 PNG 合并为体积数据集后再导入。 3. **模块配置不当** 如果通过“Import Data”选项卡尝试加载 PNG 文件而未成功,可能是由于选择了错误的数据类型或路径设置有误。推荐的操作流程如下: ```plaintext Modules → Load Data → Add Volume (Scalar) ``` 此外,确保所选目录仅包含目标 PNG 文件及其关联子文件夹,避免混杂无关内容。 4. **版本差异引发冲突** 不同版本的 3D Slicer 对于非主流输入的支持程度有所区别。若当前安装的是较旧版程序,考虑升级至最新稳定发行版以获得更好的兼容性和修复已知缺陷[^3]。 5. **调试与反馈机制利用不足** 当常规手段均告失效时,查阅运行期间产生的日志记录能够提供额外线索。具体操作步骤见下述说明[^1]: - 开启开发者模式:`Edit → Settings → Developer` - 查看实时消息窗口中的提示语句; - 将异常详情连同测试样本一同提交给官方社区寻求进一步指导。 #### 示例脚本辅助转换 为了简化从 PNG 到适合 3D 显示形式的过程,这里给出一段 Python 脚本作为参考实现自动化批量预处理工作流的一部分: ```python import os from PIL import Image import numpy as np import SimpleITK as sitk def convert_png_to_nrrd(input_dir, output_file): images = [] for filename in sorted(os.listdir(input_dir)): if not filename.endswith('.png'): continue img_path = os.path.join(input_dir, filename) image = Image.open(img_path).convert('L') # Convert to grayscale images.append(np.array(image)) volume_data = np.stack(images, axis=0) # Stack along z-axis itk_image = sitk.GetImageFromArray(volume_data.astype(np.int16)) # Ensure correct data type writer = sitk.ImageFileWriter() writer.SetFileName(output_file) writer.Execute(itk_image) # Example usage input_directory = '/path/to/png/files' output_filename = 'converted_volume.nrrd' convert_png_to_nrrd(input_directory, output_filename) ``` 此函数读取指定文件夹内的所有 PNG 文件,按字母顺序排列组合成立体结构后存储为目标 `.nrrd` 文件供后续加载。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值