ITK做腐蚀操作

//ITK
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
//#include "itkBinaryErodeImageFilter.h"//这是二值图像的腐蚀
#include "itkGrayscaleErodeImageFilter.h"
#include "itkBinaryBallStructuringElement.h"
#include "itkBinaryThresholdImageFilter.h"
//C++
#include "iostream"
using namespace std;
int main() {
    // 实例化对象模型
    const unsigned int Dimension = 2;
    typedef unsigned char   InputPixelType;
    typedef unsigned char   OutputPixelType;
    typedef itk::Image< InputPixelType,  Dimension >   InputImageType;
    typedef itk::Image< OutputPixelType, Dimension >   OutputImageType;
    typedef itk::ImageFileReader< InputImageType  >  ReaderType;
    typedef itk::ImageFileWriter< OutputImageType >  WriterType;

//用于二值图像的构造成员
    typedef itk::BinaryBallStructuringElement< InputPixelType, Dimension  > StructuringElementType;
    // 腐蚀,需要用输入、输出图像类型和构造成员实例化¯
    typedef itk::GrayscaleErodeImageFilter <
    InputImageType,
    OutputImageType,
    StructuringElementType >  ErodeFilterType;
    // 读取、写入图像文件滤波器
    ReaderType::Pointer reader = ReaderType::New();
    reader->SetFileName("../data/threshold.png");

    // /////*创建腐蚀滤波器对象
    ErodeFilterType::Pointer  GrayscaleErode  = ErodeFilterType::New();
    GrayscaleErode->SetInput(reader->GetOutput());
    // 创建构造成员对象
    StructuringElementType  structuringElement;
    // 设置构造成员的大小
    structuringElement.SetRadius(3);   //领域大小为3*3,结构元素se为3*3
    // 初始化构造成员的操作符
    structuringElement.CreateStructuringElement();
    // 设置腐蚀构造成员
    GrayscaleErode->SetKernel(structuringElement);

    // 触发腐蚀处理后的写操作
    WriterType::Pointer writerErosion  = WriterType::New();
    writerErosion->SetFileName("../save/Erosion.png");
    writerErosion->SetInput(GrayscaleErode->GetOutput());
    writerErosion->Update();
    return EXIT_SUCCESS;
}

发布了52 篇原创文章 · 获赞 6 · 访问量 5132

猜你喜欢

转载自blog.csdn.net/weixin_44723106/article/details/105298123