实例26 边缘保留平滑滤波对PNG图像进行二维滤波
#include "itkImage.h"
#include "itkCastImageFilter.h"
#include "itkCurvatureFlowImageFilter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
int main(int argc, char* argv[])
{
//定义浮点像素类型 InternalPixelType
typedef float InternalPixelType;
const unsigned int Dimension = 2;
//定义浮点、维数2的图像类型 InternalImageType
typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
//定义无符号字符 输出像素类型 OutputPixelType
typedef unsigned char OutputPixelType;
//定义无符号字符、维数2 输出图像类型 OutputImageType
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
//定义滤波输入图像类型InternalImageType 滤波输出图像类型OutputImageType
typedef itk::CastImageFilter< InternalImageType, OutputImageType >
CastingFilterType;
//实例化滤波器对象caster
CastingFilterType::Pointer caster = CastingFilterType::New();
//定义图像读取类型ReaderType
typedef itk::ImageFileReader< InternalImageType > ReaderType;
//定义图像写类型WriterType
typedef itk::ImageFileWriter< OutputImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
reader->SetFileName("BrainProtonDensitySlice.png");
writer->SetFileName(" lvbo_CastingFilter.png");
//实例化滤波对象smoothing
typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType >
CurvatureFlowImageFilterType;
CurvatureFlowImageFilterType::Pointer smoothing =
CurvatureFlowImageFilterType::New();
现在连接管道
smoothing->SetInput(reader->GetOutput());
//输出滤波后的效果图
caster->SetInput(smoothing->GetOutput());
writer->SetInput(caster->GetOutput());
/*IsolatedConnectedImageFilter 期望用户指定一个门限和两个种子。在这个例子中,我们
从命令行得到它们*/
smoothing->SetNumberOfIterations(10);
smoothing->SetTimeStep(0.125);
try
{
writer->Update();
}
catch (itk::ExceptionObject & excep)
{
std::cerr << "Exception caught !" << std::endl;
std::cerr << excep << std::endl;
}
return EXIT_SUCCESS;
}
输入图像 CurvatureFlowImageFilter 平滑
ITK系列目录:
注:例程配套素材见系列目录