Functions

mitkCylindricToCartesianFilter.cpp File Reference

#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)

Function Documentation

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 
)

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;
  }
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines