#include "mitkCylindricToCartesianFilter.h"#include "mitkImageTimeSelector.h"#include "mitkSlicedGeometry3D.h"#include "mitkPlaneGeometry.h"#include "mitkProperties.h"#include <ipPic/mitkIpPicTypeMultiplex.h>Go to the source code of this file.
Functions | |
| template<class T > | |
| void | _transform (mitkIpPicDescriptor *pic, mitkIpPicDescriptor *dest, float _outsideValue, float *fr, float *fphi, float *fz, short *rt, unsigned int *phit, unsigned int *zt, mitkIpPicDescriptor *coneCutOff_pic) |
| void _transform | ( | mitkIpPicDescriptor * | pic, |
| mitkIpPicDescriptor * | dest, | ||
| float | _outsideValue, | ||
| float * | fr, | ||
| float * | fphi, | ||
| float * | fz, | ||
| short * | rt, | ||
| unsigned int * | phit, | ||
| unsigned int * | zt, | ||
| mitkIpPicDescriptor * | coneCutOff_pic | ||
| ) |
Definition at line 28 of file mitkCylindricToCartesianFilter.cpp.
Referenced by mitk::CylindricToCartesianFilter::GenerateData().
{
T outsideValue = static_cast<T>(_outsideValue);
register float f, ft, f0, f1, f2, f3;
mitkIpInt2_t ox_size;
mitkIpInt2_t nx_size, ny_size, nz_size;
int oxy_size, nxy_size;
T* orig, *dp, *dest_start;
mitkIpInt2_t* coneCutOff=(mitkIpInt2_t*)coneCutOff_pic->data;
orig=(T*)pic->data;
ox_size=pic->n[0];
oxy_size=ox_size*pic->n[1];
nx_size=dest->n[0];
ny_size=dest->n[1];
nxy_size=nx_size*ny_size;
nz_size=dest->n[2];
/*nx_size=360;
ny_size=360;
nxy_size=nx_size*ny_size;
nz_size=256;*/
dest_start=dp=((T*)dest->data)+nxy_size*(nz_size-1);
mitkIpInt2_t y;
// int size=_mitkIpPicElements(pic);
register mitkIpInt2_t x,z;
for(y=0;y<ny_size;++y)
{
mitkIpInt2_t x_start;
register mitkIpInt2_t x_end;
int r0plusphi0=*rt;
if(r0plusphi0>=0)
{
x_start=0; x_end=nx_size;
}
else
{
x_start=-r0plusphi0; x_end=nx_size+r0plusphi0;
for(z=0;z<nz_size;++z,dp+=-nxy_size-x_start)
for(x=0;x<x_start;++x,++dp)
*dp=outsideValue;
dp+=nxy_size*nz_size; dp+=x_end;
for(z=0;z<nz_size;++z,dp+=-nxy_size-x_start)
for(x=x_end;x<nx_size;++x,++dp)
*dp=outsideValue;
dp+=nxy_size*nz_size; dp-=x_end;
fr+=x_start;
fphi+=x_start;
rt+=x_start;
phit+=x_start;
dp+=x_start;
coneCutOff+=x_start;
}
for(x=x_start;x<x_end;++x, ++fr, ++fphi, ++rt, ++phit, ++dp, ++coneCutOff)
{
f=*fr;
f3=*fphi;
f0=1-f;
f1=1-f3;
f2=f0*f3;
f0*=f1;
f1*=f;
f3*=f;
r0plusphi0=*rt+*phit;
mitkIpInt2_t z_start;
z_start=*coneCutOff;
T *op;
register unsigned int step;
unsigned int *ztp;
op=orig+*rt+*phit;
float *fzp;
for(z=0;z<z_start;++z, dp-=nxy_size)
*dp=outsideValue;
ztp=zt+z_start;
fzp=fz+z_start;
for(z=z_start;z<nz_size;++z, dp-=nxy_size)
{
step=*(ztp++);
register T *opt=op;
opt+=step;
f =*opt*f0; ++opt;
f+=*opt*f1; opt+=oxy_size; --opt;
f+=*opt*f2; ++opt;
f+=*opt*f3; opt-=oxy_size; --opt;
opt+=ox_size;
ft =*opt*f0; ++opt;
ft+=*opt*f1; opt+=oxy_size; --opt;
ft+=*opt*f2; ++opt;
ft+=*opt*f3;
*dp=(T)((1-*fzp)*f+*fzp*ft+0.5);
}
dp+=nxy_size*nz_size;
}
fr+=nx_size-x_end;
fphi+=nx_size-x_end;
rt+=nx_size-x_end;
phit+=nx_size-x_end;
dp+=nx_size-x_end;
coneCutOff+=nx_size-x_end;
}
}
1.7.2