/*========================================================================= Program: clitk Module: $RCSfile: clitkSignalMeanPositionFilter.cxx,v $ Language: C++ Date: $Date: 2010/03/03 12:51:06 $ Version: $Revision: 1.7 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "clitkSignalMeanPositionFilter.h" #include //--------------------------------------------------------------------- void clitk::SignalMeanPositionFilter::SetParameters(args_info_clitkSignalMeanPositionTracking & args) { args_info = args; mEtaIsSet = false; mOutputFilenameIsSet = false; mOutputResidualFilenameIsSet = false; mInput.Read(args_info.input_arg); mAugmentationDelay = args_info.delay_arg; mIsAdaptiveMethod = false; mWindowLength = -1; mValidationWithRealPhase = false; mUseLearnedDeltaPhase = false; if (args_info.eta_given) { mEta = args_info.eta_arg; mEtaIsSet = true; } mMaxIteration = args_info.iter_arg; if (args_info.output_given) { mOutputFilenameIsSet = true; mOutputFilename = args_info.output_arg; } if (args_info.residual_given) { mOutputResidualFilenameIsSet = true; mOutputResidualFilename = args_info.residual_arg; } if (args_info.augmented_given) { mOutputAugmentedFilenameIsSet = true; mOutputAugmentedFilename = args_info.augmented_arg; } mVerbose = args_info.verbose_flag; mVerboseIteration = args_info.verbose_iteration_flag; if (args_info.L_given) { mIsAdaptiveMethod = true; mWindowLength = args_info.L_arg; } if (args_info.phase_given) { mValidationWithRealPhase = true; mInputPhaseFilename = args_info.phase_arg; mInputPhase.Read(mInputPhaseFilename); } mNumberOfIsoPhase = args_info.nbiso_arg; if (args_info.delta_given) { mUseLearnedDeltaPhase = true; mLearnIsoPhaseDelta.Read(args_info.delta_arg); mNumberOfIsoPhase = mLearnIsoPhaseDelta.size(); } // DEBUG if (args_info.phase_given) { std::cout << "PLEASE DO NO USE THIS OPTION --phase YET ..." << std::endl; exit(0); } if (args_info.delta_given) { std::cout << "PLEASE DO NO USE THIS OPTION --delta YET ..." << std::endl; exit(0); } } //--------------------------------------------------------------------- //--------------------------------------------------------------------- void clitk::SignalMeanPositionFilter::Update() { // Compute augmented space if (mVerbose) { std::cout << "Computing augmented space with delay = " << mAugmentationDelay << ", number of samples is " << mInput.size()-mAugmentationDelay << std::endl; } mInput.ComputeAugmentedSpace(mAugmentedInputX, mAugmentedInputY, mAugmentationDelay); // Output augmented state if (mOutputAugmentedFilenameIsSet) { std::ofstream os; openFileForWriting(os, mOutputAugmentedFilename); for(unsigned int i=0; i<(unsigned int)mAugmentedInputX.size(); i++) { os << mAugmentedInputX[i] << " " << mAugmentedInputY[i] << std::endl; } os.close(); } // Initial starting ellipse Ellipse An; // starting point if (!mEtaIsSet) mEta = -1; DD(mWindowLength); if (mWindowLength == -1) { mWindowLength = mAugmentedInputY.size(); } An.InitialiseEllipseFitting(mEta, mWindowLength, mAugmentedInputX, mAugmentedInputY); mEta = An.GetEta(); if (mVerbose) { std::cout << "Eta is " << mEta << std::endl; } Ellipse AnInitial(An); if (mVerbose) { std::cout << "Set initial ellipse to c=" << An.ComputeCenter() << " and axes=" << An.ComputeSemiAxeLengths() << std::endl; } // Fitting method if (mIsAdaptiveMethod) { AdaptiveFitEllipse(An); } else FitEllipse(An); // Output if (mVerbose) { std::cout << "Result is " << An << std::endl; std::cout << "Center is " << An.ComputeCenter() << std::endl; std::cout << "SemiAxis are " << An.ComputeSemiAxeLengths() << std::endl; std::cout << "Angle is " << rad2deg(An.ComputeAngleInRad()) << " deg" << std::endl; } if (mOutputFilenameIsSet) { std::ofstream os; openFileForWriting(os, mOutputFilename); std::vector phase; ComputeIsoPhase(mListOfEllipses, phase, mCycles); //int currentCycle = 0; for (unsigned int i=0; i1.0) phase[j] = 1.0-phase[j]; DD(phase[j]); j++; } } else j+=cycles[0]; } */ for (unsigned int i=0; i