ITK笔记--读取3D NIFTI图像并用VTK可视化

版本:ITK-5.2.1,VTK-9.1
注意:在编译 ITK 时,需要编译 ITK 的 module_vtkGlue 模块

我们使用 ITK 读取一个 3D 的 NIFTI 图像,并将其转换为 VTK 图像以可视化图像。代码中主要涉及到的类和函数如下:
在这里插入图片描述

C++代码如下:

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageToVTKImageFilter.h>
#include <itkNiftiImageIO.h>
#include <vtkActor.h>
#include <vtkAutoInit.h>
#include <vtkDiscreteMarchingCubes.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);


int main()
{
	// File name settings
	const char* fileName = "image.nii.gz";
	

	// Define ImageType, ReaderType, ImageIOType and read file
	using PixelType = short;
	constexpr unsigned int Dimension = 3;
	using ImageType = itk::Image<PixelType, Dimension>;
	using ReaderType = itk::ImageFileReader<ImageType>;
	using ImageIOType = itk::NiftiImageIO;
	ReaderType::Pointer reader = ReaderType::New();
	ImageIOType::Pointer niftiIO = ImageIOType::New();
	reader -> SetImageIO(niftiIO);
	reader -> SetFileName(fileName);
	reader -> Update();


	// Print img size
	ImageType::SizeType imgSize = reader -> GetOutput() -> GetLargestPossibleRegion().GetSize();
	std::cout << "read done! img size: " << imgSize << std::endl;


	// Convert itkImage to vtkImage
	using ConvertFilter = itk::ImageToVTKImageFilter<ImageType>;
	ConvertFilter::Pointer convertFilter = ConvertFilter::New();
	convertFilter -> SetInput(reader -> GetOutput());
	convertFilter -> Update();


	// Extract vtkImageData contour to vtkPolyData
	vtkNew<vtkDiscreteMarchingCubes> contour;
	contour -> SetInputData(convertFilter -> GetOutput());


	// Define colors, mapper, actor, renderer, renderWindow, renderWindowInteractor
	vtkNew<vtkNamedColors> colors;

	vtkNew<vtkPolyDataMapper> mapper;
	mapper -> SetInputConnection(contour -> GetOutputPort());

	vtkNew<vtkActor> actor;
	actor -> SetMapper(mapper);

	vtkNew<vtkRenderer> renderer;
	renderer -> AddActor(actor);
	renderer -> SetBackground(colors -> GetColor3d("SteelBlue").GetData());

	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow -> AddRenderer(renderer);

	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
	renderWindowInteractor -> SetRenderWindow(renderWindow);
	renderWindowInteractor -> Initialize();
	renderWindowInteractor -> Start();

	return 0;
}

Python代码如下:

import argparse
import itk
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersGeneral import vtkDiscreteMarchingCubes
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer, \
		vtkRenderWindow, vtkRenderWindowInteractor


def get_argument():
    parser = argparse.ArgumentParser()

    # Data settings
    parser.add_argument('--nifti_file_name', default='image.nii.gz')

    args = parser.parse_args()
    return args


def main():
    args = get_argument()

    # Read NIFTI file
    itk_img = itk.imread(filename=args.nifti_file_name)
    print(itk_img)

    # Convert itk to vtk
    vtk_img = itk.vtk_image_from_image(l_image=itk_img)
    print(vtk_img)

    # Extract vtkImageData contour to vtkPolyData
    contour = vtkDiscreteMarchingCubes()
    contour.SetInputData(vtk_img)

    # Define colors, mapper, actor, renderer, renderWindow, renderWindowInteractor
    colors = vtkNamedColors()

    mapper = vtkPolyDataMapper()
    mapper.SetInputConnection(contour.GetOutputPort())

    actor = vtkActor()
    actor.SetMapper(mapper)

    renderer = vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(colors.GetColor3d("SteelBlue"))

    renderWindow = vtkRenderWindow()
    renderWindow.AddRenderer(renderer)

    renderWindowInteractor = vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderWindowInteractor.Initialize()
    renderWindowInteractor.Start()


if __name__ == '__main__':
    main()
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: itksnap-3.6.0-20170401-win64.exe是一款针对医学影像处理的软件。该软件是开源的,由The Insight Toolkit (ITK)团队开发和维护。 该软件提供了一系列功能强大的工具,用于医学影像的处理、分析和可视化。它支持多种常见的医学图像格式(如DICOM、NIfTI等),可以加载、浏览和编辑这些图像itksnap具有丰富的图像分割功能,可以根据不同的算法和参数进行肿瘤、器官等目标的自动或半自动分割。此外,它还支持手动绘制轮廓和区域,以便更精细地控制分割结果。 除了分割,itksnap还提供了多种用于量化和分析图像的工具。例如,可以计算图像中特定组织区域的体积、表面积和形态特征。还可以生成三维重建模型,用于可视化和进一步分析。 该软件界面友好,操作简单。用户可以通过鼠标和键盘操作来进行图像处理和分析,也可以编写脚本进行批量处理。 itksnap-3.6.0-20170401-win64.exe适用于64位Windows操作系统。用户只需下载并运行这个可执行文件,即可安装并使用itksnap软件。 总之,itksnap-3.6.0-20170401-win64.exe是一款功能强大、易于使用的医学影像处理软件,适用于医学影像研究人员和临床医生等人群。 ### 回答2: itksnap-3.6.0-20170401-win64.exe是一个开源的医学图像处理软件,适用于Windows 64位操作系统。该软件具有强大的图像分析和可视化功能,用于医学影像数据的处理、分析和研究。 itksnap-3.6.0-20170401-win64.exe基于ITK(Insight Segmentation and Registration Toolkit)开发,支持各种医学图像格式,包括DICOM、NIfTI和Analyze格式。用户可以加载、浏览和编辑医学图像,并进行各种图像处理操作,如图像平滑、增强、分割、配准等。 该软件还提供了用于定量分析的工具,比如体积计算、表面积计算、标注和区域统计等。用户可以根据需要进行图像标注和测量,并生成量化数据报告。 itksnap-3.6.0-20170401-win64.exe还支持三维可视化,用户可以轻松地查看和操作三维医学图像。软件提供了多种可视化模式和操作工具,可以进行切片、重建、旋转、缩放等操作,以便更好地理解和分析医学图像数据。 此外,itksnap-3.6.0-20170401-win64.exe具有用户友好的界面,并提供了详细的文档和教程,方便用户快速上手并熟练使用软件的功能。 总之,itksnap-3.6.0-20170401-win64.exe是一款功能强大、易于使用的医学图像处理软件,广泛应用于医学研究、临床诊断和教学等领域。 ### 回答3: itksnap-3.6.0-20170401-win64.exe是一个开放源代码的医学图像处理软件。它主要用于图像分割、三维可视化和量化分析。它支持多种文件格式,包括DICOM、NIfTI和Analyze等常见的医学图像格式。 itksnap提供了一个用户友好的图形界面,使得医学图像可视化和分析变得更加简单和直观。用户可以通过加载医学图像数据集,将其切片并进行三维重建。还可以对图像进行分割,将其分为不同的组织或结构。这对于诊断和手术规划等医学应用非常有用。 此外,itksnap还提供了一些先进的图像处理功能,例如非线性配准、形变场估计和图像滤波等。这些功能使得用户可以更好地处理医学图像,提高准确性和效率。 总之,itksnap是一个功能强大且易于使用的医学图像处理软件。它可以帮助医生和研究人员更好地分析和理解医学图像,为医学诊断和研究提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值