X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvImageReader.cxx;h=25e235a08edb3b713b347b5a5a1147aaed7fb061;hb=7a5d28f9a67bbf9f6eec89368010a5a08ca0838d;hp=1f33fc72b2abe997ff119adf7f90b156edc7b0e7;hpb=4d98c6119c03a33d32830d6c13707600a047a32c;p=clitk.git diff --git a/vv/vvImageReader.cxx b/vv/vvImageReader.cxx index 1f33fc7..25e235a 100644 --- a/vv/vvImageReader.cxx +++ b/vv/vvImageReader.cxx @@ -150,7 +150,6 @@ void vvImageReader::ReadNkiImageTransform() mImage->GetTransform()->GetMatrix()->SetElement(i,3,10*mImage->GetTransform()->GetMatrix()->GetElement(i,3)); mImage->GetTransform()->Inverse(); - mImage->UpdateReslice(); } } } @@ -167,10 +166,35 @@ void vvImageReader::ReadMatImageTransform() f.close(); itk::Matrix itkMat = clitk::ReadMatrix3D(filename); + + vtkSmartPointer matrix = vtkSmartPointer::New(); + matrix->Identity(); 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(); + matrix->SetElement(j,i,itkMat[j][i]); + + // RP: 14/03/2011 + // For some reason, the transformation matrix given in the MHD + // file is inverted wrt the transformation given in the MAT file. + // We don't really know where the inversion takes place inside + // VTK or ITK. For what we could see in VV, the transformation + // given in the MHD file seems "more correct" than that given in + // the MAT file. For this reason, we invert the matrix read from + // the MAT file before concatenating it to the current transformation. + // Still, it would be nice to find out what happens exactly between + // VTK and ITK... + // + vtkSmartPointer inv_matrix = vtkSmartPointer::New(); + if (matrix->Determinant() == 0) + { + vtkGenericWarningMacro("Matrix in " << filename.c_str() << " cannot be inverted (determinant = 0)"); + } + else + matrix->Invert(*matrix, *inv_matrix); + + mImage->GetTransform()->PostMultiply(); + mImage->GetTransform()->Concatenate(inv_matrix); + mImage->GetTransform()->Update(); } } //------------------------------------------------------------------------------