目录
1、itkCastImageFilter
该类的主要功能是将输入像素转换为输出像素类型。
该过滤器根据输入图像类型和输出图像类型进行模板化,它是对输入图像进行pixel-wise,并不对像素的亮度值做处理。
即将图像 itk::Image<type1, dim> 投射到:itk::Image<type2, dim>
也可以将:itk::VectorImage<type1, dim> 投射到:itk::VectorImage<type2, dim>
注:如果需要执行降维,可能需要使用ExtractImageFilter而不是CastImageFilter。
示例代码:
#include "itkImage.h"
#include "itkCastImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef signed short shortPixelType;
typedef itk::Image<shortPixelType, Dimension> ShortImageType;
typedef float floatPixelType;
typedef itk::Image<floatPixelType, Dimension> FloatImageType;
bool castImage(FloatImageType* image, ShortImageType* outImage)
{
typedef itk::CastImageFilter<FloatImageType, ShortImageType> castFilter;
typename castFilter::Pointer cast = castFilter::New();
cast->SetInput(image);
try
{
cast->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
outImage = cast->GetOutput();
return true;
}
2、itkRescaleIntensityImageFilter
该类的主要功能是对输入图像的强度级别进行线性变换。
它对输入图像像素的强度值应用逐像素线性变换,线性变换由用户根据输出图像应具有的最小值和最大值来定义,会将图像的动态范围强制转换为合适于图像显示常见的一个特定范围。
强度值的映射方程:
在将计算值分配给输出像素之前,所有计算均以输入像素的RealType精度进行。
它是一个简单的像素值重映射滤波器,可以将像素值的范围从一个区间重映射到另一个区间。它的主要用途是调整图像的对比度和亮度。它的使用方法是使用SetOutputMinimum()和SetOutputMaximum()方法设置输出的最小和最大值,然后将输入图像作为输入参数传递给RescaleIntensityImageFilter的Update()方法,即可得到重映射后的输出图像。
注意:在此过滤器中,输入图像的最小值和最大值是使用MinimumMaximumImageCalculator在内部计算的,用户不应在此过滤器中设置这些值;如果需要一个可以设置最小值和最大值的过滤器,请使用IntensityWindowingImageFilter;如果想要一个可以使用用户定义的强度线性变换的过滤器,请使用ShiftScaleImageFilter。
常用的成员函数:
SetImage()
:设置输入图像Set/GetOutputMaximum/Minimum()
:设置/获取输出图像的最大值/最小值GetInputMaximum/Minimum()
:获取输入图像的最大值/最小值GetScale()
:获取用于灰度值线性变换的缩放,仅在过滤器Update后才有效GetShift()
:获取用于灰度值线性变换的偏移,仅在过滤器Update后才有效
示例代码:
#include "itkImage.h"
#include "itkRescaleIntensityImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef double doublePixelType;
typedef itk::Image<doublePixelType, Dimension> DoubleImageType;
typedef unsigned char charPixelType;
typedef itk::Image<charPixelType, Dimension> CharImageType;
bool rescaleIntensityImage(DoubleImageType* image, CharImageType* outImage)
{
typedef itk::RescaleIntensityImageFilter<DoubleImageType, CharImageType> rescaleIntensityFilter;
typename rescaleIntensityFilter::Pointer rescaleFilter = rescaleIntensityFilter::New();
rescaleFilter->SetInput(image);
//rescaleFilter->SetOutputMaximum(1000); //根据需求自行判断是否设置及具体参数值
//rescaleFilter->SetOutputMinimum(100);
try
{
rescaleFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
double maxInput= rescaleFilter->GetInputMaximum();
double minInput = rescaleFilter->GetInputMinimum();
double maxOutput = rescaleFilter->GetOutputMaximum();
double minOutput = rescaleFilter->GetInputMinimum();
double scale = rescaleFilter->GetScale();
double shift = rescaleFilter->GetShift();
outImage = rescaleFilter->GetOutput();
return true;
}
3、itkIntensityWindowingImageFilter
该类是对用户定义区间内的输入图像的强度级别应用线性变换。超出此区间的值将映射为常量,区间内的值被映射到另一个常量。
它是一个更高级的像素值窗位窗宽调整滤波器,可以根据指定的窗位和窗宽参数,将图像的像素值映射到一个指定范围。它的主要用途是调整医学图像的窗位窗宽以显示感兴趣的区域。它的使用方法是使用SetWindowMinimum()和SetWindowMaximum()方法设置窗位和窗宽的范围,然后将输入图像作为输入参数传递给IntensityWindowingImageFilter的Update()方法,即可得到窗位窗宽调整后的输出图像。
所以,itkRescaleIntensityImageFilter更适用于简单的像素值范围重映射,而itkIntensityWindowingImageFilter更适用于医学图像的窗位窗宽调整。
常用的成员函数:
SetImage()
:设置输入图像Set/GetOutputMaximum/Minimum()
:设置/获取输出图像的最大值/最小值Set/GetWindowMaximum/Minimum()
:设置/获取输入强度窗口的最大/最小强度值SetWindowLevel()
:设置/获取窗宽和窗位,这是使用SetWindowMinimum()/ SetWindowMaximum() 的替代API,窗口最小值和最大值设置为[level-window/2, level+window/2]GetScale()
:获取用于灰度值线性变换的缩放,仅在过滤器Update后才有效GetShift()
:获取用于灰度值线性变换的偏移,仅在过滤器Update后才有效
示例代码:
#include "itkImage.h"
#include "itkIntensityWindowingImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef double doublePixelType;
typedef itk::Image<doublePixelType, Dimension> DoubleImageType;
typedef unsigned char charPixelType;
typedef itk::Image<charPixelType, Dimension> CharImageType;
bool intensityWindowingImage(CharImageType* image, DoubleImageType* outImage)
{
typedef itk::IntensityWindowingImageFilter<CharImageType, DoubleImageType> IntensityFilterType;
typename IntensityFilterType::Pointer intensityWindowingFilter = IntensityFilterType::New();
intensityWindowingFilter->SetInput(image);
intensityWindowingFilter->SetWindowMinimum(100);
intensityWindowingFilter->SetWindowMaximum(1000);
intensityWindowingFilter->SetOutputMinimum(0.0);
intensityWindowingFilter->SetOutputMaximum(255.0); // double but in the range of chars.
try
{
intensityWindowingFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
outImage = intensityWindowingFilter->GetOutput();
return true;
}
4、itkShiftScaleImageFilter
该类同样应用一个输入图像亮度的线性变换,移动和缩放图像中的像素。
它将输入像素偏移Shift(默认 0.0),然后按Scale(默认 1.0)缩放像素,所有计算均以输入像素的 RealType精度进行。在将计算值分配给输出像素之前,该值被钳制在像素类型的NonpositiveMin和 max处。
映射方程为:
常用的成员函数:
SetImage()
:设置输入图像Set/GetScale()
:设置/获取缩放像素的比例因子,比例在移位之后应用Set/GetShift()
:设置/获取像素的偏移量,转变之后是一个尺度GetUnderflowCount/OverflowCount()
:获取下溢和上溢的像素数
示例代码:
#include "itkImage.h"
#include "itkShiftScaleImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef signed short shortPixelType;
typedef itk::Image<shortPixelType, Dimension> ShortImageType;
bool shiftScaleImage(ShortImageType* image, ShortImageType* outImage)
{
typedef itk::ShiftScaleImageFilter<ShortImageType, ShortImageType> ShiftScaleFilterType;
typename ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
shiftScaleFilter->SetInput(image);
shiftScaleFilter->SetScale(1.2); //设置缩放的比例因子
shiftScaleFilter->SetShift(300); //设置偏移量
try
{
shiftScaleFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
int underflowCount = shiftScaleFilter->GetUnderflowCount();
int overflowCount = shiftScaleFilter->GetOverflowCount();
outImage = shiftScaleFilter->GetOutput();
return true;
}
5、itkNormalizeImageFilter
该类的主要功能是通过将图像的均值设置为0并将方差设置为1来标准化图像。
该类会移动和缩放图像,以便图像中的像素具有0均值和单位方差。此过滤器使用StatisticsImageFilter来计算输入的均值和方差,然后应用ShiftScaleImageFilter来移动和缩放像素。
itkNormalizeImageFilter用于将像素值归一化到指定的范围,可以根据给定的最小值和最大值来进行归一化操作,使得图像的像素值在指定范围内分布。
注意:由于该过滤器对数据进行归一化,使得平均值为0,并且-σ到+σ映射到-1.0到1.0,因此输出图像积分类型将生成一个不具有单位方差的图像,因为68%强度值映射到-1.0到1.0的实数范围,然后转换为输出积分值。
映射方程为:
示例代码:
#include "itkImage.h"
#include "itkNormalizeImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef double doublePixelType;
typedef itk::Image<doublePixelType, Dimension> DoubleImageType;
typedef unsigned char charPixelType;
typedef itk::Image<charPixelType, Dimension> CharImageType;
bool ITKThresholdFilterCode::normalizeImage(CharImageType* image, DoubleImageType* outImage)
{
typedef itk::NormalizeImageFilter<CharImageType, DoubleImageType> NormalizeFilterType;
typename NormalizeFilterType::Pointer normalizeFilter = NormalizeFilterType::New();
normalizeFilter->SetInput(image);
try
{
normalizeFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
outImage = normalizeFilter->GetOutput();
return true;
}
6、itkNormalizeToConstantImageFilter
该类是使缩放图像像素强度以使所有像素的总和等于用户定义的常数。
它是itkNormalizeImageFilter的一个子类,它只将图像归一化到一个特定的常数值,不设置最小值和最大值。它会将图像中所有的像素值都除以一个常数,使得最终的像素值都等于这个常数值(默认为1)。这个常数值可以通过**SetConstant()**方法设置。
这种变换对于标准化卷积核特别有用。
常用的成员函数:
SetImage()
:设置输入图像Set/GetConstant()
:设置/获取归一化常数
示例代码:
#include "itkImage.h"
#include "itkNormalizeToConstantImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef float floatPixelType;
typedef itk::Image<floatPixelType, Dimension> FloatImageType;
bool normalizeToConstantImage(FloatImageType* image, FloatImageType* outImage)
{
typedef itk::NormalizeToConstantImageFilter<FloatImageType, FloatImageType> NormalizeToConstantImageFilterType;
typename NormalizeToConstantImageFilterType::Pointer normalizeToConstantFilter =
NormalizeToConstantImageFilterType::New();
normalizeToConstantFilter->SetInput(image);
normalizeToConstantFilter->SetConstant(1);
try
{
normalizeToConstantFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
outImage = normalizeToConstantFilter->GetOutput();
return true;
}