当前位置: 首页 > news >正文

VTK.js

VTK.js是一款专为现代浏览器打造的JavaScript 3D可视化库。作为知名VTK(Visualization Toolkit)项目的Web版本,它由Kitware团队精心开发。该库能够高效创建、处理和展示3D模型及数据集,提供互动式的可视化体验。基于WebGL的渲染引擎确保优异性能,同时支持多格式数据输入。其应用场景广泛,涵盖科学可视化、医学影像分析、地理信息系统、工业设计及游戏开发等诸多领域。借助VTK.js,开发者能便捷地在网页端实现专业级的数据可视化效果。VTK.js是一款专为现代浏览器打造的JavaScript 3D可视化库。作为知名VTK(Visualization Toolkit)项目的Web版本,它由Kitware团队精心开发。该库能够高效创建、处理和展示3D模型及数据集,提供互动式的可视化体验。基于WebGL的渲染引擎确保优异性能,同时支持多格式数据输入。其应用场景广泛,涵盖科学可视化、医学影像分析、地理信息系统、工业设计及游戏开发等诸多领域。借助VTK.js,开发者能便捷地在网页端实现专业级的数据可视化效果。

Examples

先用python代码将一组bmp转为3D numpy并降采样,再保存为.vti格式文件

import os
import vtk
from vtk.util.numpy_support import numpy_to_vtk
import numpy as np
from PIL import Image
from scipy.ndimage import zoomdef read_bmp_stack(folder_path, downsample_factor=10):"""读取文件夹中的 BMP 图片,并转换为 3D numpy 数组,同时进行降采样"""file_list = sorted([f for f in os.listdir(folder_path) if f.endswith('.bmp')])if not file_list:raise ValueError("No BMP files found in the folder")sample_image = Image.open(os.path.join(folder_path, file_list[0]))width, height = sample_image.sizedepth = len(file_list)volume_data = np.zeros((depth, height, width), dtype=np.uint8)for i, file_name in enumerate(file_list):img = Image.open(os.path.join(folder_path, file_name)).convert('L')volume_data[i, :, :] = np.array(img)# 进行降采样downsampled_data = zoom(volume_data, (1/downsample_factor, 1/downsample_factor, 1/downsample_factor), order=1)return downsampled_datadef save_vti(volume_data, output_file):"""将 3D numpy 数据保存为 .vti 文件,并确保 <DataArray> 直接包含数据"""depth, height, width = volume_data.shapeimage_data = vtk.vtkImageData()image_data.SetDimensions(width, height, depth)image_data.SetSpacing(1.0, 1.0, 1.0)  # 更新间距以匹配降采样比例flat_data = volume_data.flatten(order='C')  # C-order 保证正确的数据存储顺序vtk_array = numpy_to_vtk(flat_data, deep=True, array_type=vtk.VTK_UNSIGNED_CHAR)image_data.GetPointData().SetScalars(vtk_array)# image_data.GetCellData().SetScalars(vtk_array)writer = vtk.vtkXMLImageDataWriter()writer.SetFileName(output_file)writer.SetInputData(image_data)writer.SetDataModeToBinary()  # 确保 <DataArray> 直接包含数据writer.SetCompressorTypeToZLib()  # 启用压缩writer.Write()print(f"VTI file saved: {output_file}")if __name__ == "__main__":folder_path = "../../adata/3dbmps"  # 替换为你的BMP文件夹路径output_vti_file = "3dbmp4s.vti"  # 输出的 VTI 文件名volume_data = read_bmp_stack(folder_path, downsample_factor=4)save_vti(volume_data, output_vti_file)

不同降采样程度可获得不同大小的vti文件

使用VTK.js库显示vti文件内容

支持先将DICOM文件集转成VTK.JS或VTI格式,再显示出来

DICOM into VTK.JS or VTI files

GitHub - KitwareMedical/dicom-exporter: DICOM file converter in Python

cd dicomexporter 
dicom-exporter E:/Working/adata/CircleofWillis E:/Working/adata/dicomtovti.vti
// or
dicom-exporter E:/Working/adata/CircleofWillis E:/Working/adata/dicomtovti.vtkjs

http://www.lryc.cn/news/574088.html

相关文章:

  • 容声冰箱如何让荔枝在世俱杯赛场外再“长7天”
  • Elasticsearch API访问权限控制:禁用外部端点访问
  • 在Ubuntu上设置Selenium自动化测试环境:Chrome与Firefox的详细指南
  • 海拔案例分享-门店业绩管理小程序
  • 小程序 顶部栏标题栏 下拉滚动 渐显白色背景
  • Python Django全功能框架开发秘籍
  • 多模态大语言模型arxiv论文略读(133)
  • 【nvidia-H100-ib排障实战2】:服务器 InfiniBand 网络性能问题深度分析
  • 学习Linux进程冻结技术
  • 科技资讯杂志科技资讯杂志社科技资讯编辑部2025年第9期目录
  • 微算法科技(NASDAQ:MLGO)研发可信共识算法TCA,解决区块链微服务中的数据一致性与安全挑战
  • 笔试强训:Day8
  • Qt for OpenHarmony 编译鸿蒙调用的动态库
  • MCU双分区方案,如何优雅地获知当前运行分区?
  • 开发上门按摩APP应具备哪些安全保障功能?
  • 实时预警!机场机坪井室无线智能液位监测系统助力安全降本
  • 【设计模式精讲 Day 12】代理模式(Proxy Pattern)
  • WebSocket 进阶全攻略:心跳机制、断线重连、socket.io、鉴权与WSS配置
  • LeetCode热题100—— 160. 相交链表
  • 拼多多API限流机制破解:分布式IP池搭建与流量伪装方案
  • Re:从零开始的地址映射基本分页存储管理方式(考研向)
  • 京东金融API支付链路剖析:白条分期接口的安全加固方案
  • ​​FFmpeg命令全解析:三步完成视频合并、精准裁剪​​、英伟达显卡加速
  • 飞往大厂梦之算法提升-7
  • vue | vue-macros 插件升级以及配置
  • OSC靶机练习 PG ZenPhoto
  • 华为HN8145V光猫改华为蓝色公版界面,三网通用,xgpon公版光猫
  • redis如何使用IO多路复用
  • 深入理解PHP中的面向对象编程
  • 医疗B端系统布局创新:医护操作界面与患者数据的差异化呈现