ITK学习笔记-2:图像采样

主要是利用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 image
	ImageType::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;

	// Resize
	ImageType::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 regions

	ImageType::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 square
	for(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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: itksoftwareguide-2.4.0-中文版是一份ITK软件指南的中文版本。ITK(Insight Segmentation and Registration Toolkit)是一个用于图像分割和配准的开源软件库,被广泛用于医学影像处理领域。 这个指南提供了ITK软件的详细说明和使用方法,包括安装、编译、配置和运行等方面的指导。它的内容主要分为几个部分:介绍、基础知识、进阶内容和应用示例。 在介绍部分,读者可以了解到ITK的背景、目标和基本原理,以及它在医学影像处理中的应用领域。基础知识部分深入介绍了ITK的核心概念、数据结构和算法,以及如何使用ITK进行图像处理和分析。 进阶内容部分讲解了更高级的主题,包括多线程编程、可视化、图像配准和分割算法的实现等。应用示例部分提供了一些实际应用场景的案例,帮助读者更好地理解和应用ITK软件。 通过阅读这份指南,读者可以全面了解ITK软件的基本概念和使用方法,掌握图像处理和分割的基本技术,从而能够在医学影像处理领域中进行相关的研究和开发工作。这对于那些对医学影像处理感兴趣的研究者和开发人员来说是非常有价值的参考资料。 ### 回答2: itksoftwareguide-2.4.0中文版是一个关于ITK(Insight Segmentation and Registration Toolkit)软件的指南,该软件是一种用于图像处理和分析的开源工具。该指南介绍了ITK软件的安装、使用和常见问题解答等方面的内容。 首先,ITK软件是一个用C++编写的跨平台的图像处理库,它提供了一系列的图像处理算法和工具。通过使用ITK,用户可以进行图像分割、配准、变形、滤波、重建等各种图像处理和分析任务。 该指南的中文版是为了方便中文用户更好地理解和使用ITK软件而编写的。它详细介绍了ITK软件的安装步骤和配置要求,以及如何加载和使用ITK库。同时,该指南还提供了丰富的实例和示例代码,帮助用户快速上手和学习ITK软件的使用方法。 此外,指南中还涵盖了一些常见问题和解决方法,帮助用户解决在使用ITK软件过程中遇到的困难和错误。用户可以根据具体问题在指南中查找答案,以提高工作效率和准确性。 总而言之,itksoftwareguide-2.4.0-中文版是一本关于ITK软件的详细指南,旨在帮助中文用户更好地理解和使用ITK软件。其内容包括软件安装、使用方法、示例代码和常见问题解答等方面,为使用ITK软件的用户提供了全面的帮助和指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值