X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fvtk%2Fsrc%2FbbvtkRescaleSlopeIntercept.cxx;h=117b97931a3c68e7634a99f9cb074b2d4e5ceb6b;hb=fd579f268efe95807b8800d073ac4e9b8645aea2;hp=8e9ea4c06768d31278b6dc695611f917bb9c7e4d;hpb=5aadf601c2cac6a4b998840f66fef9ba26ae67cd;p=bbtk.git diff --git a/packages/vtk/src/bbvtkRescaleSlopeIntercept.cxx b/packages/vtk/src/bbvtkRescaleSlopeIntercept.cxx index 8e9ea4c..117b979 100644 --- a/packages/vtk/src/bbvtkRescaleSlopeIntercept.cxx +++ b/packages/vtk/src/bbvtkRescaleSlopeIntercept.cxx @@ -1,8 +1,38 @@ -//===== +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + +//===== // Don't edit this file. This file is generated from xml description.. //===== #include "bbvtkRescaleSlopeIntercept.h" #include "bbvtkPackage.h" + +#include "bbtkStaticLecture.h" + namespace bbvtk { @@ -28,85 +58,80 @@ void RescaleSlopeIntercept::Process() // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " <GetScalarType(); - else if (bbGetInputOutputFormat()=="VTK_BIT") outputformat = VTK_BIT; - else if (bbGetInputOutputFormat()=="VTK_CHAR") outputformat = VTK_CHAR; - else if (bbGetInputOutputFormat()=="VTK_SIGNED_CHAR") outputformat = VTK_SIGNED_CHAR; - else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_CHAR") outputformat = VTK_UNSIGNED_CHAR; - else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_SHORT") outputformat = VTK_UNSIGNED_SHORT; - else if (bbGetInputOutputFormat()=="VTK_INT") outputformat = VTK_INT; - else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_INT") outputformat = VTK_UNSIGNED_INT; - else if (bbGetInputOutputFormat()=="VTK_LONG") outputformat = VTK_LONG; - else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_LONG") outputformat = VTK_UNSIGNED_LONG; - else if (bbGetInputOutputFormat()=="VTK_FLOAT") outputformat = VTK_FLOAT; - else if (bbGetInputOutputFormat()=="VTK_DOUBLE") outputformat = VTK_DOUBLE; + + + int outputformat = bbtkStaticLecture::GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() ); + - imageoutput->Initialize(); - imageoutput->SetScalarType( outputformat ); bbGetInputIn()->GetScalarRange(range); bbGetInputIn()->GetSpacing(spc); - imageoutput->SetSpacing( spc ); - bbGetInputIn()->GetWholeExtent(ext); - dim[0]=ext[1]-ext[0]+1; - dim[1]=ext[3]-ext[2]+1; - dim[2]=ext[5]-ext[4]+1; - imageoutput->SetDimensions( dim[0] , dim[1], dim[2] ); - imageoutput->AllocateScalars(); - + bbGetInputIn()->GetExtent( ext ); + double range0plusrange1 = range[0]+range[1]; - double difrange = range[1]-range[0]; - double newdifrange = B-A; + double difrange = range[1]-range[0]; + double newdifrange = B-A; - int i,j,k; - for (i=0; iGetScalarComponentAsDouble(i,j,k,0); - - if (bbGetInputType()==0) // Rescale Slope/Intercept - { - newValue = value*A+B; - } // if type 0 - - if (bbGetInputType()==1) // Invert - { - newValue = value*(-1) + (range0plusrange1); - } // if type 1 - - if (bbGetInputType()==2) // Redimension - { - newValue = ((value-range[0])/difrange)*newdifrange + A; - } // if type 2 - - if (bbGetInputType()==3) // Invert redimension - { - newValue = ((value*(-1)+range[1])/difrange)*newdifrange + A; - } // if type 3 - - imageoutput->SetScalarComponentFromDouble (i,j,k, 0, newValue); - } // for k - } // for j - } // for i - - bbSetOutputOut(imageoutput); - } // if + double shift; + double scale; + + if (bbGetInputType()==0) // Rescale Slope/Intercept + { + // newValue = value*A+B; + scale = A; + shift = B; + } // if type 0 + + if (bbGetInputType()==1) // Invert + { + // newValue = value*(-1) + (range0plusrange1); + scale=-1; + shift=range0plusrange1; + } // if type 1 + + if (bbGetInputType()==2) // Redimension + { + // newValue = ((value-range[0])/difrange)*newdifrange + A; + scale=newdifrange/difrange; + shift= A - (range[0]*newdifrange/difrange); + } // if type 2 + + if (bbGetInputType()==3) // Invert redimension + { + // newValue = ((value*(-1)+range[1])/difrange)*newdifrange + A; + scale=-newdifrange/difrange; + shift= A + (range[1]*newdifrange/difrange); + } // if type 3 + + filter1->SetInput( bbGetInputIn() ); + filter1->SetOutputScalarType( VTK_DOUBLE ); + filter1->SetShift( 0 ); + filter1->SetScale( scale ); + + filter2->SetInput( filter1->GetOutput() ); + filter2->SetOutputScalarType( outputformat ); + filter2->SetShift( shift ); + filter2->SetScale( 1 ); + + mchange->SetInput( filter2->GetOutput() ); + mchange->SetExtentTranslation( -ext[0], -ext[2], -ext[4] ); + mchange->SetOutputSpacing (spc); + mchange->Update(); //important + bbSetOutputOut( mchange->GetOutput() ); + + } else { + bbSetOutputOut( NULL ); + } // if bbGetInputIn } + //===== // Don't edit this file. This file is generated from xml description.. //===== @@ -120,7 +145,10 @@ void RescaleSlopeIntercept::bbUserSetDefaultValues() bbSetInputA(1); bbSetInputB(0); bbSetInputOutputFormat("SAME"); - imageoutput=NULL; + + filter1 = NULL; + filter2 = NULL; + mchange = NULL; } //===== // Don't edit this file. This file is generated from xml description.. @@ -133,7 +161,10 @@ void RescaleSlopeIntercept::bbUserInitializeProcessing() // but this is where you should allocate the internal/output pointers // if any - imageoutput = vtkImageData::New(); + filter1 = vtkImageShiftScale::New(); + filter2 = vtkImageShiftScale::New(); + mchange = vtkImageChangeInformation::New(); + } //===== @@ -146,8 +177,11 @@ void RescaleSlopeIntercept::bbUserFinalizeProcessing() // Here does nothing // but this is where you should desallocate the internal/output pointers // if any - imageoutput->Delete(); + mchange->Delete(); + filter1->Delete(); + filter2->Delete(); } + } // EO namespace bbvtk