#include "itkImage.h" #include <iostream> int main() { using ImageType = itk::Image< unsigned short , 3 >; ImageType::Pointer image = ImageType::New(); std::cout << "ITK Hello World !"
一、编译安装ITK-5.1.1 下载对应版本库,创建文件夹:创建ITKlib:Bin,Build,Source Bin:后续VS2017编译的文件路径; Build:cmake编译后的文件路径; Source:将ITK-5.0.1解压到该目录下。 二、编译安装VTK-9.0.1 VTK安装跟ITK类似。 1.首先创建VTK-9.0.1lib文件夹,该文件夹下创建Bin,Build,Source文件夹。 renderWindowInteractor->Start(); return EXIT_SUCCESS; } 三、ITK和VTK联合测试,用ITK读取图像,VTK显示 #include "itkImage.h of pic typedef itk::ImageFileReader ReaderType; //the class of read pic typedef itk::ImageToVTKImageFilter
2、使用ITK函数来实现3D骨架提取算法 ITK的函数中只支持2D骨架提取算法,但有大牛写了基于ITK的3D骨架提取算法,C++源码下载请见原文链接。 Dimension = 3; typedef unsigned char PixelType; typedef itk ::Image<PixelType, Dimension> ImageType; // Read image typedef itk::ImageFileReader<ImageType> GetOutput()); TRY_EXPECT_NO_EXCEPTION( thinningFilter->Update() ); // output to file typedef itk [2] image = itk.imread(input_filename) thining_map = itk.BinaryThinningImageFilter3D.New(image) itk.imwrite
2、使用ITK函数来实现最小路径提取算法 Dan Mueller写了基于ITK的最小路径提取算法,C++源码下载请见原文链接。 ::Image< PixelType, Dimension >; using ucharImagetype = itk::Image< OutputPixelType, Dimension >; using OutputImageType = itk::Image< OutputPixelType, Dimension >; using ReaderType = itk::ImageFileReader < ucharImagetype >; using WriterType = itk::ImageFileWriter< OutputImageType >; using PathType = itk::PolyLineParametricPath< Dimension >; using PathFilterType = itk::SpeedFunctionToPathFilter< ImageType
min' || 'max || anything you choose according theory FUSION_METHOD2 = 'max' # Read the two image I2_itk _1_1_t1ce.nii.gz", sitk.sitkInt16) I1 = sitk.GetArrayFromImage(I1_itk) I2 = sitk.GetArrayFromImage(I2 _itk) # First: Do wavelet transform on each image wavelet = 'db2' """ haar family: haar db family: db1 = sitk.GetImageFromArray(fusedImage) fused_itk.SetOrigin(I2_itk.GetOrigin()) fused_itk.SetSpacing(I2 _itk.GetSpacing()) fused_itk.SetDirection(I2_itk.GetDirection()) sitk.WriteImage(fused_itk, 'fused_itk.mha
4.1、采用itk的多尺度海森矩阵血管增强 ? 4.2、 将增强后的血管归一化到0-255范围 ? 4.3、 对归一化的血管进行固定阈值分割 ? (pathDicom, itk.F) # 1 ImageType = type(input_image) Dimension = input_image.GetImageDimension () HessianPixelType = itk.SymmetricSecondRankTensor[itk.D, Dimension] HessianImageType = itk.Image (multi_scale_filter.GetOutput(), "step1.mha") # 2 OutputPixelType = itk.UC OutputImageType = itk.Image[OutputPixelType, Dimension] rescale_filter = itk.RescaleIntensityImageFilter[ImageType
在医学图像的软件开发中,ctk通常和vtk、ITK等开源库一起使用。 f3f70ec0912cf836a3d5954a95cb04f0237fbdc4) 修改后:set(revision_tag v8.2.0) 在[vtk.org/VTK.git]上查看最新版本的tag,修改为相应的tag即可 (2)ITK 编译错误 CTK默认下载的ITK版本也比较旧,编译时可能同样遇到C++语法的错误 在CTK-master\CMakeExternals\ITK.cmake中修改revision_tag 如 修改前: set(revision_tag "v3.20.1") 修改后:set(revision_tag "v5.0.1") 在[itk.org/ITK.git]上查看最新版本的tag,修改为相应的tag即可
每个CT扫描的病例(case)可以包含几十到上百个dcm文件,想要可视化查看CT文件,以开源免费软件ITK-SNAP为例,直接将该case文件夹里的其中一个dcm拖进软件,可以看到这个CT扫描文件有134 import Simple ITK as sitk itk_img = sitk.ReadImage(‘a.mhd’) img_array = sitk.GetArrayFromImage(itk_img NIfTI格式的nii数据同样可以用ITK-SNAP软件打开,在python中同上采用SimpleITK包来处理。 2.3D可视化 由于ITK-SNAP的展示界面不够立体直观,可以借助paraview来展示我们的分割结果。 将分割好的.img或.nii文件拖到ITK-SNAP页面 ? 将刚才的文件再次拖到ITK-SNAP页面,以分割图像模式加载 ? 点击update即可在左下窗口显示立体分割结果 ? ? Segmentation->Export as Surface Mesh ?
2、利用ITK函数来实现气管提取 参考论文《Optimizing parameters of an open-source airway segmentation algorithm using different CT images》中的方法,在ITK中用到的函数是itk::ConnectedThresholdImageFilter,代码案例见链接: https://itk.org/Doxygen/html/Examples
config_read from heart_seg import affine_registration, bspline_registration, label_transform import os import itk (test_path, itk.F)) # 训练样本地址 train_path_list = [os.path.join(args.train_path, "ct_train for train_path in train_path_list: # 读取训练图像 train_image = np.asarray(itk.imread (train_path, itk.F)) # 利用仿射配准对齐患者CT与模板图像 train_image_affine, _ = affine_registration (train_path_list[id], itk.F)) # 利用B-样条配准对齐患者CT与模板图像 _, transform_parameters =
3、利用ITK函数来实现血管提取 参考论文《3D Multi-scale line filter for segmentation and visualization of curvilinear structures in medical images》中的方法,在ITK中用到的函数是 itk::Hessian3DToVesselnessMeasureImageFilter和 itk::HessianRecursiveGaussianImageFilter
*x)/(2*sigma^2)); % we will do the same as ITK. this is just done to be able to % compare gaussian results with those coming from ITK. *y) / (2*sigma^2) ); % we will do the same as ITK. this is just done to be able to % compare gaussian results with those coming from ITK.
下面介绍VTK工程的配置: 配置VTK工程,打开调试->属性->VC++目录,设置: 包含目录:D:\Program Files (x86)\VTK_ITK\VTK\include\vtk-8.0 库目录 :D:\Program Files (x86)\VTK_ITK\VTK\lib\vtk-8.0 ? 目录下,输入dir *.lib /w 命令,就可以查看所有的lib文件,进一步,我们把结果保存到一个文本文件中,输入dir *.lib /w > D:\Program Files (x86)\VTK_ITK 接下来的一篇文章将是关于ITK的相关分享! ITK的开发过程中采用了先进的多模态数据分割配准算法,用于处理图像配准和分割的问题。 ITK是用C++实现的,能够跨平台,并用CMake来管理编译过程来保证编译过程独立于平台。
我们选择了SimpleITK,一个围绕ITK库的python包装器,它允许我们导入额外的图像过滤器以进行预处理和其他任务: import SimpleITK as sitk import numpy as 这可以通过重新采样到各向同性分辨率来解决: def resample_img(itk_image, out_spacing=[2.0,2.0,2.0], is_label=False): # ()) resample.SetOutputOrigin(itk_image.GetOrigin()) resample.SetTransform(sitk.Transform()) ) # Assume to have some sitk image (itk_image) and label (itk_label) resampled_sitk_img= resample_img (itk_image, out_spacing=[2.0,2.0,2.0], is_label=False) resampled_sitk_lbl= resample_img(itk_label, out_spacing
., ieM FROM it1 ... itK [WHERE inner-cond FROM (ot1 ... otN) SJ (it1 ... itK) [ON inner-cond] [WHERE outer-cond FROM ot1 ... otN WHERE NOT EXISTS (SELECT expressions FROM it1 ... itK FROM (ot1 ... otN) AJ (it1 ... itK) [ON inner-cond] [WHERE outer-cond WHERE (oe1, ... oeM) NOT IN (SELECT ie1, ..., ieM FROM it1 ... itK
mahotas.readthedocs.io/en/latest/ 用户指南: https://mahotas.readthedocs.io/en/latest/index.html 8、 SimpleITK ITK 其中,SimpleITK是一个建立在ITK之上的简化层,促进其在简化原型、教育和解释语言中的应用。 SimpleITK是一个图像分析工具包,内含大量组件,支持一般滤波操作、图像分割和图形配准。 下面就是用SimpleITK和Python创建的可视化的CT/MR图: 官方地址: https://itk.org/ 学习资料: http://insightsoftwareconsortium.github.io
mahotas.readthedocs.io/en/latest/ 用户指南: https://mahotas.readthedocs.io/en/latest/index.html 8、 SimpleITK ITK 其中,SimpleITK是一个建立在ITK之上的简化层,促进其在简化原型、教育和解释语言中的应用。 SimpleITK是一个图像分析工具包,内含大量组件,支持一般滤波操作、图像分割和图形配准。 官方地址: https://itk.org/ 学习资料: http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/ 9、GraphicsMagick
mahotas.readthedocs.io/en/latest/ 用户指南: https://mahotas.readthedocs.io/en/latest/index.html 8、 SimpleITK ITK 其中,SimpleITK是一个建立在ITK之上的简化层,促进其在简化原型、教育和解释语言中的应用。 SimpleITK是一个图像分析工具包,内含大量组件,支持一般滤波操作、图像分割和图形配准。 下面就是用SimpleITK和Python创建的可视化的CT/MR图: 官方地址: https://itk.org/ 学习资料: http://insightsoftwareconsortium.github.io
生成的3个通道的3个模态数据img-1_0000.nii.gz、img-1_0001.nii.gz和img-1_0002.nii.gz如下,是用ITK-SNAP打开的,只展示沿z轴的一层图像。 ? segmentations can only have one color channel, not sure what happened here' 遍历图像的通道数(通常为3个),分别提取不同通道的图像,转换成itk for j, i in enumerate(img): if is_seg: i = i.astype(np.uint32) itk_img = sitk.GetImageFromArray (i) itk_img.SetSpacing(list(spacing)[::-1]) if not is_seg: sitk.WriteImage(itk_img, output_filename_truncated + "_%04.0d.nii.gz" % j) else: sitk.WriteImage(itk_img, output_filename_truncated + ".nii.gz
CD4_naive CD2 CD3G CD4 GIMAP6 GLG1 HMOX2 IL7R ITK LIMD2 LY9 NAA16 OBSCN PACS1 PLCL1 RPL14 SNPH TPP2 TRAF1 Th17 IL1R1 RORC CD4 IL21 IL17RA Tfh CA8 CD2 CD3G GZMM ITK MAP4K1 ST8SIA1 TRAC TRAV9-2 TRIB2 UBASH3A Central_memory CORO7 ATM GMEB2 SNRPN ADSL ITK Effector_memory APBA3 CD160 CD2 CD8B CDK10 CDKN2AIP CHST12 COG4 CX3CR1 DHX16 EWSR1 GIMAP6 GPR171 GZMK HMOX2 IKZF3 ITK NKG7 PRF1 PVRIG TINF2 ZMAT5 C1orf61 GNLY LCP2 PSTPIP1 PTPN4 RALY TAB2 TDP1 CD4_T SELL NT5E ITK