ITK 形态学处理(Morph process)

来源:互联网 发布:在淘宝上如何做代理 编辑:程序博客网 时间:2024/05/22 00:44

定义:数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。

具体定义参考博客http://blog.csdn.net/poem_qianmo/article/details/23710721

ITK中使用NeighborhoodIteratorsitk::NeighborhoodOperators来实现数学形态学滤波器。研发平台中包含有两种图像形态学算法:对二值图像操作的滤波器和对灰度尺图像操作的滤波器。

itk::BinaryErodeImageFilter  腐蚀操作

itk::BinaryDilateImageFilter  膨胀操作

ITK中的数学形态学操作通过对每个输入像素的邻域应用一个操作来实现。规则和邻域的结合被称为构造成员。

下面包含了构造一个简单地使用数学形态学滤波器需要的头文件:
#include "itkBinaryErodeImageFilter.h"
#include "itkBinaryDilateImageFilter.h"
#include "itkBinaryBallStructuringElement.h"
接下来的代码定义了输入、输出像素类型以及和它们相关的图像类型:
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;

构造成员是作为一个NeighborhoodOperator来实现的。事实上,默认的构造成员是
itk::BinaryBallStructuringElement 类。这个类是使用像素类型和输入图像维来进行实例化的:
typedef itk::BinaryBallStructuringElement<
InputPixelType,
Dimension > StructuringElementType;
然后使用构造成员类型和输入、输出图像类型一起来对滤波器类型进行实例化:
typedef itk::BinaryErodeImageFilter<
InputImageType,
OutputImageType,
StructuringElementType > ErodeFilterType;
typedef itk::BinaryDilateImageFilter<
InputImageType,
OutputImageType,
StructuringElementType > DilateFilterType;
现在通过调用 New( )方式来创建这个滤波器并将结果指向一个itk::SmartPointer
ErodeFilterType::Pointer binaryErode = ErodeFilterType::New( );
DilateFilterType::Pointer binaryDilate = DilateFilterType::New( );

构造成员不是一个引用记数类。因此它是作为一个C++堆栈而不是使用New( )SmartPointers来创建的。使用SetRadius( )方式来定义和构造成员相关的邻域半径并调用CreateStructuringElement( )方式以便于初始化操作符。如下面所阐述的那样,使用SetKernel( )方式将构造成员的结果传递给数学形态学滤波器。

StructuringElementType structuringElement;
structuringElement.SetRadius( 1 ); // 3x3 structuring element
structuringElement.CreateStructuringElement( );

130
binaryErode->SetKernel( structuringElement );
binaryDilate->SetKernel( structuringElement );









0 0
原创粉丝点击