TPCCLIB
Loading...
Searching...
No Matches
libtpcrec.h
Go to the documentation of this file.
1
5#ifndef _LIBTPCREC_H
6#define _LIBTPCREC_H
7/*****************************************************************************/
8
9/*****************************************************************************/
10#include "tpcclibConfig.h"
11/*****************************************************************************/
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <math.h>
16#include <float.h>
17#include <ctype.h>
18#include <time.h>
19/*****************************************************************************/
20#include "libtpcmisc.h"
21#include "libtpcimgio.h"
22/*****************************************************************************/
23
24/*****************************************************************************/
25/* ellipse */
26enum {ELLIPSE_STATUS_UNINITIALIZED, ELLIPSE_STATUS_INITIALIZED,
27 ELLIPSE_STATUS_OCCUPIED, ELLIPSE_STATUS_ERROR};
28
30extern int ELLIPSE_TEST;
32extern int ELLIPSE_VERBOSE;
33
37typedef struct {
39 char status;
40 /* Ellipse */
43 float semiaxis[2];
46 float center[2];
57 float value;
58} ELLIPSE;
59
60extern void ellipseInit(ELLIPSE *ell);
61extern void ellipseEmpty(ELLIPSE *ell);
62extern void ellipseInfo(ELLIPSE *ell);
63extern int ellipseAllocate(ELLIPSE *ell, int imgDim);
64extern int ellipseSetFromParams(
65 ELLIPSE *ell, int imgDim, float *semis, float *cent, float incli, float val
66);
67extern int ellipseReadEllipse(FILE *fp, ELLIPSE *ell);
68extern int ellipseSaveEllipse(ELLIPSE *ell, FILE *fp);
69extern float ellipseGetMajor(ELLIPSE *ell);
70extern float ellipseGetMinor(ELLIPSE *ell);
71extern float ellipseGetCenterX(ELLIPSE *ell);
72extern float ellipseGetCenterY(ELLIPSE *ell);
73extern float ellipseGetInclination(ELLIPSE *ell);
74extern int ellipseGetImgSize(ELLIPSE *ell);
75extern int ellipseGetValue(ELLIPSE *ell);
76extern int** ellipseGetArray(ELLIPSE *ell);
77extern int ellipseIsInside(ELLIPSE *ell, int row, int col);
78/*****************************************************************************/
79
80/*****************************************************************************/
81/* fbp */
82enum {FBP_FILTER_NONE, FBP_FILTER_RAMP, FBP_FILTER_BUTTER, FBP_FILTER_HANN,
83 FBP_FILTER_HAMM, FBP_FILTER_PARZEN, FBP_FILTER_SHEPP
84};
85
86extern int fbp(
87 float *sinogram, int rays, int views, int dim, int filter, float cutoff,
88 float *image
89);
90extern int imgFBP(
91 IMG *scn, IMG *img, int imgDim, float zoom, int filter, float cutoff,
92 float shiftX, float shiftY, float rotation, int verbose
93);
94extern int fbpMakeFilter(
95 float *sinFFT, float *cosFFT, float cutoff, int filter, int lenFFT, int views,
96 float *fbpFilter, int verbose
97);
99 float *real, float *imag, int direct, int n, float *sine, float *cosine
100);
101extern void fbp_back_proj(
102 float *prj, float *imgCorner, int imgDim, int view, int views,
103 int rays, float offsX, float offsY, float *sinB, float *sinBrot
104);
105extern void fbp_back_proj_round(
106 float *prj, float *imgOrigin, int imgDim, int view,
107 int views, int rays, float offsX, float offsY, float bpZoom,
108 float *sinB, float *sinBrot
109);
110/*****************************************************************************/
111
112/*****************************************************************************/
113/* mrp */
114extern int imgMRP(
115 IMG *scn, IMG *img, int imgDim, float zoom,
116 float shiftX, float shiftY, float rotation,
117 int maxIterNr, int skipPriorNr,
118 float beta, int maskDim, int osSetNr,
119 int verbose
120);
121extern void mrpUpdate(
122 float *coef, float *img, float *oimg, int n
123);
124extern void mrpProjectionCorrection(
125 float *measured, float *proj, float *correct,
126 int os_sets, int rays, int views
127);
128extern int mrp(
129 float *sinogram, int rays, int views,
130 int iter, int os_sets, int maskdim, float zoom, float beta, int skip_prior,
131 int dim, float *image, int verbose
132);
133/*****************************************************************************/
134
135/*****************************************************************************/
136/* mrprior */
137extern void do_prior(
138 float *img, float beta, float *med_coef, int dim, float small, int maskdim,
139 float *maxm
140);
141extern float med9(float *inp, int dim);
142extern float med21(float *inp, int dim);
143/*****************************************************************************/
144
145/*****************************************************************************/
146/* prmat */
147enum {PRMAT_STATUS_UNINITIALIZED, PRMAT_STATUS_INITIALIZED,
148 PRMAT_STATUS_BS_OCCUPIED, PRMAT_STATUS_LU_OCCUPIED, PRMAT_STATUS_PR_OCCUPIED,
149 PRMAT_STATUS_ERROR
150};
151enum {PRMAT_TYPE_ECAT931, PRMAT_TYPE_GE, PRMAT_TYPE_NA};
152enum {PRMAT_DMODE_01, PRMAT_DMODE_LOI, PRMAT_DMODE_EA, PRMAT_DMODE_NN};
153
155extern int PRMAT_TEST;
157extern int PRMAT_VERBOSE;
158
162typedef struct {
164 char status;
166 char type;
168 unsigned int viewNr;
170 unsigned int binNr;
172 unsigned int imgDim;
174 int mode;
177 int *prmatfov;
179 float min;
181 float max;
186
187 /* PRMAT LOOK-UP TABLE: for restoring lines of response intersecting a pixel.*/
189 unsigned int nrp;
194 unsigned int **lines;
196 unsigned int **_linesdata;
197
198 /* PRMAT DATA: for restoring lines of response in the projection matrix. */
200 unsigned int dimr;
204 unsigned int *dime;
208 unsigned short int ***fact;
210 unsigned short int ***_factdata;
211} PRMAT;
212
213extern void prmatInit(PRMAT *mat);
214extern void prmatEmpty(PRMAT *mat);
215extern int prmatAllocate(PRMAT *mat, int set, unsigned int rows, unsigned int *coords);
216/* GET procedures for PRMAT datatype. USE ONLY THESE FOR GETTING. */
217/* GET FUNCTIONS FOR THE PARAMETERS */
218extern unsigned int prmatGetNV(PRMAT *mat);
219extern unsigned int prmatGetNB(PRMAT *mat);
220extern unsigned int prmatGetID(PRMAT *mat);
221/* GET FUNCTIONS FOR ACCESSING LOOK-UP TABLE */
222extern unsigned int prmatGetPIX(PRMAT *mat);
223extern unsigned int prmatGetPixCoord(PRMAT *mat,int row);
224extern unsigned int prmatGetRays(PRMAT *mat,int row);
225extern unsigned int prmatGetBinView(PRMAT *mat, int row, int ind);
226/* GET FUNCTIONS FOR ACCESSING PROJECTION MATRIX BY A LINE OF RESPONSE.*/
227extern unsigned int prmatGetRows(PRMAT *mat);
228extern unsigned int prmatGetPixels(PRMAT *mat, int row);
229extern unsigned int prmatGetCoord(PRMAT *mat, int row, int pix);
230extern unsigned int prmatGetXCoord(PRMAT *mat, int row, int pix);
231extern unsigned int prmatGetYCoord(PRMAT *mat, int row, int pix);
232extern float prmatGetFactor(PRMAT *mat, int row, int pix);
233extern float prmatGetMajor(PRMAT *mat);
234extern float prmatGetMinor(PRMAT *mat);
235extern float prmatGetMin(PRMAT *mat);
236extern float prmatGetMax(PRMAT *mat);
237extern float prmatGetFactorSum(PRMAT *mat);
238extern float prmatGetFactorSqrSum(PRMAT *mat, int row);
239/* ARCHIVING METHODS */
240extern int prmatReadMatrix(char *fname, PRMAT *mat);
241extern int prmatSaveMatrix(PRMAT *mat);
242/*****************************************************************************/
243
244/*****************************************************************************/
245/* radon */
246enum {RADON_STATUS_UNINITIALIZED, RADON_STATUS_INITIALIZED,
247 RADON_STATUS_OCCUPIED, RADON_STATUS_ERROR
248};
250extern int RADON_TEST;
252extern int RADON_VERBOSE;
253
255typedef struct {
257 char status;
259 char mode;
265 int binNr;
267 int half;
274 float *sines;
275} RADON;
276
277extern void radonEmpty(RADON *radtra);
278extern int radonSet(RADON *radtra,int mode,int imgDim,int viewNr,int binNr);
279/* Get functions for Radon data */
280extern int radonGetMO(RADON *radtra);
281extern int radonGetID(RADON *radtra);
282extern int radonGetNV(RADON *radtra);
283extern int radonGetNB(RADON *radtra);
284extern float radonGetSD(RADON *radtra);
285extern int radonGetHI(RADON *radtra);
286extern int radonGetCB(RADON *radtra);
287extern float radonGetSin(RADON *radtra, int nr);
288/* THE ACTUAL TRANSFORM FUNCTIONS */
289extern int radonFwdTransform(
290 RADON *radtra, int set, int setNr, float *imgdata, float *scndata
291);
292extern int radonFwdTransformEA(
293 RADON *radtra, int set, int setNr, float *imgdata, float *scndata
294);
295extern int radonFwdTransformSA(
296 RADON *radtra, int set, int setNr, float *imgdata, float *scndata
297);
298extern int radonFwdTransformPRM(
299 PRMAT *mat, int set, int setNr, float *imgdata, float *scndata
300);
301extern int radonBackTransform(
302 RADON *radtra, int set, int setNr, float *scndata, float *imgdata
303);
304extern int radonBackTransformEA(
305 RADON *radtra, int set, int setNr, float *scndata, float *imgdata
306);
307extern int radonBackTransformSA(
308 RADON *radtra, int set, int setNr, float *imgdata, float *scndata
309);
310extern int radonBackTransformPRM(
311 PRMAT *mat, int set, int setNr, float *scndata, float *imgdata
312);
313/* FUNCTIONS FOR SETTING THE FACTORS IN THE PRMAT DATA STUCTURE */
314extern int radonSetBases(RADON *radtra,ELLIPSE *elli, PRMAT *mat);
315extern int radonSetBasesEA(RADON *radtra,ELLIPSE *elli, PRMAT *mat);
316extern int radonSetLUT(RADON *radtra, ELLIPSE *elli, PRMAT *mat);
317extern int radonSetLORS(RADON *radtra,ELLIPSE *elli, PRMAT *mat);
318/*****************************************************************************/
319
320/*****************************************************************************/
321/* recutil */
322extern void recSinTables(
323 int views, float *sinB, float *sinBrot, float rotation
324);
325extern void recInterpolateSinogram(
326 float *srcsino, float *newsino, int srcrays, int newrays, int views
327);
328extern int bit_rev_int(int x, int n);
329extern void set_os_set(int os_sets, int *set_seq);
330extern int recGetStatistics(
331 float *buf, int n, float *osum, float *omin, float *omax, int skip_zero_mins
332);
333/*****************************************************************************/
334
335/*****************************************************************************/
336/* reprojection */
337extern int imgReprojection(IMG *img, IMG *scn, int verbose);
338extern int reprojection(
339 float *image, int dim, int rays, int views, float bpzoom, float *sinogram,
340 int verbose
341);
342extern void viewReprojection(
343 float *idata, float *sdata, int view, int dim,
344 int viewNr, int rayNr, float *sinB, float *sinBrot,
345 float offsX, float offsY, float bpZoom
346);
347extern void reprojectionAvg3(float *data, int n);
348extern void reprojectionAvg5(float *data, int n);
349extern void reprojectionMed3(float *data, int n);
350extern void viewBackprojection(
351 float *prj, float *idata, int dim, int view, int viewNr, int rayNr,
352 float *sinB, float *sinBrot, float offsX, float offsY, float bpZoom
353);
354/*****************************************************************************/
355
356/*****************************************************************************/
357extern int trmrp(
358 float *bla, float *tra, int dim, float *image,
359 int iter, int sets, int rays, int views,
360 int maskdim, float zoom, float beta, float axial_fov,
361 float sample_distance, int skip_prior, int osl,
362 float shiftX, float shiftY, float rotation,
363 int verbose
364);
365/*****************************************************************************/
366
367/*****************************************************************************/
368#endif // _LIBTPCREC_H
int ELLIPSE_VERBOSE
Drive in verbose mode if not 0.
Definition ellipse.c:9
int ELLIPSE_TEST
Drive in test mode if not 0.
Definition ellipse.c:8
Header file for libtpcimgio.
Header file for libtpcmisc.
void recSinTables(int views, float *sinB, float *sinBrot, float rotation)
Definition recutil.c:12
unsigned int prmatGetNV(PRMAT *mat)
Definition prmat.c:175
unsigned int prmatGetPIX(PRMAT *mat)
Definition prmat.c:210
int radonGetMO(RADON *radtra)
Definition radon.c:119
unsigned int prmatGetRays(PRMAT *mat, int row)
Definition prmat.c:237
int radonFwdTransformEA(RADON *radtra, int set, int setNr, float *imgdata, float *scndata)
Definition radon.c:550
int radonSet(RADON *radtra, int mode, int imgDim, int viewNr, int binNr)
Definition radon.c:62
void reprojectionMed3(float *data, int n)
int ellipseAllocate(ELLIPSE *ell, int imgDim)
Definition ellipse.c:94
void ellipseInfo(ELLIPSE *ell)
Definition ellipse.c:73
int mrp(float *sinogram, int rays, int views, int iter, int os_sets, int maskdim, float zoom, float beta, int skip_prior, int dim, float *image, int verbose)
Definition mrp.c:262
void viewBackprojection(float *prj, float *idata, int dim, int view, int viewNr, int rayNr, float *sinB, float *sinBrot, float offsX, float offsY, float bpZoom)
void viewReprojection(float *idata, float *sdata, int view, int dim, int viewNr, int rayNr, float *sinB, float *sinBrot, float offsX, float offsY, float bpZoom)
int radonGetID(RADON *radtra)
Definition radon.c:128
float prmatGetFactorSum(PRMAT *mat)
Definition prmat.c:397
int trmrp(float *bla, float *tra, int dim, float *image, int iter, int sets, int rays, int views, int maskdim, float zoom, float beta, float axial_fov, float sample_distance, int skip_prior, int osl, float shiftX, float shiftY, float rotation, int verbose)
Definition trmrp.c:21
void reprojectionAvg3(float *data, int n)
int ellipseReadEllipse(FILE *fp, ELLIPSE *ell)
Definition ellipse.c:198
int radonGetHI(RADON *radtra)
Definition radon.c:169
unsigned int prmatGetBinView(PRMAT *mat, int row, int ind)
Definition prmat.c:253
float ellipseGetInclination(ELLIPSE *ell)
Definition ellipse.c:300
int ellipseGetImgSize(ELLIPSE *ell)
Definition ellipse.c:312
float prmatGetMinor(PRMAT *mat)
Definition prmat.c:364
int reprojection(float *image, int dim, int rays, int views, float bpzoom, float *sinogram, int verbose)
int radonFwdTransform(RADON *radtra, int set, int setNr, float *imgdata, float *scndata)
Definition radon.c:216
int bit_rev_int(int x, int n)
Definition recutil.c:77
unsigned int prmatGetRows(PRMAT *mat)
Definition prmat.c:267
void prmatEmpty(PRMAT *mat)
Definition prmat.c:56
int ellipseSetFromParams(ELLIPSE *ell, int imgDim, float *semis, float *cent, float incli, float val)
Definition ellipse.c:119
void prmatInit(PRMAT *mat)
Definition prmat.c:22
float ellipseGetMinor(ELLIPSE *ell)
Definition ellipse.c:265
int radonSetBases(RADON *radtra, ELLIPSE *elli, PRMAT *mat)
Definition radon.c:2602
float prmatGetFactorSqrSum(PRMAT *mat, int row)
Definition prmat.c:409
unsigned int prmatGetYCoord(PRMAT *mat, int row, int pix)
Definition prmat.c:327
int fbpMakeFilter(float *sinFFT, float *cosFFT, float cutoff, int filter, int lenFFT, int views, float *fbpFilter, int verbose)
Definition fbp.c:382
void recInterpolateSinogram(float *srcsino, float *newsino, int srcrays, int newrays, int views)
Definition recutil.c:37
int imgMRP(IMG *scn, IMG *img, int imgDim, float zoom, float shiftX, float shiftY, float rotation, int maxIterNr, int skipPriorNr, float beta, int maskDim, int osSetNr, int verbose)
Definition mrp.c:21
int radonFwdTransformSA(RADON *radtra, int set, int setNr, float *imgdata, float *scndata)
Definition radon.c:1238
int imgReprojection(IMG *img, IMG *scn, int verbose)
int radonGetNB(RADON *radtra)
Definition radon.c:148
unsigned int prmatGetXCoord(PRMAT *mat, int row, int pix)
Definition prmat.c:312
int imgFBP(IMG *scn, IMG *img, int imgDim, float zoom, int filter, float cutoff, float shiftX, float shiftY, float rotation, int verbose)
Definition fbp.c:108
unsigned int prmatGetPixCoord(PRMAT *mat, int row)
Definition prmat.c:223
int RADON_VERBOSE
Drive in verbose mode if not 0.
Definition radon.c:13
int radonBackTransformPRM(PRMAT *mat, int set, int setNr, float *scndata, float *imgdata)
Definition radon.c:2503
int radonGetNV(RADON *radtra)
Definition radon.c:138
void fbp_back_proj(float *prj, float *imgCorner, int imgDim, int view, int views, int rays, float offsX, float offsY, float *sinB, float *sinBrot)
Definition fbp.c:599
float med21(float *inp, int dim)
Definition mrprior.c:49
int radonFwdTransformPRM(PRMAT *mat, int set, int setNr, float *imgdata, float *scndata)
Definition radon.c:1328
float radonGetSin(RADON *radtra, int nr)
Definition radon.c:192
int PRMAT_TEST
If not 0 drive in test mode.
Definition prmat.c:8
void fbp_fft_bidir_complex_radix2(float *real, float *imag, int direct, int n, float *sine, float *cosine)
Definition fbp.c:512
int PRMAT_VERBOSE
If not 0 drive in verbose mode.
Definition prmat.c:9
int ellipseGetValue(ELLIPSE *ell)
Definition ellipse.c:323
int radonSetLORS(RADON *radtra, ELLIPSE *elli, PRMAT *mat)
Definition radon.c:3925
unsigned int prmatGetCoord(PRMAT *mat, int row, int pix)
Definition prmat.c:297
void set_os_set(int os_sets, int *set_seq)
Definition recutil.c:113
float ellipseGetCenterY(ELLIPSE *ell)
Definition ellipse.c:289
int prmatSaveMatrix(PRMAT *mat)
Definition prmat.c:428
int radonGetCB(RADON *radtra)
Definition radon.c:180
int RADON_TEST
Drive in test mode if not 0.
Definition radon.c:12
void ellipseInit(ELLIPSE *ell)
Definition ellipse.c:23
float med9(float *inp, int dim)
Definition mrprior.c:15
float prmatGetMin(PRMAT *mat)
Definition prmat.c:375
unsigned int prmatGetID(PRMAT *mat)
Definition prmat.c:197
void ellipseEmpty(ELLIPSE *ell)
Definition ellipse.c:47
int recGetStatistics(float *buf, int n, float *osum, float *omin, float *omax, int skip_zero_mins)
Definition recutil.c:154
int ** ellipseGetArray(ELLIPSE *ell)
Definition ellipse.c:339
int radonSetLUT(RADON *radtra, ELLIPSE *elli, PRMAT *mat)
Definition radon.c:3719
float prmatGetMajor(PRMAT *mat)
Definition prmat.c:353
void reprojectionAvg5(float *data, int n)
float ellipseGetMajor(ELLIPSE *ell)
Definition ellipse.c:254
int ellipseSaveEllipse(ELLIPSE *ell, FILE *fp)
Definition ellipse.c:230
float ellipseGetCenterX(ELLIPSE *ell)
Definition ellipse.c:277
int ellipseIsInside(ELLIPSE *ell, int row, int col)
Definition ellipse.c:352
int prmatReadMatrix(char *fname, PRMAT *mat)
Definition prmat.c:550
int prmatAllocate(PRMAT *mat, int set, unsigned int rows, unsigned int *coords)
Definition prmat.c:105
int radonSetBasesEA(RADON *radtra, ELLIPSE *elli, PRMAT *mat)
Definition radon.c:2984
void do_prior(float *img, float beta, float *med_coef, int dim, float small, int maskdim, float *maxm)
Definition mrprior.c:77
float radonGetSD(RADON *radtra)
Definition radon.c:159
float prmatGetFactor(PRMAT *mat, int row, int pix)
Definition prmat.c:342
unsigned int prmatGetPixels(PRMAT *mat, int row)
Definition prmat.c:282
int radonBackTransformEA(RADON *radtra, int set, int setNr, float *scndata, float *imgdata)
Definition radon.c:1696
void fbp_back_proj_round(float *prj, float *imgOrigin, int imgDim, int view, int views, int rays, float offsX, float offsY, float bpZoom, float *sinB, float *sinBrot)
Definition fbp.c:655
void radonEmpty(RADON *radtra)
Definition radon.c:27
int fbp(float *sinogram, int rays, int views, int dim, int filter, float cutoff, float *image)
Definition fbp.c:20
int radonBackTransformSA(RADON *radtra, int set, int setNr, float *imgdata, float *scndata)
Definition radon.c:2415
void mrpProjectionCorrection(float *measured, float *proj, float *correct, int os_sets, int rays, int views)
Definition mrp.c:229
int radonBackTransform(RADON *radtra, int set, int setNr, float *scndata, float *imgdata)
Definition radon.c:1429
unsigned int prmatGetNB(PRMAT *mat)
Definition prmat.c:186
float prmatGetMax(PRMAT *mat)
Definition prmat.c:386
void mrpUpdate(float *coef, float *img, float *oimg, int n)
Definition mrp.c:201
Ellipse on two dimensional plane.
Definition libtpcrec.h:37
float value
Value inside the ellipse.
Definition libtpcrec.h:57
float inclination
Inclination (degrees).
Definition libtpcrec.h:48
char status
ellipse status.
Definition libtpcrec.h:39
float semiaxis[2]
Definition libtpcrec.h:43
int imageDim
Size of the image plane on which the ellipse is defined.
Definition libtpcrec.h:50
int ** ellipseptr
Definition libtpcrec.h:55
float center[2]
Definition libtpcrec.h:46
unsigned int ** lines
Definition libtpcrec.h:194
float max
Maximal factor value in the projection matrix.
Definition libtpcrec.h:181
float min
Minimal factor value in the projection matrix.
Definition libtpcrec.h:179
char type
Scanner information on the prmat. 0=ECAT931 1=GE Advance.
Definition libtpcrec.h:166
int * prmatfov
Definition libtpcrec.h:177
char status
Prmat status.
Definition libtpcrec.h:164
float * factor_sqr_sum
Square sums of factors in each row in the projection matrix.
Definition libtpcrec.h:202
unsigned short int *** fact
Definition libtpcrec.h:208
float scaling_factor
Scaling factor for factors (notice that factors are stored in integers).
Definition libtpcrec.h:185
unsigned int * dime
Number of pixels hit by a line for every line.
Definition libtpcrec.h:204
unsigned int imgDim
Scanner geometrics, field imgDim.
Definition libtpcrec.h:172
float factor_sum
The sum of all factors in the projection matrix.
Definition libtpcrec.h:183
unsigned int dimr
Dimension of rows (lines of response) in the projection matrix.
Definition libtpcrec.h:200
unsigned int nrp
Number of pixels inside the fov. i.e. number of rows in the look-up table.
Definition libtpcrec.h:189
unsigned int viewNr
Scanner geometrics, field viewNr.
Definition libtpcrec.h:168
unsigned int ** _linesdata
Hidden pointer for the actual data.
Definition libtpcrec.h:196
int mode
Discretisation model utilised.
Definition libtpcrec.h:174
unsigned int binNr
Scanner geometrics, field binNr.
Definition libtpcrec.h:170
unsigned short int *** _factdata
Hidden pointer for the actual data.
Definition libtpcrec.h:210
int imgDim
Definition libtpcrec.h:261
int centerBin
Definition libtpcrec.h:269
int binNr
Definition libtpcrec.h:265
int viewNr
Definition libtpcrec.h:263
float * sines
Definition libtpcrec.h:274
char status
Definition libtpcrec.h:257
char mode
Definition libtpcrec.h:259
float sampleDist
Definition libtpcrec.h:271
int half
Definition libtpcrec.h:267