Strarting playing with Scalar Range of DRT

This commit is contained in:
Proton local user
2024-08-21 09:18:27 +02:00
parent 66762fac79
commit 4989d021bd
3 changed files with 71 additions and 21 deletions

View File

@ -2124,6 +2124,7 @@ void itkImageProcessor::Write2DImages(){
// }
}
#include <itkImage.h>
vtkImageData* itkImageProcessor::GetLocalizer1VTK()
{
@ -2246,6 +2247,7 @@ vtkImageData* itkImageProcessor::GetLocalizer2VTK()
toVTKLocalizer2->GetOutput();
}
vtkImageData* itkImageProcessor::GetProjection1VTK()
{
@ -2256,32 +2258,69 @@ vtkImageData* itkImageProcessor::GetProjection1VTK()
//TODO
}
using ImageCalculatorFilterType = itk::MinimumMaximumImageCalculator<InternalImageType>;
auto imageCalculatorFilter = ImageCalculatorFilterType::New();
imageCalculatorFilter->SetImage(imageDRT1In);
imageCalculatorFilter->Compute();
std::cout<< "itkImageProcessor::imageDRT1In() " <<
imageCalculatorFilter->GetMinimum() << " " << imageCalculatorFilter->GetMaximum() <<std::endl;
using ShiftScaleFilterType = itk::ShiftScaleImageFilter<InternalImageType, OutputImageType>;
ShiftScaleFilterType::Pointer shifter1 = ShiftScaleFilterType::New();
// shifter1->SetScale(10);
shifter1->SetShift(1024);
shifter1->SetInput( imageDRT1In );
shifter1->Update();
using ImageCalculatorFilterType2 = itk::MinimumMaximumImageCalculator<OutputImageType>;
auto imageCalculatorFilter2 = ImageCalculatorFilterType2::New();
imageCalculatorFilter2->SetImage(shifter1->GetOutput());
imageCalculatorFilter2->Compute();
std::cout<< "itkImageProcessor::imageDRT1In() shifted " <<
imageCalculatorFilter2->GetMinimum() << " " << imageCalculatorFilter2->GetMaximum() <<std::endl;
using IntWindowType = itk::IntensityWindowingImageFilter<OutputImageType, OutputImageType>;
auto intWindowFilter = IntWindowType::New();
intWindowFilter->SetWindowMinimum(0);
intWindowFilter->SetWindowMaximum(imageCalculatorFilter2->GetMaximum());
intWindowFilter->SetOutputMinimum(0);
if(imageCalculatorFilter2->GetMaximum() > SHRT_MAX)
intWindowFilter->SetOutputMaximum(SHRT_MAX);
else
intWindowFilter->SetOutputMaximum(imageCalculatorFilter2->GetMaximum());
intWindowFilter->SetInput(shifter1->GetOutput());
intWindowFilter->Update();
toVTK2D1->SetInput(intWindowFilter->GetOutput());
toVTK2D1->Update();
// Rescale the intensity of the projection images from float to unsigned short for output.
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New();
rescaler1->SetOutputMinimum(0);
rescaler1->SetOutputMaximum(USHRT_MAX);
rescaler1->SetInput( imageDRT1In );
rescaler1->Update();
// RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New();
// rescaler1->SetOutputMinimum(0);
// rescaler1->SetOutputMaximum(USHRT_MAX);
// rescaler1->SetInput( imageDRT1In );
// rescaler1->Update();
// using ImageCalculatorFilterType = itk::MinimumMaximumImageCalculator<InternalImageType>;
// auto imageCalculatorFilter = ImageCalculatorFilterType::New();
// imageCalculatorFilter->SetImage(imageDRT1In);
// imageCalculatorFilter->Compute();
// // using ImageCalculatorFilterType2 = itk::MinimumMaximumImageCalculator<OutputImageType>;
// // auto imageCalculatorFilter2 = ImageCalculatorFilterType2::New();
// // imageCalculatorFilter2->SetImage(rescaler1->GetOutput());
// // imageCalculatorFilter2->Compute();
// // std::cout<< "itkImageProcessor::imageDRT2In() " <<
// // imageCalculatorFilter2 <<std::endl;
// std::cout<< "itkImageProcessor::imageDRT1In() " <<
// imageCalculatorFilter <<std::endl;
// using ImageCalculatorFilterType2 = itk::MinimumMaximumImageCalculator<OutputImageType>;
// auto imageCalculatorFilter2 = ImageCalculatorFilterType2::New();
// imageCalculatorFilter2->SetImage(rescaler1->GetOutput());
// imageCalculatorFilter2->Compute();
// std::cout<< "itkImageProcessor::imageDRT2In() " <<
// imageCalculatorFilter2 <<std::endl;
toVTK2D1->SetInput(rescaler1->GetOutput());
toVTK2D1->Update();
// toVTK2D1->SetInput(rescaler1->GetOutput());
// toVTK2D1->Update();
// using ImageRegionType3D = ImageType3D::RegionType;
@ -2387,6 +2426,15 @@ vtkImageData* itkImageProcessor::GetProjection2VTK()
//TODO
}
using ImageCalculatorFilterType = itk::MinimumMaximumImageCalculator<InternalImageType>;
auto imageCalculatorFilter = ImageCalculatorFilterType::New();
imageCalculatorFilter->SetImage(imageDRT2In);
imageCalculatorFilter->Compute();
std::cout<< "itkImageProcessor::imageDRT2In() " <<
imageCalculatorFilter->GetMinimum() << " " << imageCalculatorFilter->GetMaximum() <<std::endl;
// Rescale the intensity of the projection images from float to unsigned short for output.
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;

View File

@ -22,6 +22,7 @@ gfattori 08.11.2021
#include "itkResampleImageFilter.h"
#include "itkCastImageFilter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkIntensityWindowingImageFilter.h"
#include "itkChangeInformationImageFilter.h"
#include "itkGDCMImageIO.h"
#include "itkMetaDataObject.h"

View File

@ -139,6 +139,7 @@ gSiddonJacobsRayCastInterpolateImageFunction<TInputImage, TCoordRep>::Evaluate(c
const OutputType minOutputValue = itk::NumericTraits<OutputType>::NonpositiveMin();
const OutputType maxOutputValue = itk::NumericTraits<OutputType>::max();
// If the volume was shifted, recalculate the overall inverse transform
unsigned long int interpMTime = this->GetMTime();
unsigned long int vTransformMTime = m_Transform->GetMTime();