ITK 实例8 PNG图像进行不带滤波的二维导函数提取
使用itk::DerivativeImageFilter来计算一幅图像的偏微分——图像沿一个特定的坐标轴方向上的微分。
1 #include "itkImage.h" 2 #include "itkImageFileReader.h" 3 #include "itkImageFileWriter.h" 4 #include "itkRescaleIntensityImageFilter.h" 5 6 #include "itkDerivativeImageFilter.h"//不带滤波导函数头文件 7 8 int main( int argc, char * argv[] ) 9 17 /*接下来,必须定义输入、输出图像的像素类型,并使用它们实例化图像类型。注意:由 18 于导数值是可正可负的,所以选择的图像应具有符号类型是很重要的*/ 19 typedef float InputPixelType; 20 typedef float OutputPixelType; 21 22 const unsigned int Dimension = 2; 23 24 typedef itk::Image< InputPixelType, Dimension > InputImageType; 25 typedef itk::Image< OutputPixelType, Dimension > OutputImageType; 26 27 typedef itk::ImageFileReader< InputImageType > ReaderType; 28 typedef itk::ImageFileWriter< OutputImageType > WriterType; 29 //现在就可以使用图像类型来定义滤波器类型并创建滤波器对象 30 ReaderType::Pointer reader = ReaderType::New(); 31 WriterType::Pointer writer = WriterType::New(); 32 //输入图像 33 reader>SetFileName("BrainProtonDensitySlice.png"); 34 保存输出某方向(本例由于为二维图,所以为x轴或y轴)导数图像 35 //writer>SetFileName("BrainProtonDensitySlice_Derivative.png"); 36 37 typedef itk::DerivativeImageFilter< 38 InputImageType, OutputImageType > FilterType; 39 40 FilterType::Pointer filter = FilterType::New(); 41 //使用 SetOrder( ) 方式来选择微分的阶数。使用 SetDirection( ) 方式来选择计算微分的坐标方向 42 filter>SetOrder(atoi("1"));//选择一阶微分 43 filter>SetDirection( atoi("0") );//选择X方向 44 /*可以从任何其他滤波器得到这个滤波器的输入,例如一个 reader 。输出可以像一个 writer 45 一样传递给其他滤波器流水线。任何下游的滤波器调用 update 都可以触发微分滤波器的运 46 行*/ 47 filter>SetInput( reader>GetOutput() ); 48 /*writer>SetInput( filter>GetOutput() );*/ 49 /*writer>Update();*/ 50 51 typedef itk::Image< unsigned char, Dimension > WriteImageType; 52 53 typedef itk::RescaleIntensityImageFilter< 54 OutputImageType, 55 WriteImageType > NormalizeFilterType; 56 57 typedef itk::ImageFileWriter< WriteImageType > NormalizedWriterType; 58 59 NormalizeFilterType::Pointer normalizer = NormalizeFilterType::New(); 60 NormalizedWriterType::Pointer normalizedWriter = NormalizedWriterType::New(); 61 62 normalizer>SetInput( filter>GetOutput() ); normalizedWriter>SetInput( normalizer>GetOutput() ); 64 65 normalizer>SetOutputMinimum( 0 ); 66 normalizer>SetOutputMaximum( 255 ); 67 //导数图像(含有负数)进行(0255)线性标准化后图像 68 normalizedWriter>SetFileName("Derivative_normalizer_x_1.png"); 69 normalizedWriter>Update(); 70 71 return EXIT_SUCCESS; 72 }下图阐述了 DerivativeImageFilter 对一个 MRI 脑部图像作用的效果。微分是沿 着 x 轴和y轴方向来计算的。从这个结果可以看出对图像中的噪声的敏感度是很明显的。
上一篇:ITK 实例9 孤立连接算法对脑部MHA文件进行三维分割
下一篇:OpenCV3.2图像分割 实例2:KMeans对随机生成数据进行分类
ITK
pla文件怎么看,pla文件用什么打开?
pl1文件怎么看,pl1文件用什么打开?
pl文件怎么看,pl文件用什么打开?
pl0文件怎么看,pl0文件用什么打开?
pkt文件怎么看,pkt文件用什么打开?
pkm文件怎么看,pkm文件用什么打开?
pks文件怎么看,pks文件用什么打开?
pka文件怎么看,pka文件用什么打开?
pkh文件怎么看,pkh文件用什么打开?
pkg文件怎么看,pkg文件用什么打开?