ITK学习笔记-2:图像采样
来源:互联网 发布:basic编程语言 编辑:程序博客网 时间:2024/05/01 01:20
主要是利用ITK对RBG图像进行采样处理。至于ITK的管道结构等基础概念不在此进行讨论,本文直接给出代码。
运行时候界面如下图所示:
#include "itkImage.h"#include "itkIdentityTransform.h"#include "itkImageFileReader.h"#include "itkVectorResampleImageFilter.h"#include "itkVectorNearestNeighborInterpolateImageFunction.h"#include "itkRGBPixel.h"#include "QuickView.h"typedef itk::Image<itk::RGBPixel<unsigned char>, 2> ImageType;static void CreateImage(ImageType::Pointer image);int main(int argc, char *argv[]){double factor = 2.0;// Create input imageImageType::Pointer input;if(argc < 2){input = ImageType::New();CreateImage(input);}else{typedef itk::ImageFileReader<ImageType> ReaderType;ReaderType::Pointer reader = ReaderType::New();reader->SetFileName(argv[1]);reader->Update();input = reader->GetOutput();if (argc > 2){factor = atof(argv[2]);}}ImageType::SizeType inputSize = input->GetLargestPossibleRegion().GetSize();std::cout << "Input size: " << inputSize << std::endl;// ResizeImageType::SizeType outputSize;outputSize[0] = inputSize[0] * factor;outputSize[1] = inputSize[1] * factor;ImageType::SpacingType outputSpacing;outputSpacing[0] = input->GetSpacing()[0] * (static_cast<double>(inputSize[0]) / static_cast<double>(outputSize[0]));outputSpacing[1] = input->GetSpacing()[1] * (static_cast<double>(inputSize[1]) / static_cast<double>(outputSize[1]));typedef itk::IdentityTransform<double, 2> TransformType;typedef itk::VectorResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;ResampleImageFilterType::Pointer resample = ResampleImageFilterType::New();resample->SetInput(input);resample->SetSize(outputSize);resample->SetOutputSpacing(outputSpacing);resample->SetTransform(TransformType::New());resample->UpdateLargestPossibleRegion();typedef itk::VectorNearestNeighborInterpolateImageFunction<ImageType, double > NearestInterpolatorType;NearestInterpolatorType::Pointer nnInterpolator =NearestInterpolatorType::New();ResampleImageFilterType::Pointer resampleNN =ResampleImageFilterType::New();resampleNN->SetInput(input);resampleNN->SetSize(outputSize);resampleNN->SetOutputSpacing(outputSpacing);resampleNN->SetTransform(TransformType::New());resampleNN->SetInterpolator(nnInterpolator);//相比较于,多了最近邻插值resampleNN->UpdateLargestPossibleRegion();ImageType::Pointer output = resample->GetOutput();std::cout << "Output size: " << output->GetLargestPossibleRegion().GetSize() << std::endl;QuickView viewer;viewer.AddRGBImage(input.GetPointer(),true,"Original");viewer.AddRGBImage(output.GetPointer(),true,"Resampled");viewer.AddRGBImage(resampleNN->GetOutput(),true,"Resampled NN");viewer.Visualize();return EXIT_SUCCESS;}void CreateImage(ImageType::Pointer image){// Create a black image with 2 white regionsImageType::IndexType start;start.Fill(0);ImageType::SizeType size;size.Fill(200);ImageType::RegionType region(start,size);image->SetRegions(region);image->Allocate();image->FillBuffer( itk::NumericTraits< ImageType::PixelType >::Zero);ImageType::PixelType pixel;pixel.SetRed(200);pixel.SetGreen(50);pixel.SetBlue(50);// Make a squarefor(unsigned int r = 20; r < 80; r++){for(unsigned int c = 30; c < 100; c++){ImageType::IndexType pixelIndex;pixelIndex[0] = r;pixelIndex[1] = c;image->SetPixel(pixelIndex, pixel);}}}
运行时候界面如下图所示:
因为主程序中所采样的是int main(int argc, char*argv[])
所以在执行exe的时候,通过dos窗口进行exe所在的目录,后续的两个参数分别为F:\DIPcode\SIMC\imagesrc\2.jpg 0.2
第一个参数用于指定待处理的图像,第二个参数说明采样率。此处设置为0.2,则采样后的图像为原始图像尺寸的0.2倍。如上图可以看到,原始图像是512X512的图像,采样之后图像的尺寸变为102X102,约为512*0.2。
运行结果如下图所示:
0 0
- ITK学习笔记-2:图像采样
- ITK学习笔记:图像FFT
- ITK resample图像重采样
- ITK学习笔记-1:图像的读写
- 图像处理学习笔记1 下采样和上采样
- ITK图像配准01-学习
- 图像的降采样与升采样笔记
- 图像采样
- ITK IOBase 图像属性
- 利用ITK旋转图像
- itk中的图像归一化
- 用ITK读、写一幅2D图像(DICOM切片)
- 【ITK学习笔记】How To Wite A Filter
- ITK图像配准介绍
- ITK图像分割三个示例
- ITK的图像配准
- 医学图像处理工具包ITK
- ITK图像读写及显示
- jdk与jre的区别
- DbVisualize配置连接informix数据库
- solr安装
- Swift learn 6
- VxWorks下MPC860的中断处理机制及其应用
- ITK学习笔记-2:图像采样
- Android开发规范
- access
- SQL Server的文件监控
- 程序员技术练级攻略
- CSipsimple最新版本编译
- 在myeclipse中生成自己的template提示
- alphasort
- Linux解决问题篇之ftp:connect:没有主机路由