25 int xi, yi, zi, xj, yj, zj, fi, xp, yp, zp;
26 double xsize, ysize, zsize, newsize;
27 double xdist, ydist, zdist;
28 double xpc, ypc, zpc, xd, yd, zd;
31 if(
IMG_TEST>0) printf(
"img2cube(img1, img2)\n");
36 printf(
"original dimensions (x,y,z) := %d,%d,%d\n", img1->
dimx, img1->
dimy, img1->
dimz);
40 if(img1->
dimx>dim) {dim=img1->
dimx; n++;}
41 if(img1->
dimy>dim) {dim=img1->
dimy; n++;}
43 if(
IMG_TEST>1) printf(
"new dimensions (x,y,z) := %d,%d,%d\n", dim, dim, dim);
48 if(ret)
return(10+ret);
55 if(
IMG_TEST>1) printf(
"original image size (x,y,z) in mm := %g,%g,%g\n", xsize, ysize, zsize);
58 if(ysize>newsize) {newsize=ysize; n++;}
59 if(zsize>newsize) {newsize=zsize; n++;}
61 printf(
"original image size (x,y,z) in mm := %g,%g,%g\n",
63 if(n>0) printf(
"new image size (x,y,z) in mm:= %g,%g,%g\n",
64 newsize, newsize, newsize);
65 else printf(
"original image size needs not to be changed.\n");
72 for(zj=0; zj<dim; zj++)
for(yj=0; yj<dim; yj++)
for(xj=0; xj<dim; xj++) {
73 if(
IMG_TEST>3 && n%testf==0) printf(
"zj=%d yj=%d xj=%d\n", zj, yj, xj);
75 xdist=((double)xj+0.5)*img2->
sizex - 0.5*newsize;
76 ydist=((double)yj+0.5)*img2->
sizey - 0.5*newsize;
77 zdist=((double)zj+0.5)*img2->
sizez - 0.5*newsize;
79 printf(
" xdist=%g ydist=%g zdist=%g\n", xdist, ydist, zdist);
81 xpc=(0.5*xsize+xdist)/(img1->
sizex + img1->
gapx);
82 ypc=(0.5*ysize+ydist)/(img1->
sizey + img1->
gapy);
83 zpc=(0.5*zsize+zdist)/(img1->
sizez + img1->
gapz);
85 xp=(int)(xpc+0.5); yp=(int)(ypc+0.5); zp=(int)(zpc+0.5);
87 printf(
" inside pixel %d,%d,%d\n", xp, yp, zp);
89 for(fi=0; fi<img1->
dimt; fi++) img2->
m[zj][yj][xj][fi]=0.0;
91 for(zi=zp-1; zi<=zp+1; zi++)
92 for(yi=yp-1; yi<=yp+1; yi++)
for(xi=xp-1; xi<=xp+1; xi++) {
94 xd=(0.5+xi)-xpc; yd=(0.5+yi)-ypc; zd=(0.5+zi)-zpc;
97 printf(
" distance^2 from (%d,%d,%d) := %g\n", xi, yi, zi, d);
100 if(
IMG_TEST>3 && n%testf==0) printf(
" weight := %g\n", w);
102 if(zi>=0 && yi>=0 && xi>=0 && zi<img1->dimz && yi<img1->dimy && xi<img1->dimx) {
103 for(fi=0; fi<img1->
dimt; fi++) {
104 img2->
m[zj][yj][xj][fi]+=w*img1->
m[zi][yi][xi][fi];
109 for(fi=0; fi<img1->
dimt; fi++) img2->
m[zj][yj][xj][fi]/=wsum;
111 printf(
" weighted avg in 1st frame := %g\n", img2->
m[zj][yj][xj][0]);
213 if(img1==NULL || img2==NULL)
return(1);
217 int dimz, dimy, dimx;
218 if(doz!=0) dimz=2*img1->
dimz;
else dimz=img1->
dimz;
226 if(ret)
return(10+ret);
236 for(z=0; z<img1->
dimz; z++)
for(y=0; y<img1->
dimy; y++)
for(x=0; x<img1->
dimx; x++) {
238 for(nz=2*z; nz<2+2*z; nz++)
for(ny=2*y; ny<2+2*y; ny++)
for(nx=2*x; nx<2+2*x; nx++) {
239 for(
int t=0; t<img1->
dimt; t++) img2->
m[nz][ny][nx][t]=img1->
m[z][y][x][t];
244 for(z=0; z<img1->
dimz; z++)
for(y=0; y<img1->
dimy; y++)
for(x=0; x<img1->
dimx; x++) {
246 for(ny=2*y; ny<2+2*y; ny++)
for(nx=2*x; nx<2+2*x; nx++) {
247 for(
int t=0; t<img1->
dimt; t++) img2->
m[z][ny][nx][t]=img1->
m[z][y][x][t];
275 if(img1==NULL || img2==NULL)
return(1);
279 int dimz, dimy, dimx;
280 if(doz!=0) dimz=0.5*img1->
dimz;
else dimz=img1->
dimz;
284 if((img1->
dimz % 2!=0.0) && doz!=0) dimz+=1;
285 if(img1->
dimy % 2!=0.0) dimy+=1;
286 if(img1->
dimx % 2!=0.0) dimx+=1;
292 if(ret)
return(10+ret);
301 int fi, pi, yi, xi, pc, yc, xc;
302 for(fi=0; fi<img2->
dimt; fi++){
303 for(pi=0, pc=1; pi<img2->
dimz; pi++) {
304 for(yi=0, yc=1; yi<img2->
dimy; yi++)
for(xi=0, xc=1; xi<img2->
dimx; xi++) {
305 img2->
m[pi][yi][xi][fi]=0.0;
306 if(2*pi+1==img1->
dimz) pc=0;
307 if(2*yi+1==img1->
dimy) yc=0;
308 if(2*xi+1==img1->
dimx) xc=0;
309 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi][2*yi][2*xi][fi];
310 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi][2*yi][2*xi+xc][fi];
311 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi][2*yi+yc][2*xi][fi];
312 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi][2*yi+yc][2*xi+xc][fi];
313 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi+pc][2*yi][2*xi][fi];
314 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi+pc][2*yi][2*xi+xc][fi];
315 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi+pc][2*yi+yc][2*xi][fi];
316 img2->
m[pi][yi][xi][fi]+=img1->
m[2*pi+pc][2*yi+yc][2*xi+xc][fi];
317 img2->
m[pi][yi][xi][fi]/=8.0;
322 int fi, pi, yi, xi, yc, xc;
323 for(fi=0; fi<img2->
dimt; fi++){
324 for(pi=0; pi<img2->
dimz; pi++) {
325 for(yi=0, yc=1; yi<img2->
dimy; yi++)
for(xi=0, xc=1; xi<img2->
dimx; xi++) {
326 img2->
m[pi][yi][xi][fi]=0.0;
327 if(2*yi+1==img1->
dimy) yc=0;
328 if(2*xi+1==img1->
dimx) xc=0;
329 img2->
m[pi][yi][xi][fi]+=img1->
m[pi][2*yi][2*xi][fi];
330 img2->
m[pi][yi][xi][fi]+=img1->
m[pi][2*yi][2*xi+xc][fi];
331 img2->
m[pi][yi][xi][fi]+=img1->
m[pi][2*yi+yc][2*xi][fi];
332 img2->
m[pi][yi][xi][fi]+=img1->
m[pi][2*yi+yc][2*xi+xc][fi];
333 img2->
m[pi][yi][xi][fi]/=4.0;
int imgAllocateWithHeader(IMG *image, int planes, int rows, int columns, int frames, IMG *image_from)