ITK-医学图像基本信息

ITK 全名Insight Segmentation and Registration Toolkit 是一款开源的医学图像处理软件包,用于处理医学图像中的两大难题:图像配准、图像分割。

***********************************************************************************************

一、医学图像主要信息主要包换两类:

第一类:patient information 病人信息

病人姓名、病人出生日期、拍摄医院、拍摄时间等。

第二类:image information 图像信息

1、spacing图像间距

2、origin图像原点位置

3、direction图像方向

4、Index图像像素索引值(图像像素的排列位置,范围为图像的尺寸)

5、physical图像像素物理坐标(图像像素所在的实际空间位置,可用于计算图像中目标的实际大小)

 

******************************************************************************************

二、ITK的基本使用形式

itk以filter方式调用其包含的每个函数。

每个filter需要定义输入图像的类型,以及输出图像的类型,得到filtertype

下面介绍如何设置图像类型;读取图像;保存图像;读取图像的信息;读取图像的灰度值;

像素索引值与物理空间位置的变换;读取感兴趣区域(ROI);读取图像的最大最小灰度值

 

******************************************************************************************

三、代码

 

头文件

#include "itkImageFileReader.h"

#include "itkImageFileWriter.h"

#include "itkImageRegionIterator.h"

#include "itkRegionOfInterestImageFilter.h"

#include"itkMinimumMaximumImageCalculator.h"

 

typedef itk::Image<short,3> ITKImageType; //图像类型:

typedef typename ITKImageType::Pointer ITKImagePointer; //定于图像指针

typedef typename ITKImageType::SizeType SizeType; //定义图像尺寸类型

typedef typename ITKImageType::PixelType PixelType; //定义图像像素灰度值类型

typedef typename ITKImageType::PointType PoingType; //定义图像像素物理位置类型

typedef typename ITKImageType::IndexType IndexType; //定义图像像素索引值类型

typedef typename ITKImageType::DirectionType DirectionType; //定义图像的方向类型


 

int main()

{

读取图像

typedef itk::ImageFilterReader<ITKImageType> ImageReaderType;

ImageReaderType::Pointer imagereaderFilter = ImageReaderType::New();

imagereaderFilter ->SetFileName(“input.nrrd”);

try

    {

         imagereaderFilter ->Update();

    }

    catch (itk::ExceptionObject & exp)

    {

        cerr << "read Exception caught !" << std::endl;

        cerr << exp << std::endl;

    }

ITKImagePointer input = imagereaderFilter ->GetOutput();//输出的图像

 

保存图像:

typedef itk::ImageFilterWriter<ITKImageType> ImageWriterType;

ImageWriterType::Pointer imagewriterFilter = ImageWriterType::New();

imagewriterFilter ->SetInput(input);

imagewriterFilter ->SetFileName(“output.nrrd”);

imagewriterFilter ->Update();

 

读取图像的信息:

PixelType spacing = input->GetSpacing();

PixelType origin = input->GetOrigin();

DirectionType direction= input->GetDirection();

input->GetlargestPossibleregion().GetSize();

SizeType size = input->GetLargestPossibleRegion().GetSize();

 

迭代读取图像的灰度值:

itk::ImageRegionIterator<ITKImageType> ItType; //定义迭代器

    ItType it(input, input->GetRequestedRegion());

    it.GoToBegin();

    while (!it1IsAtEnd())

    {

        PixelType value = it.Get();  //读取灰度值 

        IndexType index = it.GetIndex(); //读取像素索引值

         it.Set(1); //修改灰度值

    }

 

像素索引值与物理空间坐标的变换

IndexType index;

index[0] =1; index[1] =1; index[2] =1;

PoingType point;

USImage->TransformIndexToPhysicalPoint(index, point); //索引值转换成物理坐标

PoingType point1;

point1[0] = 12.3; point1[1] = 12.3; point1[2] = 12.3;

IndexType index1;

USImage->TransformPhysicalPointToIndexPoint(index1, point1); //物理坐标转换成索引值

 

选取图像的感兴趣区域

//OI区域起始位置

IndexType ROIstart;

    ROIstart[0] = 350;

    ROIstart[1] = 0;

    //ROI区域大小

    SizeType ROIsize;

    ROIsize[0] = 1000;

    ROIsize[1] = 900;

    //ROI区域

    ITKImageType::RegionType ROIRegion;

    ROIRegion.SetSize(ROIsize);

    ROIRegion.SetIndex(ROIstart);

    typedef itk::RegionOfInterestImageFilter< ITKImageType, ITKImageType> RegionOfInterestImageFilterType;

    RegionOfInterestImageFilterType::Pointer regioninterestfilter = RegionOfInterestImageFilterType::New();

    regioninterestfilter->SetInput(input);

    regioninterestfilter->SetRegionOfInterest(ROIRegion);

    try

    {

        regioninterestfilter->Update();

    }

    catch (itk::ExceptionObject & exp)

    {

        cerr << "ROI Exception caught !" << std::endl;

        cerr << exp << std::endl;

    }

得到图像的最大灰度值和最小灰度值

typedef itk::MinimumMaximumImageCalculator <ITKImageType> IMinimumMaximumImageCalculatorType;

    IMinimumMaximumImageCalculatorType::Pointer imageCalculatorFilter = IMinimumMaximumImageCalculatorType::New();

    imageCalculatorFilter->SetImage(input);

    imageCalculatorFilter->Compute();

    PixelType max = imageCalculatorFilter->GetMaximum(); //最大值

    PixelType min = imageCalculatorFilter->GetMinimum(); //最小值

 

return 0;

}







 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页