TPCCLIB
Loading...
Searching...
No Matches
imgflips.c
Go to the documentation of this file.
1
5/*****************************************************************************/
6#include "libtpcimgp.h"
7/*****************************************************************************/
8
9/*****************************************************************************/
14{
15 int zi, yi, from, to;
16 float *col_ptr;
17
18 for(zi=0; zi<img->dimz; zi++) {
19 for(yi=0; yi<img->dimy; yi++) {
20 for(from=0, to=img->dimx-1; from<to; from++, to--) {
21 col_ptr=img->m[zi][yi][from];
22 img->m[zi][yi][from]=img->m[zi][yi][to];
23 img->m[zi][yi][to]=col_ptr;
24 }
25 }
26 }
27}
28/*****************************************************************************/
29
30/*****************************************************************************/
35{
36 int zi, from, to;
37 float **row_ptr;
38
39 for(zi=0; zi<img->dimz; zi++) {
40 for(from=0, to=img->dimy-1; from<to; from++, to--) {
41 row_ptr=img->m[zi][from];
42 img->m[zi][from]=img->m[zi][to];
43 img->m[zi][to]=row_ptr;
44 }
45 }
46}
47/*****************************************************************************/
48
49/*****************************************************************************/
56{
57 int from, to;
58 float ***plane_ptr;
59
60 for(from=0, to=img->dimz-1; from<to; from++, to--) {
61 plane_ptr=img->m[from];
62 img->m[from]=img->m[to];
63 img->m[to]=plane_ptr;
64 }
65}
66/*****************************************************************************/
67
68/*****************************************************************************/
75 IMG *img
76) {
77 int xi, yi, zi, fi, ret;
78 IMG omg;
79
80 /* Make copy of the original image */
81 imgInit(&omg); ret=imgDup(img, &omg); if(ret!=0) return(100+ret);
82
83 /* Empty the user-specified image struct */
84 imgEmpty(img);
85 /* Allocate it again with new dimensions */
86 ret=imgAllocateWithHeader(img, omg.dimx, omg.dimy, omg.dimz, omg.dimt, &omg);
87 if(ret!=0) {imgEmpty(&omg); return(200+ret);}
88
89 /* Copy the voxel values */
90 for(zi=0; zi<omg.dimz; zi++)
91 for(yi=0; yi<omg.dimy; yi++)
92 for(xi=0; xi<omg.dimx; xi++)
93 for(fi=0; fi<omg.dimt; fi++) {
94 img->m[xi][yi][zi][fi]=omg.m[zi][yi][xi][fi];
95 }
96
97 /* Switch pixel sizes */
98 img->sizex=omg.sizez;
99 img->sizez=omg.sizex;
100 img->resolutionx=omg.resolutionz;
101 img->resolutionz=omg.resolutionx;
102
103 /* Free the memory of the copy of original image */
104 imgEmpty(&omg);
105
106 return(0);
107}
108/*****************************************************************************/
109
110/*****************************************************************************/
117 IMG *img
118) {
119 int xi, yi, zi, fi, ret;
120 IMG omg;
121
122 /* Make copy of the original image */
123 imgInit(&omg); ret=imgDup(img, &omg); if(ret!=0) return(100+ret);
124
125 /* Empty the user-specified image structure. */
126 imgEmpty(img);
127 /* Allocate it again with new dimensions */
128 ret=imgAllocateWithHeader(img, omg.dimy, omg.dimz, omg.dimx, omg.dimt, &omg);
129 if(ret!=0) {imgEmpty(&omg); return(200+ret);}
130
131 /* Copy the voxel values */
132 for(zi=0; zi<omg.dimz; zi++)
133 for(yi=0; yi<omg.dimy; yi++)
134 for(xi=0; xi<omg.dimx; xi++)
135 for(fi=0; fi<omg.dimt; fi++) {
136 img->m[yi][img->dimy-1-zi][xi][fi]=omg.m[zi][yi][xi][fi];
137 }
138
139 /* Switch pixel sizes */
140 img->sizey=omg.sizez;
141 img->sizez=omg.sizey;
142 img->resolutiony=omg.resolutionz;
143 img->resolutionz=omg.resolutiony;
144
145 /* Free the memory of the copy of original image */
146 imgEmpty(&omg);
147
148 return(0);
149}
150/*****************************************************************************/
151
152/*****************************************************************************/
159 IMG *img1,
161 IMG *img2
162) {
163 if(img1==NULL || img2==NULL) return(1);
164 if(img1->dimz<1 || img1->dimy<1 || img1->dimx<1 || img1->dimt<1) return(1);
165
166 /* If z dim is already 1, then just duplicate the image */
167 if(img1->dimz==1) return(imgDup(img1, img2));
168
169 /* Allocate memory for the output image */
170 if(imgAllocateWithHeader(img2, 1, img1->dimy, img1->dimx, img1->dimt, img1)!=0)
171 return(3);
172
173 /* Sum over z dimension */
174 for(int zi=0; zi<img1->dimz; zi++)
175 for(int yi=0; yi<img1->dimy; yi++)
176 for(int xi=0; xi<img1->dimx; xi++)
177 for(int ti=0; ti<img1->dimt; ti++)
178 img2->m[0][yi][xi][ti]+=img1->m[zi][yi][xi][ti];
179
180 /* Divide by original z dimension */
181 for(int yi=0; yi<img2->dimy; yi++)
182 for(int xi=0; xi<img2->dimx; xi++)
183 for(int ti=0; ti<img2->dimt; ti++)
184 img2->m[0][yi][xi][ti]/=(float)img1->dimz;
185
186 return(0);
187}
188/*****************************************************************************/
189
190/*****************************************************************************/
int imgAllocateWithHeader(IMG *image, int planes, int rows, int columns, int frames, IMG *image_from)
Definition img.c:279
int imgDup(IMG *img1, IMG *img2)
Definition img.c:304
void imgEmpty(IMG *image)
Definition img.c:121
void imgInit(IMG *image)
Definition img.c:60
void imgFlipVertical(IMG *img)
Definition imgflips.c:34
void imgFlipHorizontal(IMG *img)
Definition imgflips.c:13
int imgMeanZ(IMG *img1, IMG *img2)
Definition imgflips.c:157
int imgFlipRight(IMG *img)
Definition imgflips.c:73
void imgFlipPlanes(IMG *img)
Definition imgflips.c:55
int imgFlipAbove(IMG *img)
Definition imgflips.c:115
Header file for libtpcimgp.
float sizex
unsigned short int dimx
float resolutionx
float resolutiony
float **** m
unsigned short int dimt
float sizey
unsigned short int dimz
unsigned short int dimy
float sizez
float resolutionz