其他分享
首页 > 其他分享> > ITK 孔洞填充

ITK 孔洞填充

作者:互联网

1.GrayscaleFillholeImageFilter 

        填充孔洞,不对边缘造成影响(无平滑边缘效果)

        itk提供了两个的补洞类:itkGrayscaleFillholeImageFilter(针对灰度图像),  itkBinaryFillholeImageFilter(针对二值图像)

    //孔洞填充(灰度图像)
    typedef itk::GrayscaleFillholeImageFilter<ImageType, ImageType> FillHoleType;
    FillHoleType::Pointer fillHoleFilter = FillHoleType::New();
    fillHoleFilter->SetInput(thresholder1->GetOutput());
    fillHoleFilter->Update();

2.洞穴充填滤波器

        填充孔洞+平滑边缘

        Voting 滤波器的另一个变量是 Hold Filling 滤波器。这个滤波器仅仅在前景像素的数量在邻域中占大多数时将背景像素转变为前景。通过选择大多数的尺度,这个滤波器可以填充135 不同尺度的洞。为了更加精确,这个滤波器的效果和当前像素的边缘曲率密切相关。         本小节的源代码在文件 Examples/Filtering/VotingBinaryHoleFillingImageFilter.cxx 中。itk::VotingBinaryHoleFillingImageFilter 应用一个 Voting 操作以便于填充洞穴。这也可以用来在二值图像中平滑轮廓和填充洞穴。
//首先必须包含与这个滤波器相关的头文件:
#include "itkVotingBinaryHoleFillingImageFilter.h"

//然后必须定义输入和输出图像的像素和图像类型:
typedef unsigned char InputPixelType;
typedef unsigned char OutputPixelType;
typedef itk::Image< InputPixelType, 2 > InputImageType;
typedef itk::Image< OutputPixelType, 2 > OutputImageType;

//现在可以使用图像类型来定义滤波器的类型并创建滤波器对象:
typedef itk::VotingBinaryHoleFillingImageFilter<
InputImageType, OutputImageType > FilterType;
FilterType::Pointer filter = FilterType::New( );

//通过对相应的值传递一个 SizeType 对象来定义沿每个维的邻域大小。每个维的值作为一个矩形框的不完全尺寸来使用。例如:在二维情况下一个大小为 1×2 的 SizeType 将产生一个 3×5 的邻域。
InputImageType::SizeType indexRadius;// 生成一个领域
indexRadius[0] = radiusX; // 输入x方向领域半径
indexRadius[1] = radiusY; // 输入y方向领域半径
filter->SetRadius( indexRadius );// 导入一个领域

//由于这个滤波器需要一个二值图像作为输入,所以我们必须指定用来作为背景和前景的
灰度级。可以通过使用 SetForegroundValue( )和 SetBackgroundValue( )方式来设置:
filter->SetBackgroundValue( 0 );//背景像素值
filter->SetForegroundValue( 255 );//前景像素值

//我们也必须指定用来作为判别将背景像素转变为前景像素的判断标准的大多数阈值。
//转变的规则是:通过这个大多数阈值来判断,如果邻域中前景的数量大于背景的数量,就将背景像素转变为前景像素。
//例如:在一个二维图像中,选择邻域半径为 1,则邻域大小为 3×3。如果我们设置大多数阈值为 2,则我们需要邻域中前景的数量至少为(3×3-1)/2 并加上大多数值。这可以使用 SetMajorityThreshold( )方式来完成:
filter->SetMajorityThreshold( 2 );//比平均领域数量多一个"大多数值"
filter->SetInput( reader->GetOutput( ) );
writer->SetInput( filter->GetOutput( ) );
writer->Update( );
        如图 6-19 所示阐述了 VotingBinaryHoleFillingImageFilter 滤波器在一个 MRI 脑部图像的 136 阈值分割切片上作用的效果,使用的邻域半径分别为 1×1 、 2×2 和 3×3 ,对应的邻域尺度分别为 3×3 、 5×5 和 7×7 。这个滤波的图像展示了这个滤波器同时在前景和背景中消除噪声的能力,类似于平滑区域的边界。

