Skip to content

Commit 58661ec

Browse files
thewtexLeengit
authored andcommitted
ENH: WIP: Wrap CastImageFilter for VectorImage <-> Vector
1 parent 2b92d39 commit 58661ec

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

Modules/Core/Common/wrapping/itkImageToImageFilterA.wrap

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ itk_wrap_class("itk::ImageToImageFilter" POINTER)
1515
# Vector types
1616
itk_wrap_image_filter_combinations("${WRAP_ITK_VECTOR}" "${WRAP_ITK_VECTOR}")
1717

18+
# VectorImage <-> vector
19+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
20+
if(ITK_WRAP_vector_float)
21+
itk_wrap_template("${ITKM_IVF${d}${d}}${ITKM_VIF${d}}" "${ITKT_IVF${d}${d}},${ITKT_VIF${d}}")
22+
endif()
23+
if(ITK_WRAP_vector_double)
24+
itk_wrap_template("${ITKM_IVD${d}${d}}${ITKM_VID${d}}" "${ITKT_IVD${d}${d}},${ITKT_VID${d}}")
25+
endif()
26+
endforeach()
27+
1828
# For GradientRecursiveGaussianImageFilter we need some specific combinations
1929
foreach(image_dim ${ITK_WRAP_IMAGE_DIMS})
2030
foreach(input_vector_dim ${ITK_WRAP_VECTOR_COMPONENTS})

Modules/Filtering/ImageFilterBase/include/itkCastImageFilter.hxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ CastImageFilter<TInputImage, TOutputImage>::DynamicThreadedGenerateDataDispatche
120120
// Implementation for non-implicit convertible pixels which are
121121
// itk-array-like.
122122

123-
static_assert(OutputPixelType::Dimension == InputPixelType::Dimension, "Vector dimensions are required to match!");
124123
static_assert(std::is_convertible<typename InputPixelType::ValueType, typename OutputPixelType::ValueType>::value,
125124
"Component types are required to be convertible.");
126125

@@ -140,6 +139,8 @@ CastImageFilter<TInputImage, TOutputImage>::DynamicThreadedGenerateDataDispatche
140139

141140
this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
142141

142+
const unsigned int componentsPerPixel = outputPtr->GetNumberOfComponentsPerPixel();
143+
143144
// Define the iterators
144145
ImageScanlineConstIterator<TInputImage> inputIt(inputPtr, inputRegionForThread);
145146
ImageScanlineIterator<TOutputImage> outputIt(outputPtr, outputRegionForThread);
@@ -152,7 +153,7 @@ CastImageFilter<TInputImage, TOutputImage>::DynamicThreadedGenerateDataDispatche
152153
{
153154
const InputPixelType & inputPixel = inputIt.Get();
154155
OutputPixelType value;
155-
for (unsigned int k = 0; k < OutputPixelType::Dimension; k++)
156+
for (unsigned int k = 0; k < componentsPerPixel; k++)
156157
{
157158
value[k] = static_cast<typename OutputPixelType::ValueType>(inputPixel[k]);
158159
}

Modules/Filtering/ImageFilterBase/wrapping/itkCastImageFilter.wrap

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ itk_wrap_class("itk::CastImageFilter" POINTER_WITH_SUPERCLASS)
88
# vector <-> vector
99
itk_wrap_image_filter_combinations("${WRAP_ITK_VECTOR}" "${WRAP_ITK_VECTOR}")
1010

11+
# VectorImage <-> vector
12+
foreach(d ${ITK_WRAP_IMAGE_DIMS})
13+
if(ITK_WRAP_vector_float)
14+
itk_wrap_template("${ITKM_IVF${d}${d}}${ITKM_VIF${d}}" "${ITKT_IVF${d}${d}},${ITKT_VIF${d}}")
15+
endif()
16+
if(ITK_WRAP_vector_double)
17+
itk_wrap_template("${ITKM_IVD${d}${d}}${ITKM_VID${d}}" "${ITKT_IVD${d}${d}},${ITKT_VID${d}}")
18+
endif()
19+
endforeach()
20+
1121
# RGB <-> RGB
1222
UNIQUE(rgb "RGBUC;${WRAP_ITK_RGB}")
1323
itk_wrap_image_filter_combinations("${rgb}" "${rgb}")

Modules/Filtering/ImageFilterBase/wrapping/test/CastImageFilterTest.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
itk.auto_progress(2)
2626

2727
dim = 2
28-
IType = itk.Image[itk.F, dim]
29-
OIType = itk.Image[itk.UC, dim]
28+
InputImageType = itk.Image[itk.F, dim]
29+
OutputImageType = itk.Image[itk.UC, dim]
3030

31-
reader = itk.ImageFileReader[IType].New(FileName=argv[1])
32-
filter = itk.CastImageFilter[IType, OIType].New(reader)
33-
writer = itk.ImageFileWriter[OIType].New(filter, FileName=argv[2])
31+
reader = itk.ImageFileReader[InputImageType].New(FileName=argv[1])
32+
filt = itk.CastImageFilter[InputImageType, OutputImageType].New(reader)
33+
writer = itk.ImageFileWriter[OutputImageType].New(filt, FileName=argv[2])
3434

3535
writer.Update()

0 commit comments

Comments
 (0)