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;

}







 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章