Working on Scalar Range issue. Intorudcing two different functions for writing and rendering Projections

This commit is contained in:
Proton local user
2024-08-22 13:07:00 +02:00
parent 4989d021bd
commit affd24b48e
2 changed files with 96 additions and 69 deletions

View File

@ -2124,18 +2124,16 @@ void itkImageProcessor::Write2DImages(){
// }
}
#include <itkImage.h>
vtkImageData* itkImageProcessor::GetLocalizer1VTK()
{
// Rescale the intensity of the projection images to 0-32768 for output.
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New();
rescaler1->SetOutputMinimum(0);
rescaler1->SetOutputMaximum(32768);
rescaler1->SetInput(m_PASourceDupli->GetOutput());
rescaler1->SetOutputMaximum(IMG_VIS_MAXIMUM_RANGE);
rescaler1->SetInput( m_PASourceDupli->GetOutput() );
rescaler1->Update();
toVTKLocalizer1->SetInput(rescaler1->GetOutput());
@ -2188,22 +2186,18 @@ vtkImageData* itkImageProcessor::GetLocalizer1VTK()
vtkImageData* itkImageProcessor::GetLocalizer2VTK()
{
// Rescale the intensity of the projection images to 0-32768 for output.
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
RescaleFilterType::Pointer rescaler2 = RescaleFilterType::New();
rescaler2->SetOutputMinimum(0);
rescaler2->SetOutputMaximum(32768);
rescaler2->SetInput(m_LATSourceDupli ->GetOutput());
rescaler2->SetOutputMaximum(IMG_VIS_MAXIMUM_RANGE);
rescaler2->SetInput( m_LATSourceDupli->GetOutput() );
rescaler2->Update();
toVTKLocalizer2->SetInput(rescaler2->GetOutput());
toVTKLocalizer2->Update();
// if(true) {
// using ImageRegionType3D = ImageType3D::RegionType;
// using SizeType3D = ImageRegionType3D::SizeType;
@ -2258,70 +2252,61 @@ vtkImageData* itkImageProcessor::GetProjection1VTK()
//TODO
}
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New();
rescaler1->SetOutputMinimum(0);
rescaler1->SetOutputMaximum(IMG_VIS_MAXIMUM_RANGE);
rescaler1->SetInput( imageDRT1In );
rescaler1->Update();
toVTK2D1->SetInput(rescaler1->GetOutput());
toVTK2D1->Update();
return
toVTK2D1->GetOutput();
}
vtkImageData* itkImageProcessor::GetProjection1VTKToWrite()
{
if(m_DRTImage1MetaInfo == NULL ||
m_DRTGeometryMetaInfo == NULL ||
m_TransformMetaInfo == NULL ){
return NULL;
//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>;
using IntWindowType = itk::IntensityWindowingImageFilter<InternalImageType, OutputImageType>;
auto intWindowFilter = IntWindowType::New();
intWindowFilter->SetWindowMinimum(0);
intWindowFilter->SetWindowMaximum(imageCalculatorFilter2->GetMaximum());
intWindowFilter->SetWindowMinimum(imageCalculatorFilter->GetMinimum());
intWindowFilter->SetWindowMaximum(imageCalculatorFilter->GetMaximum());
intWindowFilter->SetOutputMinimum(0);
if(imageCalculatorFilter2->GetMaximum() > SHRT_MAX)
if(imageCalculatorFilter->GetMaximum() > SHRT_MAX){
intWindowFilter->SetOutputMaximum(SHRT_MAX);
else
intWindowFilter->SetOutputMaximum(imageCalculatorFilter2->GetMaximum());
}else
intWindowFilter->SetOutputMaximum(imageCalculatorFilter->GetMaximum());
intWindowFilter->SetInput(shifter1->GetOutput());
intWindowFilter->SetInput(imageDRT1In);
intWindowFilter->Update();
toVTK2D1->SetInput(intWindowFilter->GetOutput());
toVTK2D1->Update();
using ImageCalculatorFilterType2 = itk::MinimumMaximumImageCalculator<OutputImageType>;
auto imageCalculatorFilter2 = ImageCalculatorFilterType2::New();
imageCalculatorFilter2->SetImage(intWindowFilter->GetOutput());
imageCalculatorFilter2->Compute();
// 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();
// // 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();
std::cout<< "itkImageProcessor::imageCalculatorFilter2() " <<
imageCalculatorFilter2->GetMinimum() << " " << imageCalculatorFilter2->GetMaximum() <<std::endl;
// using ImageRegionType3D = ImageType3D::RegionType;
// using SizeType3D = ImageRegionType3D::SizeType;
@ -2426,28 +2411,64 @@ vtkImageData* itkImageProcessor::GetProjection2VTK()
//TODO
}
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
RescaleFilterType::Pointer rescaler2 = RescaleFilterType::New();
rescaler2->SetOutputMinimum(0);
rescaler2->SetOutputMaximum(IMG_VIS_MAXIMUM_RANGE);
rescaler2->SetInput( imageDRT2In );
rescaler2->Update();
toVTK2D2->SetInput(rescaler2->GetOutput());
toVTK2D2->Update();
return
toVTK2D2->GetOutput();
}
vtkImageData* itkImageProcessor::GetProjection2VTKToWrite()
{
if(m_DRTImage2MetaInfo == NULL ||
m_DRTGeometryMetaInfo == NULL ||
m_TransformMetaInfo == NULL ){
return NULL;
//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;
using IntWindowType = itk::IntensityWindowingImageFilter<InternalImageType, OutputImageType>;
auto intWindowFilter = IntWindowType::New();
intWindowFilter->SetWindowMinimum(imageCalculatorFilter->GetMinimum());
intWindowFilter->SetWindowMaximum(imageCalculatorFilter->GetMaximum());
intWindowFilter->SetOutputMinimum(0);
if(imageCalculatorFilter->GetMaximum() > SHRT_MAX)
intWindowFilter->SetOutputMaximum(SHRT_MAX);
else
intWindowFilter->SetOutputMaximum(imageCalculatorFilter->GetMaximum());
// Rescale the intensity of the projection images from float to unsigned short for output.
using RescaleFilterType = itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType>;
intWindowFilter->SetInput(imageDRT2In);
intWindowFilter->Update();
RescaleFilterType::Pointer rescaler2 = RescaleFilterType::New();
rescaler2->SetOutputMinimum(0);
rescaler2->SetOutputMaximum(USHRT_MAX);
rescaler2->SetInput( imageDRT2In );
rescaler2->Update();
toVTK2D2->SetInput(rescaler2->GetOutput());
toVTK2D2->SetInput(intWindowFilter->GetOutput());
toVTK2D2->Update();
// rescaler2->Print(std::cout);
using ImageCalculatorFilterType2 = itk::MinimumMaximumImageCalculator<OutputImageType>;
auto imageCalculatorFilter2 = ImageCalculatorFilterType2::New();
imageCalculatorFilter2->SetImage(intWindowFilter->GetOutput());
imageCalculatorFilter2->Compute();
std::cout<< "itkImageProcessor::imageCalculatorFilter2() " <<
imageCalculatorFilter2->GetMinimum() << " " << imageCalculatorFilter2->GetMaximum() <<std::endl;
// using ImageRegionType3D = ImageType3D::RegionType;
// using SizeType3D = ImageRegionType3D::SizeType;

View File

@ -50,6 +50,8 @@ gfattori 08.11.2021
#include "itkReg23.h"
#include "itkReg23MetaInformation.h"
#define IMG_VIS_MAXIMUM_RANGE 2048
namespace itk
{
@ -243,6 +245,10 @@ public:
vtkImageData* GetProjection1VTK();
vtkImageData* GetProjection2VTK();
/** Conveniency methods to get VTK images for rendering */
vtkImageData* GetProjection1VTKToWrite();
vtkImageData* GetProjection2VTKToWrite();
vtkImageData* GetLocalizer1VTK();
vtkImageData* GetLocalizer2VTK();