X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvImageReader.cxx;h=17ed757b7af7a13b904c53ed1deb9984a7f39afe;hb=50c57f15fa84d140994a8239ce84191ded47a985;hp=faa22b85b73b3ba9868e749742f5cf4e7ebfd2ec;hpb=424c311bc966bc93f73022d7371a6249b00a51b6;p=clitk.git
diff --git a/vv/vvImageReader.cxx b/vv/vvImageReader.cxx
index faa22b8..17ed757 100644
--- a/vv/vvImageReader.cxx
+++ b/vv/vvImageReader.cxx
@@ -1,119 +1,171 @@
/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
- Program: vv
- Module: $RCSfile: vvImageReader.cxx,v $
- Language: C++
- Date: $Date: 2010/01/26 15:04:33 $
- Version: $Revision: 1.2 $
- Author : Pierre Seroul (pierre.seroul@gmail.com)
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
-Copyright (C) 2008
-Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
-CREATIS-LRMN http://www.creatis.insa-lyon.fr
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, version 3 of the License.
+ It is distributed under dual licence
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-=========================================================================*/
-#ifndef vvImageReader_CXX
-#define vvImageReader_CXX
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ ======================================================================-====*/
+#ifndef VVIMAGEREADER_CXX
+#define VVIMAGEREADER_CXX
#include
#include
#include "vvImageReader.h"
#include "vvImageReader.txx"
+#include "clitkTransformUtilities.h"
-
-//====================================================================
+//------------------------------------------------------------------------------
vvImageReader::vvImageReader()
{
- mImage = NULL;
- mInputFilenames.resize(0);
- mLastError = "";
- mType = UNDEFINEDIMAGETYPE;
+ mImage = NULL;
+ mInputFilenames.resize(0);
+ mLastError = "";
+ mType = UNDEFINEDIMAGETYPE;
}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
vvImageReader::~vvImageReader() { }
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
void vvImageReader::Update()
{
- Update(mType);
+ Update(mType);
}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
void vvImageReader::Update(LoadedImageType type)
{
- itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(mInputFilenames[0].c_str(), itk::ImageIOFactory::ReadMode);
- if (!reader) {
- mLastError="Unable to read file.";
- }
- else {
- reader->SetFileName(mInputFilenames[0]);
- reader->ReadImageInformation();
- if (mInputFilenames.size() > 1)
- Update(reader->GetNumberOfDimensions()+1,reader->GetComponentTypeAsString(reader->GetComponentType()),type);
- else
- Update(reader->GetNumberOfDimensions(),reader->GetComponentTypeAsString(reader->GetComponentType()),type);
- }
+ itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(mInputFilenames[0].c_str(), itk::ImageIOFactory::ReadMode);
+ if (!reader) {
+ mLastError="Unable to read file.";
+ } else {
+ reader->SetFileName(mInputFilenames[0]);
+ reader->ReadImageInformation();
+ if (mInputFilenames.size() > 1)
+ Update(reader->GetNumberOfDimensions()+1,reader->GetComponentTypeAsString(reader->GetComponentType()),type);
+ else
+ Update(reader->GetNumberOfDimensions(),reader->GetComponentTypeAsString(reader->GetComponentType()),type);
+ }
}
+//------------------------------------------------------------------------------
+
-//====================================================================
-void vvImageReader::Update(int dim,std::string inputPixelType, LoadedImageType type) {
- //CALL_FOR_ALL_DIMS(dim,UpdateWithDim,inputPixelType);
- mType = type;
- mDim = dim;
- mInputPixelType=inputPixelType;
- this->start(); //Start heavy read operation in a separate thread
- while (this->isRunning())
- {
- qApp->processEvents();
- this->wait(50);
- }
+//------------------------------------------------------------------------------
+void vvImageReader::Update(int dim,std::string inputPixelType, LoadedImageType type)
+{
+ //CALL_FOR_ALL_DIMS(dim,UpdateWithDim,inputPixelType);
+ mType = type;
+ mDim = dim;
+ mInputPixelType=inputPixelType;
+ this->start(); //Start heavy read operation in a separate thread
+ while (this->isRunning()) {
+ qApp->processEvents();
+ this->wait(50);
+ }
}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
void vvImageReader::run()
{
- switch(mDim)
- {
- case 2:
- UpdateWithDim<2>(mInputPixelType);
- break;;
- case 3:
- UpdateWithDim<3>(mInputPixelType);
- break;;
- case 4:
- UpdateWithDim<4>(mInputPixelType);
- break;;
- default:
- std::cerr << "dimension unknown in Update ! " << std::endl;
- }
+ switch(mDim) {
+ case 2:
+ UpdateWithDim<2>(mInputPixelType);
+ break;;
+ case 3:
+ UpdateWithDim<3>(mInputPixelType);
+ break;;
+ case 4:
+ UpdateWithDim<4>(mInputPixelType);
+ break;;
+ default:
+ std::cerr << "dimension unknown in Update ! " << std::endl;
+ }
}
-//====================================================================
+//------------------------------------------------------------------------------
+
-//====================================================================
-/*void vvImageReader::Extract(int dim, std::string inputPixelType, int slice) {
- CALL_FOR_ALL_DIMS(dim, ExtractWithDim, inputPixelType, slice);
-}*/
-//====================================================================
+//------------------------------------------------------------------------------
void vvImageReader::SetInputFilename(const std::string & filename)
{
- mInputFilenames.resize(0);
- mInputFilenames.push_back(filename);
+ mInputFilenames.resize(0);
+ mInputFilenames.push_back(filename);
}
+//------------------------------------------------------------------------------
-//====================================================================
-void vvImageReader::SetInputFilenames(const std::vector & filenames) {
- mInputFilenames = filenames;
+
+//------------------------------------------------------------------------------
+void vvImageReader::SetInputFilenames(const std::vector & filenames)
+{
+ mInputFilenames = 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");
+ try {
+ readerTransfo->Update();
+ } catch( itk::ExceptionObject & err ) {
+ bRead=false;
+ }
+
+ if (bRead) {
+ //Transpose matrix (NKI format)
+ for(int j=0; j<4; j++)
+ for(int i=0; i<4; i++)
+ mImage->GetTransform()->GetMatrix()->SetElement(j,i,readerTransfo->GetOutput()->GetBufferPointer()[4*i+j]);
+
+ //From cm to mm
+ for(int i=0; i<3; i++)
+ mImage->GetTransform()->GetMatrix()->SetElement(i,3,10*mImage->GetTransform()->GetMatrix()->GetElement(i,3));
+
+ mImage->GetTransform()->Inverse();
+ mImage->UpdateReslice();
+ }
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+//Read transformation in ASCII format
+void vvImageReader::ReadMatImageTransform()
+{
+ std::string filename(mInputFilenames[0]+".mat");
+ std::ifstream f(filename.c_str());
+ if(f.is_open()) {
+ f.close();
+
+ itk::Matrix itkMat = clitk::ReadMatrix3D(filename);
+ for(int j=0; j<4; j++)
+ for(int i=0; i<4; i++)
+ mImage->GetTransform()->GetMatrix()->SetElement(j,i,itkMat[j][i]);
+ mImage->UpdateReslice();
+ }
+}
+//------------------------------------------------------------------------------
#endif