X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fct.h;h=2b59b411021317b4d663bb16d35cee9e707c8ac7;hp=937a885bcfdbfc5b0473686e0cf5f0cb86dea51a;hb=007a78a5e3a043cbc7e2777ab033b81b8acbbe71;hpb=99dd1d6ed10db1f669a5fe6af71225a50fc0ddfb diff --git a/include/ct.h b/include/ct.h index 937a885..2b59b41 100644 --- a/include/ct.h +++ b/include/ct.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ct.h,v 1.16 2000/06/18 10:27:11 kevin Exp $ +** $Id: ct.h,v 1.17 2000/06/19 15:48:23 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 @@ -139,9 +139,165 @@ using namespace std; #include "phantom.h" #include "projections.h" #include "scanner.h" -#include "ir.h" + +//----------------------------------------------------------------------// +// USER SYMBOLS // +//----------------------------------------------------------------------// + +// Filter types +static const char O_FILTER_ABS_BANDLIMIT_STR[]= "abs_bandlimit"; +static const char O_FILTER_ABS_SINC_STR[]= "abs_sinc"; +static const char O_FILTER_ABS_COS_STR[]= "abs_cos"; +static const char O_FILTER_ABS_HAMMING_STR[]= "abs_hamming"; +static const char O_FILTER_SHEPP_STR[]= "shepp"; +static const char O_FILTER_BANDLIMIT_STR[]= "bandlimit"; +static const char O_FILTER_SINC_STR[]= "sinc"; +static const char O_FILTER_COS_STR[]= "cos"; +static const char O_FILTER_HAMMING_STR[]= "hamming"; +static const char O_FILTER_TRIANGLE_STR[]= "triangle"; + +typedef enum { + FILTER_BANDLIMIT, + FILTER_SINC, + FILTER_G_HAMMING, + FILTER_COSINE, + FILTER_TRIANGLE, + FILTER_ABS_BANDLIMIT, // filter times |x| + FILTER_ABS_SINC, + FILTER_ABS_G_HAMMING, + FILTER_ABS_COSINE, + FILTER_SHEPP +} FilterType; + + +// Function domains +static const char D_FREQ_STR[]= "freq"; +static const char D_SPATIAL_STR[]= "spatial"; + +typedef enum { + D_FREQ = 1, + D_SPATIAL +} DomainType; + + +/* interpolation methods */ +static const char O_INTERP_NEAREST_STR[]= "nearest"; +static const char O_INTERP_LINEAR_STR[]= "linear"; +static const char O_INTERP_BSPLINE_STR[]= "bspline"; + +#undef HAVE_BSPLINE_INTERP +typedef enum { // Interpolation methods + I_NEAREST = 1, // Nearest neighbor +#if HAVE_BSPLINE_INTERP + I_BSPLINE, + I_1BSPLINE, // 1st order B-Spline + I_2BSPLINE, + I_3BSPLINE, +#endif + I_LINEAR // Linear interpolation +} InterpolationType; + + +// Trace levels +static const char O_TRACE_NONE_STR[]= "none"; +static const char O_TRACE_TEXT_STR[]= "text"; +static const char O_TRACE_PHM_STR[]= "phm"; +static const char O_TRACE_RAYS_STR[]= "rays"; +static const char O_TRACE_PLOT_STR[]= "plot"; +static const char O_TRACE_CLIPPING_STR[]= "clipping"; + +enum { + TRACE_NONE, /* No tracing */ + TRACE_TEXT, /* Minimal status */ + TRACE_PHM, /* Show phantom */ + TRACE_RAYS, /* Show all rays */ + TRACE_PLOT, /* Plot raysums */ + TRACE_CLIPPING /* Plot clipping */ +}; + +// Standard phantomsa +static const char O_PHM_HERMAN_STR[]= "herman"; +static const char O_PHM_ROWLAND_STR[]= "rowland"; +static const char O_PHM_BROWLAND_STR[]= "browland"; +static const char O_PHM_UNITPULSE_STR[]= "unitpulse"; +typedef enum { + O_PHM_HERMAN, /* Herman head phantom */ + O_PHM_ROWLAND, /* Rowland head phantom */ + O_PHM_BROWLAND, /* Bordered Rowland head phantom */ + O_PHM_UNITPULSE /* Unit pulse phantom */ +} PhantomType; + +// Backproject types +static const char O_BPROJ_TRIG_STR[]= "trig"; +static const char O_BPROJ_TABLE_STR[]= "table"; +static const char O_BPROJ_DIFF_STR[]= "diff"; +static const char O_BPROJ_DIFF2_STR[]= "diff2"; +static const char O_BPROJ_IDIFF2_STR[]= "idiff2"; + +typedef enum { + O_BPROJ_TRIG, + O_BPROJ_TABLE, + O_BPROJ_DIFF, + O_BPROJ_DIFF2, + O_BPROJ_IDIFF2 +} BackprojType; + +// Convolution symmetries +typedef enum { + FUNC_EVEN = 1, // function types, f[-n] = f[n] + FUNC_ODD, // f[-n] = -f[n] + FUNC_BOTH // function has both odd & even components +} FunctionSymmetry; + + + #include "backprojectors.h" +/************************************************************************* + * FUNCTION DECLARATIONS + ************************************************************************/ + +// convolve.cpp +double convolve (const double f1[], const double f2[], const double dx, const int n, const int np, const FunctionSymmetry func_type); + +// dialogs.cpp +bool phm_add_pelem_kb (Phantom& phm); +const Phantom& phm_select (Phantom& phm); +int interpolation_select (void); +int filter_select (double *filter_param); + +// filter.cpp +double *filter_generate (const FilterType filt_type, double bw, double xmin, double xmax, int n, double param, const DomainType domain, int numint); +double filter_spatial_response_calc (int filt_type, double x, double bw, double param, int n); +double filter_spatial_response_analytic (int filt_type, double x, double bw, double param); +double filter_frequency_response (int filt_type, double u, double bw, double param); +double sinc (double x, double mult); +double integral_abscos(double u, double w); + +// options.cpp +int opt_set_trace(const char *optarg); +const char *name_of_phantom(const int phmid); +int opt_set_phantom(const char *optarg); +InterpolationType opt_set_interpolation(const char *optarg); +const char *name_of_interpolation(int interp_type); +FilterType opt_set_filter(const char *optarg); +const char *name_of_filter(const int filter); +DomainType opt_set_filter_domain(const char *optarg); +const char *name_of_filter_domain(const DomainType domain); +BackprojType opt_set_backproj(const char *optarg); +const char *name_of_backproj(const BackprojType backproj); + +// From phm2image.cpp +void phm_to_imagefile (const Phantom& phm, ImageFile& im, const int col_start, const int col_count, const int nsample, const int trace); + +// image.cpp +void image_filter_response(ImageFile& im, const DomainType domain, double bw, const FilterType filt_type, double filt_param, const int opt_trace); +int image_display (const ImageFile& im); +int image_display_scale (const ImageFile& im, const int scale, const double pmin, const double pmax); + +// From reconstr.cpp +ImageFile& proj_reconst (ImageFile& im, Projections& rs, const FilterType filt_type, double filt_param, InterpolationType interp_type, int interp_param, const BackprojType backproj_type, int const ir_trace); + #endif