25 sinB[i]=(
float)sin((
double)i*(M_PI/(
double)views));
26 if(sinBrot==NULL)
return;
27 double rot=M_PI*rotation/180.0;
29 sinBrot[i]=(
float)sin((
double)i*(M_PI/(
double)views) + rot);
49 if(srcrays==newrays) {
51 for(
int i=0; i<views*newrays; i++) newsino[i]=srcsino[i];
55 float diff, *sp, *np, oposition, weight;
57 for(
int j=0; j<views; j++) {
58 sp=srcsino + j*srcrays;
59 for(
int i=0; i<newrays; i++) {
60 oposition=(float)(i*srcrays)/(float)newrays;
61 weight = oposition - (float)(
int)oposition;
62 sp=srcsino + j*srcrays + (int)oposition;
64 *np++ = *sp + diff*weight;
67 np--; *np=srcsino[srcrays*views - 1];
83 unsigned char c=(char)x;
86 c = (c&1)<<1 | (c&2)>>1;
89 c = ((c&1) << 2) | (c&2) | ((c&4) >> 2);
92 c = ((c&1) << 3) | ((c&2) << 1) | ((c&4) >> 1) | ((c&8) >> 3);
95 c = ((c&1)<<4) | ((c&2)<<2) | (c&4) | ((c&8)>>2) | ((c&16)>>4);
98 c = ((c&1)<<5) | ((c&2)<<3) | ((c&4)<<1) | ((c&8)>>1) | ((c&16)>>3) |
102 c = ((c&1)<<6) | ((c&2)<<4) | ((c&4)<<2) | (c&8) | ((c&16)>>2) |
103 ((c&32)>>4) | ((c&64)>>6);
121 }
else if(os_sets==1) {
123 }
else if(os_sets==2) {
126 }
else if(os_sets==4) {
128 set_seq[i++]=0; set_seq[i++]=2; set_seq[i++]=1; set_seq[i++]=3;
132 set_seq[i++]=0; set_seq[i++]=4; set_seq[i++]=2; set_seq[i++]=6;
133 set_seq[i++]=1; set_seq[i++]=5; set_seq[i++]=3; set_seq[i++]=7;
135 }
else if(os_sets==16) {
137 set_seq[i++]=0; set_seq[i++]=8; set_seq[i++]=4; set_seq[i++]=12;
138 set_seq[i++]=2; set_seq[i++]=10; set_seq[i++]=6; set_seq[i++]=14;
139 set_seq[i++]=1; set_seq[i++]=9; set_seq[i++]=5; set_seq[i++]=13;
140 set_seq[i++]=3; set_seq[i++]=11; set_seq[i++]=7; set_seq[i++]=15;
143 set_seq[0]=0; set_seq[1]=1;
144 for(
int i=1; i<os_sets; i++) set_seq[i]=
bit_rev_int(i, os_sets);
171 if(osum!=NULL) *osum=nanf(
"");
172 if(omin!=NULL) *omin=nanf(
"");
173 if(omax!=NULL) *omax=nanf(
"");
175 i=0;
while(i<n && !isfinite(buf[i])) i++;
178 sum=0.0; max=buf[i]; min=nanf(
"");
179 if(!skip_zero_mins || min!=0.0) min=buf[i];
181 if(!isfinite(buf[i]))
continue;
183 if(buf[i]>max) max=buf[i];
185 if(skip_zero_mins)
continue;
189 if(isnan(min) || buf[i]<min) min=buf[i];
191 if(osum!=NULL) *osum=sum;
192 if(omin!=NULL) *omin=min;
193 if(omax!=NULL) *omax=max;
Header file for libtpcrec.
void recSinTables(int views, float *sinB, float *sinBrot, float rotation)
int bit_rev_int(int x, int n)
void recInterpolateSinogram(float *srcsino, float *newsino, int srcrays, int newrays, int views)
void set_os_set(int os_sets, int *set_seq)
int recGetStatistics(float *buf, int n, float *osum, float *omin, float *omax, int skip_zero_mins)