生活随笔
收集整理的這篇文章主要介紹了
                                
ITK实现DICM图像转换成BMP图像
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            本代碼用ITK實現了DICOM圖像 到 BMP圖像的轉換 ?并使用亮度調節轉換出成像效果較好的 BMP圖像。(代碼中寫死的文件位置,也可以通過輸入路徑參數來控制文件)
 
 
 
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkGDCMImageIO.h"
#include "itkBMPImageIO.h"
#include "itkCastImageFilter.h"int main()
{//定義輸入的類型typedef signed short InputPixelType;const unsigned int inputDimension = 2;typedef itk::Image<InputPixelType,inputDimension> InputImageType;//設置輸入的DCM圖像typedef itk::ImageFileReader < InputImageType > ReaderType;ReaderType::Pointer reader = ReaderType::New();reader->SetFileName("CTAtt009_CT001.dcm");//設置DCM類型typedef itk::GDCMImageIO Imageiotype;Imageiotype::Pointer gdcmImageIo  = Imageiotype::New();reader->SetImageIO( gdcmImageIo );try{reader->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file reader!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}//------------------------------------------------------------------------輸出//設置輸出類型typedef unsigned char OutputPixelType;const unsigned int OutputDimension =2;typedef itk::Image<OutputPixelType,OutputDimension> OutputImageType;//-----------------------------------------------------------------------轉換//實現DCM到BMP的轉化typedef itk::CastImageFilter<InputImageType,OutputImageType> ImageCastType;ImageCastType::Pointer imageCast = ImageCastType::New();imageCast->SetInput(reader->GetOutput());try{imageCast->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file cast111!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}typedef itk::ImageFileWriter<OutputImageType> Writer1Type;Writer1Type::Pointer writer1 = Writer1Type::New();typedef itk::BMPImageIO bmpType;bmpType::Pointer bmpIO = bmpType::New();writer1->SetImageIO(bmpIO);writer1->SetFileName("tran.bmp");writer1->SetInput(imageCast->GetOutput());try{writer1->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file writer111!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}//----------------------------------亮度調節后的bmptypedef itk::RescaleIntensityImageFilter<InputImageType,OutputImageType> RescaleFilterType;RescaleFilterType::Pointer rescaler = RescaleFilterType::New();rescaler->SetOutputMinimum(0);rescaler->SetOutputMaximum(255);typedef itk::ImageFileWriter<OutputImageType> Writer2Type;Writer2Type::Pointer writer2 = Writer2Type::New();//typedef itk::BMPImageIO bmpType1;//bmpType1::Pointer bmpIO1 = bmpType1::New();writer2->SetFileName("tran2.dcm");rescaler->SetInput(reader->GetOutput());writer2->SetInput(rescaler->GetOutput());writer2->UseInputMetaDataDictionaryOff();writer2->SetImageIO(gdcmImageIo);try{writer2->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file writer222!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}//------------------------------------------------再將轉換好的dcm圖像讀入并轉換成BMPtypedef unsigned char InputPixelType1;typedef itk::Image<InputPixelType1,inputDimension> InputImageType1;typedef itk::ImageFileReader < InputImageType1 > ReaderType1;ReaderType1::Pointer reader2 = ReaderType1::New();reader2->SetFileName("tran2.dcm");try{reader2->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file reader222!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}//注意新的轉換后的圖像的像素類型的匹配typedef itk::CastImageFilter<InputImageType1,OutputImageType> ImageCastType2;ImageCastType2::Pointer imageCast2 = ImageCastType2::New();imageCast2->SetInput(reader2->GetOutput());try{imageCast2->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file Cast22222222!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}typedef itk::ImageFileWriter<OutputImageType> Writer3Type;Writer3Type::Pointer writer3 = Writer3Type::New();typedef itk::BMPImageIO bmpType;bmpType::Pointer bmpIO2 = bmpType::New();writer3->SetImageIO(bmpIO2);writer3->SetFileName("tran2222.bmp");writer3->SetInput(imageCast2->GetOutput());try{writer3->Update();}catch (itk::ExceptionObject &e){std::cerr<<"error in file writer33333!!"<<std::endl;std::cerr<<e<<std::endl;return EXIT_FAILURE;}return 0;
}
 
 
                            總結
                            
                                以上是生活随笔為你收集整理的ITK实现DICM图像转换成BMP图像的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。