ITK系列14_ PNG图像进行带滤波的二维梯度强度提取

40 篇文章 2 订阅
34 篇文章 29 订阅

实例14 PNG图像进行带滤波的二维梯度强度提取

微分是对一个数字数据的不规则操作。实际中可以方便地定义一个执行微分的比例。在执行这样的滤波时使用一个高斯核被认为是最便捷的选择。通过选择一个特定的高斯标准差(σ)就可以选择一个相应的比例来去除通常被认为是噪声的高频部分
itk::GradientMagnitudeRecursiveGaussianImageFilter 计算在每个像素的图像梯度。这个计算过程等同于首先通过将图像和一个高斯核卷积来平滑图像,然后应用一个差分操作。 s 的值是由用户选择的。这些是通过使用一个 IIR ( Infinite Impulse Response 无限脉冲响应)和高斯核的派生卷积来实现的。传统的卷积将产生一个更精确的结果,但是 IIR 方式更加迅速,尤其是使用大的 σ 值。GradientMagnitudeRecursiveGaussianImageFilter 通过使用高斯核和它的导函数的自然分离来对任何维的图像进行操作。

如下图所示阐述了这个滤波器对一个 MRI 脑部图像切片作用的效果,使用的 σ 值分别为 1 ( 左图)、 3 (中图)、 5 (右图)滤波器对一个 MRI 脑部图像切片作用的效果。

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"//带滤波梯度强度的头文件

int main( int argc, char * argv[] )
{
  /*if( argc < 4 )
    {
    std::cerr << "Usage: " << std::endl;
    std::cerr << argv[0] << "  inputImageFile   outputImageFile   sigma" << std::endl;
    return EXIT_FAILURE;
    }*/
  //类型必须基于输入和输出图像的像素进行实例化
  typedef    float    InputPixelType;
  typedef    float    OutputPixelType;
  //使用它们就可以对输入、输出图像进行实例化
  typedef itk::Image< InputPixelType,  2 >   InputImageType;
  typedef itk::Image< OutputPixelType, 2 >   OutputImageType;
  //现在同时使用输入和输出图像类型来实例化滤波器类型
  typedef itk::ImageFileReader< InputImageType >  ReaderType;
  typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
                        InputImageType, OutputImageType >  FilterType;
  //通过调用 New( ) 方式来创建一个滤波器对象并将结果指向一个 itk::SmartPointer
  ReaderType::Pointer reader = ReaderType::New();
  //输入图像
  reader->SetFileName("BrainProtonDensitySlice.png");

  FilterType::Pointer filter = FilterType::New();
  //输入图像可以从另一个滤波器的输出得到。这里,源自于一个图像 reader 来得到
  filter->SetInput( reader->GetOutput() );
  //对高斯滤波核的标准差进行赋值
  const double sigma = atof("1");
  //现在设置高斯滤波核的标准差
  filter->SetSigma( sigma );
  //最后,通过调用 Update( ) 方式来执行滤波器
  filter->Update();
  
  typedef unsigned char                   WritePixelType;
  typedef itk::Image< WritePixelType, 2 > WriteImageType;

  typedef itk::RescaleIntensityImageFilter<
                   OutputImageType, WriteImageType > RescaleFilterType;

  RescaleFilterType::Pointer rescaler = RescaleFilterType::New();

  rescaler->SetOutputMinimum(   0 );
  rescaler->SetOutputMaximum( 255 );

  typedef itk::ImageFileWriter< WriteImageType >  WriterType;

  WriterType::Pointer writer = WriterType::New();
  //输出强度图像
  writer->SetFileName("GradientMagnitude_RG_1.png");
  /*如果这个滤波器的输出已经连接到流水线中的其他滤波器,更新任何下游的滤波器将同
      样触发这个滤波器的一个更新。例如,梯度强度滤波器可能连接到一个图像 writer*/
  rescaler->SetInput( filter->GetOutput() );
  writer->SetInput( rescaler->GetOutput() );
  writer->Update();

  return EXIT_SUCCESS;
}

                                      

                  输入图像                              梯度强度图(σ=1)                  梯度强度图(σ=3)                  梯度强度图(σ=5)

由于梯度强度图像的动态范围往往比输入图像的动态范围要小,所以必须注意选择用来表达输出图像的图像类型。

 

ITK系列目录:

1 ITK图像数据表达之图像

2 ITK图像处理之图像滤波

3 ITK图像处理之图像分割

注:例程配套素材见系列目录

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦我飞也

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值