1、itkSigmoidImageFilter
该类是按像素计算sigmoid函数,是一个平滑、连续的非线性形式变换函数。
首先对sigmoid函数的参数应用线性变换,亮度变换方程为:
其中:f(x):输出像素值,x:输入的像素值,Min和Max是输入图像最大最小值,alpha:输入亮度范围的宽度,beta:围绕在范围中心的亮度。
常用的成员函数:
SetImage()
:设置输入图像Set/GetAlpha()
:设置/获取alpha值,该值定义窗口的宽度,预输入的窗口宽度成正比,惯例窗口宽度是[-3α,3α],初始化值为1.0Set/GetBeta()
:设置/获取bate值,该值定义窗口的亮度,初始化值为0.0Set/GetOutputMaximum/Minimum()
:设置/获取输出图像的最大值/最小值
注:α和β均可有正有负。
示例代码:
#include "itkImage.h"
#include "itkSigmoidImageFilter.h"
const unsigned int Dimension = 3; //数据的Dimension
typedef signed short shortPixelType;
typedef itk::Image<shortPixelType, Dimension> ShortImageType;
bool sigmoidImage(ShortImageType* image, ShortImageType* outImage)
{
const double alpha = 10;
const double beta = 150;
typedef itk::SigmoidImageFilter<ShortImageType, ShortImageType> SigmoidFilterType;
typename SigmoidFilterType::Pointer sigmoidFilter = SigmoidFilterType::New();
sigmoidFilter->SetInput(image);
sigmoidFilter->SetAlpha(alpha);
sigmoidFilter->SetBeta(beta);
sigmoidFilter->SetOutputMinimum(10);
sigmoidFilter->SetOutputMaximum(240);
try
{
sigmoidFilter->Update();
}
catch (itk::ExceptionObject& ex)
{
//读取过程发生错误
std::cerr << "Error: " << ex << std::endl;
return false;
}
outImage = sigmoidFilter->GetOutput();
return true;
}