/// <inheritdoc/> public Image ResampleImage2D(Image image, int outputSize) { Ensure.ArgumentNotNull(image, nameof(image)); var dimension = image.GetDimension(); if (dimension != 2) { throw new NotSupportedException($"The dimension ({dimension}) of the provided image is not supported."); } var inputSize = image.GetSize(); var inputSpacing = image.GetSpacing(); var inputDirection = image.GetDirection(); var inputOrigin = image.GetOrigin(); double oldw = inputSize[0] * inputSpacing[0]; double oldh = inputSize[1] * inputSpacing[1]; double neww, newh = 0; double rw = oldw / outputSize; double rh = oldh / outputSize; if (rw > rh) { newh = oldh / rw; neww = outputSize; } else { neww = oldw / rh; newh = outputSize; } var outputSpacing = new VectorDouble() { inputSpacing[0] * inputSize[0] / neww, inputSpacing[1] * inputSize[1] / newh }; var actualSize = new VectorUInt32() { Convert.ToUInt32(neww), Convert.ToUInt32(newh) }; // https://itk.org/ITKExamples/src/Filtering/ImageGrid/ResampleAnImage/Documentation.html ResampleImageFilter filter = new ResampleImageFilter(); filter.SetReferenceImage(image); filter.SetSize(actualSize); filter.SetOutputSpacing(outputSpacing); Image output = filter.Execute(image); filter.Dispose(); return(output); }
/// <inheritdoc/> public Image ResampleImage3D(Image image, int outputSize) { Ensure.ArgumentNotNull(image, nameof(image)); var dimension = image.GetDimension(); if (dimension != 3) { throw new NotSupportedException($"The dimension ({dimension}) of the provided image is not supported."); } var outputSizeConverted = Convert.ToUInt32(outputSize); var inputSize = image.GetSize(); var inputSpacing = image.GetSpacing(); var desiredSize = new VectorUInt32() { outputSizeConverted, outputSizeConverted, outputSizeConverted }; var outputSpacing = new VectorDouble() { inputSpacing[0] * inputSize[0] / desiredSize[0], inputSpacing[1] * inputSize[1] / desiredSize[1], inputSpacing[2] * inputSize[2] / desiredSize[2] }; // https://itk.org/Wiki/ITK/Examples/ImageProcessing/ResampleImageFilter ResampleImageFilter filter = new ResampleImageFilter(); filter.SetReferenceImage(image); filter.SetTransform(new ScaleTransform(image.GetDimension())); filter.SetInterpolator(InterpolatorEnum.sitkLinear); filter.SetSize(desiredSize); filter.SetOutputSpacing(outputSpacing); Image output = filter.Execute(image); filter.Dispose(); return(output); }