51CTO讲解地址:
http://book.51cto.com/art/201504/474109.htm
demo地址:
https://lorensen.github.io/VTKExamples/site/Cxx/ImageProcessing/RescaleAnImage/
关键代码:
vtkSmartPointer<vtkImageShiftScale> shiftScaleFilter =
vtkSmartPointer<vtkImageShiftScale>::New();
shiftScaleFilter->SetOutputScalarTypeToUnsignedChar();
shiftScaleFilter->SetInputData(image);
shiftScaleFilter->SetShift(-1.0f * image->GetScalarRange()[0]); // brings the lower bound to 0
float oldRange = image->GetScalarRange()[1] - image->GetScalarRange()[0];
std::cout << "Old range: [" << image->GetScalarRange()[0] << ", " << image->GetScalarRange()[1] << "]" << std::endl;
std::cout << "Old range magnitude: " << oldRange << std::endl;
float newRange = 255; // We want the output [0,255]
shiftScaleFilter->SetScale(newRange/oldRange);
shiftScaleFilter->Update();
2.使用vtkImageCast对读入数据进行转换
官方demo:https://lorensen.github.io/VTKExamples/site/Cxx/Images/Cast/
关键代码:
vtkSmartPointer<vtkImageCast> castFilter =
vtkSmartPointer<vtkImageCast>::New();
castFilter->SetInputConnection(source->GetOutputPort());
castFilter->SetOutputScalarTypeToUnsignedChar();
castFilter->Update();