21 #include "../ITKFilter/ITKUltrasound/itkBModeImageFilter.h" 22 #include "../ITKFilter/itkPhotoacousticBModeImageFilter.h" 27 #include "itkResampleImageFilter.h" 28 #include "itkCastImageFilter.h" 29 #include "itkCropImageFilter.h" 30 #include "itkRescaleIntensityImageFilter.h" 31 #include "itkIntensityWindowingImageFilter.h" 33 #include "itkBSplineInterpolateImageFunction.h" 41 MITK_INFO <<
"[PhotoacousticFilterService] created filter service";
46 MITK_INFO <<
"[PhotoacousticFilterService] destructed filter service";
54 typedef itk::Image< float, 3 > itkFloatImageType;
58 if (method == BModeMethod::Abs)
61 filter->UseLogFilter(UseLogFilter);
62 filter->SetInput(floatImage);
64 return filter->GetOutput();
68 BModeFilterType::Pointer bModeFilter = BModeFilterType::New();
71 PhotoacousticBModeImageFilter::Pointer photoacousticBModeFilter = PhotoacousticBModeImageFilter::New();
73 typedef itk::ResampleImageFilter < itkFloatImageType, itkFloatImageType > ResampleImageFilter;
74 ResampleImageFilter::Pointer resampleImageFilter = ResampleImageFilter::New();
76 itkFloatImageType::Pointer itkImage;
82 bModeFilter->SetInput(itkImage);
83 bModeFilter->SetDirection(1);
84 itkImage = bModeFilter->GetOutput();
88 photoacousticBModeFilter->SetInput(itkImage);
89 photoacousticBModeFilter->SetDirection(1);
90 itkImage = photoacousticBModeFilter->GetOutput();
98 double *outputSpacing)
100 typedef itk::Image< float, 3 > itkFloatImageType;
104 typedef itk::ResampleImageFilter < itkFloatImageType, itkFloatImageType > ResampleImageFilter;
105 ResampleImageFilter::Pointer resampleImageFilter = ResampleImageFilter::New();
107 itkFloatImageType::Pointer itkImage;
111 itkFloatImageType::SpacingType outputSpacingItk;
112 itkFloatImageType::SizeType inputSizeItk = itkImage->GetLargestPossibleRegion().GetSize();
113 itkFloatImageType::SizeType outputSizeItk = inputSizeItk;
115 outputSpacingItk[0] = outputSpacing[0];
116 outputSpacingItk[1] = outputSpacing[1];
117 outputSpacingItk[2] = itkImage->GetSpacing()[2];
119 outputSizeItk[0] = outputSizeItk[0] * (floatImage->GetGeometry()->GetSpacing()[0] / outputSpacing[0]);
120 outputSizeItk[1] = outputSizeItk[1] * (floatImage->GetGeometry()->GetSpacing()[1] / outputSpacing[1]);
122 resampleImageFilter->SetInput(itkImage);
123 resampleImageFilter->SetSize(outputSizeItk);
124 resampleImageFilter->SetOutputSpacing(outputSpacingItk);
126 resampleImageFilter->UpdateLargestPossibleRegion();
133 double *outputDimension)
135 typedef itk::Image< float, 3 > itkFloatImageType;
139 typedef itk::ResampleImageFilter < itkFloatImageType, itkFloatImageType > ResampleImageFilter;
140 ResampleImageFilter::Pointer resampleImageFilter = ResampleImageFilter::New();
142 itkFloatImageType::Pointer itkImage;
146 itkFloatImageType::SpacingType outputSpacingItk;
147 itkFloatImageType::SizeType inputSizeItk = itkImage->GetLargestPossibleRegion().GetSize();
148 itkFloatImageType::SizeType outputSizeItk = inputSizeItk;
150 outputSizeItk[0] = outputDimension[0];
151 outputSizeItk[1] = outputDimension[1];
153 MITK_INFO << outputSizeItk[0] <<
" " << outputSizeItk[1];
155 outputSpacingItk[0] = (double)inputSizeItk[0] / (
double)outputSizeItk[0] * floatImage->GetGeometry()->GetSpacing()[0];
156 outputSpacingItk[1] = (double)inputSizeItk[1] / (
double)outputSizeItk[1] * floatImage->GetGeometry()->GetSpacing()[1];
157 outputSpacingItk[2] = itkImage->GetSpacing()[2];
159 MITK_INFO << outputSpacingItk[0] <<
" " << outputSpacingItk[1];
161 resampleImageFilter->SetInput(itkImage);
162 resampleImageFilter->SetSize(outputSizeItk);
163 resampleImageFilter->SetOutputSpacing(outputSpacingItk);
165 resampleImageFilter->UpdateLargestPossibleRegion();
171 int above,
int below,
173 int zStart,
int zEnd,
181 cropImageFilter->SetInput(floatImage);
182 cropImageFilter->SetXPixelsCropStart(left);
183 cropImageFilter->SetXPixelsCropEnd(right);
184 cropImageFilter->SetYPixelsCropStart(above);
185 cropImageFilter->SetYPixelsCropEnd(below);
186 cropImageFilter->SetZPixelsCropStart(zStart);
187 cropImageFilter->SetZPixelsCropEnd(zEnd);
188 cropImageFilter->Update();
189 return cropImageFilter->GetOutput();
193 std::string errorMessage =
"Caught unexpected exception ";
194 errorMessage.append(e.what());
198 unsigned int dim[3] = { 1,1,1 };
199 ret->Initialize(MakeScalarPixelType<float>(), 3, dim);
208 unsigned int dim[] = {inputImage->GetDimension(0), outputDimensionY, inputImage->GetDimension(2)};
209 outputImage->Initialize(inputImage->GetPixelType(), 3, dim);
211 float *sliceData =
new float[dim[0] * dim[1]];
213 for (
size_t i = inputImage->GetDimension(1) * dim[0]; i < dim[0] * dim[1]; ++i)
215 sliceData[i] = pixelColor;
218 for (
unsigned int slice = 0; slice < dim[2]; ++slice)
222 std::memcpy((
void*)sliceData, cpy.GetData(),
sizeof(float) * inputImage->GetDimension(1) * dim[0]);
223 outputImage->SetSlice(sliceData, slice);
232 BeamformingSettings::Pointer config,
233 std::function<
void(
int, std::string)> progressHandle)
237 if (inputImage->GetDimension() != 3)
240 dimensionImageFilter->SetInput(inputImage);
241 dimensionImageFilter->Update();
242 processedImage = dimensionImageFilter->GetOutput();
246 processedImage = inputImage;
256 return processedImage;
261 float BPHighPass,
float BPLowPass,
262 float alphaHighPass,
float alphaLowPass,
263 float TimeSpacing,
float SpeedOfSound,
bool IsBFImage)
269 bandpassFilter->SetInput(floatData);
270 bandpassFilter->SetHighPass(BPHighPass);
271 bandpassFilter->SetLowPass(BPLowPass);
272 bandpassFilter->SetHighPassAlpha(alphaHighPass);
273 bandpassFilter->SetLowPassAlpha(alphaLowPass);
274 bandpassFilter->SetSpeedOfSound(SpeedOfSound);
275 bandpassFilter->SetTimeSpacing(TimeSpacing);
276 bandpassFilter->SetIsBFImage(IsBFImage);
277 bandpassFilter->Update();
278 return bandpassFilter->GetOutput();
282 std::string errorMessage =
"Caught unexpected exception ";
283 errorMessage.append(e.what());
292 if ((inputImage->GetPixelType().GetTypeAsString() ==
"scalar (float)" ||
293 inputImage->GetPixelType().GetTypeAsString() ==
" (float)"))
299 castToFloatImageFilter->SetInput(inputImage);
300 castToFloatImageFilter->Update();
301 return castToFloatImageFilter->GetOutput();
mitk::Image::Pointer ApplyResampling(mitk::Image::Pointer inputImage, double *outputSpacing)
Resamples the given image.
mitk::Image::Pointer ApplyBmodeFilter(mitk::Image::Pointer inputImage, BModeMethod method=BModeMethod::Abs, bool UseLogFilter=false)
Applies a B-Mode Filter.
mitk::Image::Pointer ApplyResamplingToDim(mitk::Image::Pointer inputImage, double *outputDimension)
mitk::Image::Pointer ExtendImage(mitk::Image::Pointer inputImage, float pixelColor, unsigned int outputDimensionY)
mitk::BeamformingFilter::Pointer m_BeamformingFilter
For performance reasons, an instance of the Beamforming filter is initialized as soon as possible and...
Image::Pointer GrabItkImageMemory(itk::SmartPointer< ItkOutputImageType > &itkimage, mitk::Image *mitkImage=nullptr, const BaseGeometry *geometry=nullptr, bool update=true)
Grabs the memory of an itk::Image (with a specific type) and puts it into an mitk::Image.The memory is managed by the mitk::Image after calling this function. The itk::Image remains valid until the mitk::Image decides to free the memory.
~PhotoacousticFilterService() override
An object of this class represents an exception of MITK. Please don't instantiate exceptions manually...
PhotoacousticFilterService()
mitk::Image::Pointer ApplyCropping(mitk::Image::Pointer inputImage, int above, int below, int right, int left, int minSlice, int maxSlice, int *errCode)
Crops the given image.
mitk::Image::Pointer ApplyBandpassFilter(mitk::Image::Pointer data, float BPHighPass, float BPLowPass, float alphaHighPass, float alphaLowPass, float timeSpacing, float SpeedOfSound, bool IsBFImage)
Applies a Bandpass filter to the given image.
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
mitk::Image::Pointer ConvertToFloat(mitk::Image::Pointer)
Create an Photoacoustic B-Mode (Brightness-Mode) image from raw "RF" data. The RF's envelope is calcu...
mitk::Image::Pointer ApplyBeamforming(mitk::Image::Pointer inputImage, BeamformingSettings::Pointer config, std::function< void(int, std::string)> progressHandle=[](int, std::string) {})
Beamforms the given image.
ImageReadAccessor class to get locked read access for a particular image part.
Create an ultrasound B-Mode (Brightness-Mode) image from raw "RF" data. The RF's envelope is calculat...
BModeMethod
Defines the methods for the B-Mode filter Currently implemented are an Envelope Detection filter and ...
const void * GetData() const
Gives const access to the data.