# vtk9 **Repository Path**: mulin_cx/vtk9 ## Basic Information - **Project Name**: vtk9 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-28 - **Last Updated**: 2025-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vtk 9 ## 1 编译 ```zsh cd /home/cx/.local/src/vtk/VTK-9.4.2 mkdir -p build cd build cmake3 .. \ -Wno-dev \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DCMAKE_INSTALL_PREFIX=../../vtk-9.4.2-make \ -DBUILD_SHARED_LIBS:BOOL=ON \ -DVTK_WRAP_JAVA:BOOL=ON \ > 1-centos-cmake-make.log 2>&1 make -j$(nproc) > 2-centos-cmake-make.log 2>&1 # maven安装 mvn install:install-file ` "-Dfile=F:\Workplace\5-c\vtk\vtk-9.4.2-msvc-ninja-java\lib\java\vtk.jar" ` "-DgroupId=vtk" ` "-DartifactId=vtk" ` "-Dversion=9.4.2" ` "-Dpackaging=jar" mvn install:install-file -Dfile=/home/cx/.local/src/vtk/vtk9/vtk-9.4.2-make/lib64/java/vtk.jar \ -DgroupId=vtk \ -DartifactId=vtk \ -Dversion=9.4.2 \ -Dpackaging=jar ``` ## 2 加载 加载时遇到问题,无法加载vtkIOEnSightJava.so 原因是没有启用该模块,不许要该模块也行 ```zsh cmake3 .. \ -Wno-dev \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DCMAKE_INSTALL_PREFIX=../../vtk-9.4.2-make \ -DBUILD_SHARED_LIBS:BOOL=ON \ -DVTK_WRAP_JAVA:BOOL=ON \ -DVTK_MODULE_ENABLE_vtkIOEnSight=YES \ > 1-centos-cmake-make.log 2>&1 ``` ## 3 vtk编程 ### 3.1 基本流程 1. 加载 VTK 本地库 2. 读取本地Dicom文件 3. 创建mapper和actor --> 将图像数据映射为可视化的图形 4. 创建渲染器和交互器 5. 添加3D显示组件 6. 启动渲染循环 ### 3.2 数据流 | 流程 | 类 | 对象 | |---------------------|---------------------------|-----------------------------------------------| | 0. 本地Dicom文件 | DICOM文件 | xxx.dcm | | 1. 创建DICOM图像读取器 | vtkDICOMImageReader | reader = new vtkDICOMImageReader() | | 2. 设置DICOM文件目录路径 | | reader.SetDirectoryName() | | 3. 触发数据读取 | | reader.Update() | | 4.获取图像元数据 | vtkImageData | img = reader.GetOutput() | | 5.计算图像中心点 | | | | 6.配置各视图的变换矩阵 | vtkMatrix4x4 | resliceAxes = new vtkMatrix4x4(); | | 7.创建图像切片处理器 | vtkImageReslice | reslice.SetInputData(img) | | | | reslice.SetInputData(img); | | | | reslice.SetResliceAxes(resliceAxes); | | 8.配置窗宽窗位查找表 | vtkWindowLevelLookupTable | colorTable = new vtkWindowLevelLookupTable(); | | 9.创建颜色映射器 | vtkImageMapToColors | colorMap = new vtkImageMapToColors() | | | | colorMap.SetLookupTable(colorTable) | | 10.创建图像Actor并添加到渲染器 | vtkImageActor | imgActor = new vtkImageActor() | | | | imgActor.SetInputData(colorMap.GetOutput()) | DICOM文件 → vtkDICOMImageReader → vtkImageData → vtkImageReslice → vtkImageMapToColors → vtkImageActor → vtkRenderer → vtkPanel ## VtkDemo3 - 多平面重建(MPR)演示 VtkDemo3实现了DICOM影像的多平面重建(MPR)功能,包含以下四个视图: 1. **轴向(Axial)视图** - 显示水平切面 2. **冠状(Coronal)视图** - 显示前后切面 3. **矢状(Sagittal)视图** - 显示左右切面 4. **斜向(Oblique)视图** - 显示60度倾斜切面 ### 功能特性 - 支持四种正交切面显示 - 每个视图都可以通过按钮切换切片(上一张/下一张) - 支持窗宽窗位调整 - `Reset Window`按钮:重置窗宽窗位到默认值 - `Win Level`按钮:增加窗位值 - `Win Width`按钮:增加窗宽值 - 支持鼠标交互操作 - 轴向视图支持三种鼠标操作: - 中键拖动:调整窗宽窗位 - 左键拖动:平移图像 - 右键拖动:缩放图像 - 鼠标滚轮:切换切片 ### 技术实现 - 使用vtkDICOMImageReader读取DICOM序列 - 使用vtkImageReslice进行图像切片处理 - 使用vtkWindowLevelLookupTable实现窗宽窗位调整 - 使用vtkMatrix4x4定义不同切面的变换矩阵 - 使用自定义MouseAdapter实现交互操作 ### 运行要求 - DICOM数据路径: `src/main/resources/dicom/test2` - VTK本地库路径: `/home/cx/.local/src/vtk/vtk9/VTK-9.4.2/build/lib64/java/vtk-Linux-x86_64` ### 代码结构 ```java public class VtkDemo3 extends JPanel implements ActionListener ``` 主要组件: - 四个vtkPanel实例:分别对应四个视图 - 四个vtkImageReslice实例:负责图像切片处理 - 四个vtkImageMapToColors实例:负责颜色映射 - 按钮控件:用于控制切片切换和窗宽窗位调整 - 自定义MouseAdapter:实现鼠标交互操作 ### 主要方法 - 构造函数:初始化DICOM图像读取与渲染管线 - actionPerformed:按钮事件处理 - MouseAdapter子类:实现鼠标交互操作 ```pwsh # 设置 VTK 的 bin 和 vtk.jar 路径 $VTK_BIN = "F:\Workplace\5-c\vtk\vtk-9.4.2-msvc-ninja-java\bin" $VTK_LIB_JAVA = "F:\Workplace\5-c\vtk\vtk-9.4.2-msvc-ninja-java\lib\java" $VTK_LIB_JAVA_JAR = "$VTK_LIB_JAVA\vtk.jar" $VTK_LIB_JAVA_BIN = "$VTK_LIB_JAVA\vtk-Windows-AMD64" # 设置源码目录 $SRC_DIR = "F:\Workplace\1-github\vtk9\src\main\java" # ($SRC_DIR = "F:\Workplace\1-github\vtk9\src\main\java\org\example\Utils") # 添加 VTK bin 到 PATH $env:PATH = "$VTK_BIN;$env:PATH" Set-Location -Path $SRC_DIR javac -encoding UTF-8 -cp ".;$VTK_LIB_JAVA_JAR" org/example/Utils/Utils.java java ` -cp ".;$VTK_LIB_JAVA_JAR" ` -Djava.library.path="$VTK_LIB_JAVA_BIN" ` org.example.Utils.Utils ```