VTK.js显示层析数据

VTK.js 是一个用于在现代网页浏览器中进行3D可视化的强大JavaScript库。它由Kitware开发,灵感来源于流行的VTK(Visualization Toolkit)项目,但专为Web环境设计。VTK.js允许用户创建、操作和显示3D模型、数据集和交互式可视化内容。它利用WebGL进行高性能渲染,支持多种数据格式,并提供丰富的交互功能,适用于科学可视化、医学图像处理、GIS、工业设计和游戏开发等多个领域。通过VTK.js,开发者可以在网页上轻松实现复杂的数据可视化,将专业级的可视化工具带到浏览器中。

Examples

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

python 复制代码
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 zoom

def 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.size
    depth = 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_data

def save_vti(volume_data, output_file):
    """将 3D numpy 数据保存为 .vti 文件,并确保 <DataArray> 直接包含数据"""
    depth, height, width = volume_data.shape
    
    image_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

bash 复制代码
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
相关推荐
程序员海军23 分钟前
AI 越来越强,为什么打工人反而越来越累、越来越内耗了?
前端·程序员·aigc
vx_Biye_Design27 分钟前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
晴天1635 分钟前
VSCodium 项目介绍
前端·javascript·vscode
世岩清上40 分钟前
展厅数字内容同质化严重,怎样打造专属叙事风格?
大数据·前端·javascript·人工智能·html·音视频·展厅改造
晴天1642 分钟前
前端动画体系全解析:类型、实现方案与工程选型最佳实践
前端
持敬chijing1 小时前
Web前后端开发-JavaScript 入门教程
开发语言·前端·javascript
李高钢1 小时前
Python Django 框架入门:从零搭建你的第一个 Web 应用
前端·python·django
PC2005_cloud1 小时前
Rust学习笔记:所有权、借用与生命周期——Rust的核心机制
前端·后端
leoZ2311 小时前
2026-09-10-静态扫描连错三次-用运行环境当裁判
前端·javascript·vue.js·人工智能·opencv·机器学习·数据挖掘
Maxkim1 小时前
我把一个"会自己查资料"的 AI 助手塞进了浏览器侧边栏,开源了
前端·javascript