34 #ifndef SEG3D_NrrdToITK_H
35 #define SEG3D_NrrdToITK_H
37 #include <sci_defs/insight_defs.h>
41 #include <Core/Datatypes/NrrdData.h>
42 #include <Core/Datatypes/ITKDatatype.h>
43 #include <Core/Util/Assert.h>
44 #include <itkImageToImageFilter.h>
45 #include <itkImportImageFilter.h>
58 template <
class PixType,
int Dim>
60 nrrd_to_itk_image(Nrrd *
n)
63 ASSERT(n->type == get_nrrd_type<PixType>());
66 typedef itk::ImportImageFilter < PixType , Dim > ImportFilterType;
67 typename ImportFilterType::Pointer importFilter = ImportFilterType::New();
68 typename ImportFilterType::SizeType
size;
73 unsigned int count = 1;
74 for(
unsigned int i=0; i < n->dim-1; i++) {
75 count *= n->axis[i+1].size;
76 size[i] = n->axis[i+1].size;
78 if (!AIR_EXISTS(n->axis[i+1].min)) {
81 origin[i] = n->axis[i+1].min;
84 if (!AIR_EXISTS(n->axis[i+1].spacing)) {
87 spacing[i] = n->axis[i+1].spacing;
90 typename ImportFilterType::IndexType start;
91 typename ImportFilterType::RegionType region;
93 region.SetIndex(start);
95 importFilter->SetRegion(region);
96 importFilter->SetOrigin(origin);
97 importFilter->SetSpacing(spacing);
98 importFilter->SetImportPointer((PixType *)n->data, count,
false);
99 importFilter->Update();
101 return importFilter->GetOutput();
105 template <
class PixType,
int Dim>
109 typedef itk::Image<PixType, Dim> ImageType;
111 ImageType *img =
dynamic_cast<ImageType *
>(img_handle->data_.GetPointer());
116 NrrdData *nrrd_data =
new NrrdData(img_handle.get_rep());
117 Nrrd *nrrd = nrrd_data->nrrd_;
119 size_t size[NRRD_DIM_MAX];
121 size[1] = img->GetRequestedRegion().GetSize()[0];
122 size[2] = img->GetRequestedRegion().GetSize()[1];
123 size[3] = img->GetRequestedRegion().GetSize()[2];
125 unsigned int centers[NRRD_DIM_MAX];
126 centers[0] = nrrdCenterNode;
127 centers[1] = nrrdCenterNode;
128 centers[2] = nrrdCenterNode;
129 centers[3] = nrrdCenterNode;
131 nrrdWrap_nva(nrrd, (
void *)img->GetBufferPointer(),
132 get_nrrd_type<PixType>(), 4, size);
134 nrrdAxisInfoSet_nva(nrrd, nrrdAxisInfoCenter, centers);
136 nrrd->axis[0].spacing = AIR_NAN;
137 nrrd->axis[0].min = 0;
138 nrrd->axis[0].max = 1;
139 nrrd->axis[0].kind = nrrdKindStub;
141 for(
unsigned int i = 0; i < Dim; i++) {
142 nrrd->axis[i+1].spacing = img->GetSpacing()[i];
143 nrrd->axis[i+1].min = img->GetOrigin()[i];
144 nrrd->axis[i+1].max = nrrd->axis[i+1].min +
145 (nrrd->axis[i+1].size-1) * nrrd->axis[i+1].spacing;
146 nrrd->axis[i+1].kind = nrrdKindDomain;
#define SCISHARE
Definition: share.h:39
#define ASSERT(condition)
Definition: Assert.h:110
LockingHandle< NrrdData > NrrdDataHandle
Definition: NrrdData.h:108
LockingHandle< ITKDatatype > ITKDatatypeHandle
Definition: ITKDatatype.h:69
int count
Definition: readAllFields.py:25
int n
Definition: eab.py:9
int size
Definition: eabLatVolData.py:2