From: srit Date: Thu, 22 Apr 2010 13:04:21 +0000 (+0000) Subject: Added ReadNkiImageTransform to read XVI image transforms (only enabled in CLITK_EXPER... X-Git-Tag: v1.2.0~701 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=1a9df303827cc1ecccfe7deb5a300100e6c71978;p=clitk.git Added ReadNkiImageTransform to read XVI image transforms (only enabled in CLITK_EXPERIMENTAL) --- diff --git a/vv/vvImageReader.cxx b/vv/vvImageReader.cxx index 7cc0e56..a61c366 100644 --- a/vv/vvImageReader.cxx +++ b/vv/vvImageReader.cxx @@ -117,5 +117,43 @@ void vvImageReader::SetInputFilenames(const std::vector & filenames } //------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +//Read transformation in NKI format (Xdr, transposed, cm) +void vvImageReader::ReadNkiImageTransform() +{ + bool bRead=true; + typedef itk::ImageFileReader< itk::Image< double, 2 > > MatrixReaderType; + MatrixReaderType::Pointer readerTransfo = MatrixReaderType::New(); + readerTransfo->SetFileName(mInputFilenames[0]+".MACHINEORIENTATION"); +DD(mInputFilenames[0]+".MACHINEORIENTATION"); + try + { readerTransfo->Update(); + } + catch( itk::ExceptionObject & err ) + { bRead=false; + } + + if (bRead) + { double mat[16]; + + //Transpose matrix (NKI format) + for(int j=0; j<4; j++) + for(int i=0; i<4; i++) + mat[4*j+i]=readerTransfo->GetOutput()->GetBufferPointer()[4*i+j]; + + //From cm to mm + for(int i=0; i<3; i++) + mat[4*i+3]*=10; + + //Set Transformation + vtkSmartPointer pt = vtkSmartPointer::New(); + pt->SetMatrix( mat ); + pt->Inverse(); +DD(*pt); + mImage->SetTransform( pt ); + } +} +//------------------------------------------------------------------------------ #endif diff --git a/vv/vvImageReader.h b/vv/vvImageReader.h index 702af66..72d7708 100644 --- a/vv/vvImageReader.h +++ b/vv/vvImageReader.h @@ -74,6 +74,8 @@ protected: int mDim; std::string mInputPixelType; + //==================================================================== + void ReadNkiImageTransform(); private: vvImage::Pointer mImage; diff --git a/vv/vvImageReader.txx b/vv/vvImageReader.txx index cfa389a..b6539b8 100644 --- a/vv/vvImageReader.txx +++ b/vv/vvImageReader.txx @@ -22,8 +22,11 @@ #include #include #include +#include + +#include + #include "clitkCommon.h" -#include "itkImageToVTKImageFilter.h" #include "vvFromITK.h" #include "vvConstants.h" @@ -48,6 +51,10 @@ void vvImageReader::UpdateWithDim(std::string InputPixelType) { UpdateWithDimAndInputPixelType(); else std::cerr << "Error, input pixel type : " << InputPixelType << " unknown !" << std::endl; + + if (CLITK_EXPERIMENTAL) + if (mLastError.size()==0) + ReadNkiImageTransform(); } //----------------------------------------------------------------------------