3.迭代洞穴充填滤波器

         填充孔洞+平滑边缘

        Hold Filling 滤波器可以以迭代的方式来使用,通过反复地应用滤波器直到没有像素变化为止。本文中,滤波器可以被看成是一个水平集滤波器的二值变量。         本小节的源代码在文件Examples/Filtering/VotingBinaryIterativeHoleFillingImageFilter.cxx 中。         itk::VotingBinaryIterativeHoleFillingImageFilter 应用一个 Voting 操作以便于填充洞穴。这也可以用来在二值图像中平滑轮廓和填充洞穴。这个滤波器内部反复运行 itk::VotingBinaryHoleFillingImageFilter 直到没有像素变化或到达了大多数迭代器。
//首先必须包含与这个滤波器相关的头文件:
#include "itkVotingBinaryIterativeHoleFillingImageFilter.h"

//然后必须定义像素类型和图像类型。注意这个滤波器需要输入和输出图像的类型相同,因此需要一个单一的图像类型来进行模板实例化:
typedef unsigned char PixelType;
typedef itk::Image< PixelType, 2 > ImageType;

//现在可以使用图像类型来定义滤波器的类型并创建滤波器对象:
typedef itk::VotingBinaryIterativeHoleFillingImageFilter<
ImageType > FilterType;
FilterType::Pointer filter = FilterType::New( );

//通过对相应的值传递一个 SizeType 对象来定义沿每个维的邻域大小。每个维的值作为一个矩形框的不完全尺寸来使用。例如:在二维情况下一个大小为 1×2 的 SizeType 将产生一个 3×5 的邻域:
ImageType::SizeType indexRadius;
indexRadius[0] = radiusX; // radius along x
indexRadius[1] = radiusY; // radius along y
filter->SetRadius( indexRadius );

//由于这个滤波器需要一个二值图像作为输入,所以我们必须指定用来作为背景和前景的
灰度级。可以通过使用 SetForegroundValue( )和 SetBackgroundValue( )方式来设置:
filter->SetBackgroundValue( 0 );
filter->SetForegroundValue( 255 );

//我们也必须指定用来作为判别将背景像素转变为前景像素的判断标准的大多数阈值。转变的规则是:通过对这个大多数阈值进行来判断,如果邻域中前景的数量大于背景的数量就将背景像素转变为前景像素。
//例如:在一个二维图像中,选择邻域半径为 1,则邻域大小为3×3。如果我们设置大多数阈值为 2,则我们需要邻域中前景的数量至少为(3×3-1)/2 并加上大多数值。这可以使用 SetMajorityThreshold( )方式来完成:
filter->SetMajorityThreshold( 2 );

//最后我们指定这个滤波器需要运行的迭代的最大次数。迭代的数量将决定这个滤波器能填充的洞穴的最大尺度。迭代的次数越多,填充的洞穴就越大。
filter->SetMaximumNumberOfIterations( numberOfIterations );
filter->SetInput( reader->GetOutput( ) );
writer->SetInput( filter->GetOutput( ) );
writer->Update( );

        如图 6-20 所示阐述了 VotingBinaryIterativeHoleFillingImageFilter 滤波器对一个 MRI 脑部图像的阈值分割切片作用的效果,使用的邻域半径分别为 1×1 、 2×2 和 3×3 ,对应的邻域 尺度分别为 3×3 、 5×5 和 7×7 。这个滤波的图像展示了这个滤波器同时在前景和背景中消除噪声的能力,类似于平滑区域的边界。         这个滤波的图像展示了这个滤波器同时在前景和背景中消除噪声的能力,类似于平滑区域的边界。

标签:孔洞,滤波器,ITK,填充,邻域,像素,filter,图像,itk
来源: https://blog.csdn.net/weixin_43798712/article/details/122777331