X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=tools%2Fpjrec.cpp;h=bab43e7a36ac1c947cca57c31b4467aa3ffc7fec;hb=d158a6da6ec776fe98961f73f2ea74cf55de4700;hp=dc004844a5e4157e68c251ec30842ea3f3f92bc1;hpb=1fd4f7cc977b9f1499716de10d15656bd50f4816;p=ctsim.git diff --git a/tools/pjrec.cpp b/tools/pjrec.cpp index dc00484..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.1 2000/07/13 07:01:35 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; @@ -131,11 +136,11 @@ pjrec_main (int argc, char * argv[]) int optZeroPad = 0; int optTrace = TRACE_NONE; double optFilterParam = -1; - string optFilterName = SignalFilter::FILTER_ABS_BANDLIMIT_STR; - string optFilterMethodName = SignalFilter::FILTER_METHOD_CONVOLUTION_STR; - string optInterpName = Backprojector::INTERP_LINEAR_STR; - string optBackprojName = Backprojector::BPROJ_IDIFF2_STR; - // string optFilterMethodName = SignalFilter::FILTER_METHOD_CONVOLUTION_STR; + 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; int nx, ny; #ifdef HAVE_MPI @@ -175,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); @@ -192,6 +197,9 @@ pjrec_main (int argc, char * argv[]) return(1); } break; + case O_BACKPROJ: + optBackprojName = optarg; + break; case O_VERBOSE: optVerbose = 1; break; @@ -199,14 +207,14 @@ pjrec_main (int argc, char * argv[]) optDebug = 1; break; case O_TRACE: - if ((optTrace = convertTraceNameToID(optarg)) == TRACE_INVALID) { + if ((optTrace = TraceLevel::convertTraceNameToID(optarg)) == TRACE_INVALID) { pjrec_usage(argv[0]); return (1); } break; case O_VERSION: #ifdef VERSION - cout << "Version " << VERSION << endl; + cout << "Version " << VERSION << endl << g_szIdStr << endl; #else cout << "Unknown version number" << endl; #endif @@ -240,7 +248,7 @@ pjrec_main (int argc, char * argv[]) filterDesc << optFilterName; ostringstream label; - label << "pjrec: " << nx << "x" << ny << ", " << filterDesc.str() << ", " << optInterpName << ", preinterpolation=" << optPreinterpolationFactor << ", " << optBackprojName; + label << "pjrec: " << nx << "x" << ny << ", " << filterDesc.str() << ", " << optInterpName << ", preinterpolationFactor=" << optPreinterpolationFactor << ", " << optBackprojName; remark = label.str(); if (optVerbose) @@ -310,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"); @@ -319,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