X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=tools%2Fpjrec.cpp;h=bab43e7a36ac1c947cca57c31b4467aa3ffc7fec;hb=d158a6da6ec776fe98961f73f2ea74cf55de4700;hp=03ee9e874520770e76e160dc5673a739c0165708;hpb=286d655a25df2668bd65ad365676c6ecc94415a1;p=ctsim.git diff --git a/tools/pjrec.cpp b/tools/pjrec.cpp index 03ee9e8..bab43e7 100644 --- a/tools/pjrec.cpp +++ b/tools/pjrec.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: pjrec.cpp,v 1.5 2000/07/22 15:45:33 kevin Exp $ +** $Id: pjrec.cpp,v 1.10 2000/08/03 09:57:29 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -29,7 +29,7 @@ #include "timer.h" -enum {O_INTERP, O_FILTER, O_FILTER_METHOD, O_ZEROPAD, O_FILTER_PARAM, O_BACKPROJ, O_PREINTERPOLATION_FACTOR, O_VERBOSE, O_TRACE, O_HELP, O_DEBUG, O_VERSION}; +enum {O_INTERP, O_FILTER, O_FILTER_METHOD, O_ZEROPAD, O_FILTER_PARAM, O_FREQUENCY_FILTER, O_BACKPROJ, O_PREINTERPOLATION_FACTOR, O_VERBOSE, O_TRACE, O_HELP, O_DEBUG, O_VERSION}; static struct option my_options[] = { @@ -38,6 +38,7 @@ static struct option my_options[] = {"filter", 1, 0, O_FILTER}, {"filter-method", 1, 0, O_FILTER_METHOD}, {"zeropad", 1, 0, O_ZEROPAD}, + {"frequency-filter", 1, 0, O_FREQUENCY_FILTER}, {"filter-param", 1, 0, O_FILTER_PARAM}, {"backproj", 1, 0, O_BACKPROJ}, {"trace", 1, 0, O_TRACE}, @@ -48,6 +49,7 @@ static struct option my_options[] = {0, 0, 0, 0} }; +static const char* g_szIdStr = "$Id: pjrec.cpp,v 1.10 2000/08/03 09:57:29 kevin Exp $"; void pjrec_usage (const char *program) @@ -89,6 +91,9 @@ pjrec_usage (const char *program) #endif cout << " --zeropad n Set zeropad level (default = 0)\n"; cout << " set n to number of powers to two to pad\n"; + cout << " --frequency-filter Set type of frequency filter\n"; + cout << " direct_frequency Use direct frequency filter\n"; + cout << " inverse_spatial Use inverse fourier transform of spatial filter\n"; cout << " --backproj Backprojection Method" << endl; cout << " trig Trigometric functions at every point" << endl; cout << " table Trigometric functions with precalculated table" << endl; @@ -133,6 +138,7 @@ pjrec_main (int argc, char * argv[]) double optFilterParam = -1; string optFilterName (SignalFilter::convertFilterIDToName (SignalFilter::FILTER_ABS_BANDLIMIT)); string optFilterMethodName (SignalFilter::convertFilterMethodIDToName (SignalFilter::FILTER_METHOD_CONVOLUTION)); + string optFrequencyFilterName (SignalFilter::convertFrequencyFilterIDToName (SignalFilter::FREQUENCY_FILTER_INVERSE_SPATIAL)); string optInterpName (Backprojector::convertInterpIDToName (Backprojector::INTERP_LINEAR)); string optBackprojName (Backprojector::convertBackprojectIDToName (Backprojector::BPROJ_IDIFF3)); int optPreinterpolationFactor = 1; @@ -174,8 +180,8 @@ pjrec_main (int argc, char * argv[]) case O_FILTER_METHOD: optFilterMethodName = optarg; break; - case O_BACKPROJ: - optBackprojName = optarg; + case O_FREQUENCY_FILTER: + optFrequencyFilterName = optarg; break; case O_FILTER_PARAM: optFilterParam = strtod(optarg, &endptr); @@ -191,6 +197,9 @@ pjrec_main (int argc, char * argv[]) return(1); } break; + case O_BACKPROJ: + optBackprojName = optarg; + break; case O_VERBOSE: optVerbose = 1; break; @@ -205,7 +214,7 @@ pjrec_main (int argc, char * argv[]) break; case O_VERSION: #ifdef VERSION - cout << "Version " << VERSION << endl; + cout << "Version " << VERSION << endl << g_szIdStr << endl; #else cout << "Unknown version number" << endl; #endif @@ -309,7 +318,7 @@ pjrec_main (int argc, char * argv[]) #ifdef HAVE_MPI TimerCollectiveMPI timerReconstruct (mpiWorld.getComm()); - projLocal.reconstruct (*imLocal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace); + projLocal.reconstruct (*imLocal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optFrequencyFilterName.c_str(), optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace); if (optVerbose) timerReconstruct.timerEndAndReport ("Time to reconstruct"); @@ -318,7 +327,7 @@ pjrec_main (int argc, char * argv[]) if (optVerbose) timerReduce.timerEndAndReport ("Time to reduce image"); #else - projGlobal.reconstruct (*imGlobal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace); + projGlobal.reconstruct (*imGlobal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optFrequencyFilterName.c_str(), optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace); #endif #ifdef HAVE_MPI