ITK学习笔记1--使用ITK创建图像

用到的头文件:#include<itkImage.h>
整体思路: 首先创建一个Image图像对象,然后创建一个区域并且对该区域的原点和大小进行初始化,最后关联区域和图像,并且为图像分配内存。

我的理解就是
ITK创建图像对象是没有初始化位置和图像范围的,所以要创建一个区域对象,对他进行位置和范围赋值,然后告诉图像:你要到那个区域去(也就是将图像与区域关联)**

itk:: Image<TPixel,VImageDimeniton>模板类

TPixel:像素类型
VImageDimeniton:图像维度
带着这两个参数我们可以实例化Image类

可以使用

using ImageType = itk::Image<unsigned short,3>

或者

typedef itk::Image<unsigned short, 3> ImageType;	

语句来创建一个 像素类型为unsigned short的3D图像。
(这个还是比较好理解的,如果有不太懂得可以去百度一下Typedef的用法)

ImageType::Pointer image = ImageType::New();

利用Image类自带的智能指针Pointer通过New()方法来创建image图像

图像区域

(翻译自官网,可能会不太准确)
在 ITK 中,图像以一个或多个区域组合的形式存在。一个区域是图像的一个子集,并有可能是系统中其他类所占有的图像的一部分。
LargePossibleRegion 是一个以完整部分定义的图像。
BufferedRegion 是内存中图像的一部分
RequestedRegion 是在对图像进行操作时被滤波器或其他类要求的一部分。

在ITK中,手动创建一个图像需要如前所示实例化该图像,然后将描述该图像的区域与其关联。
区域由两个类定义:Index和Size类。

  • 图像的起始点是由 Index 类定义的,这个类中存放了一个 n 维数列,数列中的元素都是整数,表示图像中各维上最初的像素值。

     ImageType::IndexType start;
     start[0] = 0; 
     start[1] = 0; 
     start[2] = 0;
    
  • 区域大小由Size类定义,由与图像相同维度的数组表示。数组的组成部分是无符号整数,表示图像沿每个维度的像素范围。

     ImageType::SizeType size;
     size[0] = 200;
     size[1] = 200; 
     size[2] = 200; 
    

在定义了起始索引和图像大小之后,我们用他们来创建一个区域对象region,并且赋值。

	ImageType::RegionType region;
	region.SetSize(size);
	region.SetIndex(start);

然后我们要利用SetRegions()来将定义好的区域传递给Image对象,来定义图像对象的原点和范围(SetRegions()方法是同时设置LargestPossibleRegion,BufferedRegion和RequestedRegion的)。
最后,到目前为止我们还没有为图像像素数据分配内存,所以我们要调用Allocate()来分配内存

	image->SetRegions(region);
	image->Allocate();

完整代码

#include "itkImage.h"
int main(int, char *[]) {
	using ImageType = itk::Image<unsigned short, 3>;
 	ImageType::Pointer image = ImageType::New();
 	ImageType::IndexType start;
 	start[0] = 0; 
  	start[1] = 0; 
  	start[2] = 0; 
 	ImageType::SizeType size;
 	size[0] = 200; 
  	size[1] = 200;
  	size[2] = 200;
  	ImageType::RegionType region;
 	region.SetSize(size);
  	region.SetIndex(start); 、
	image->SetRegions(region);
  	image->Allocate();
	return EXIT_SUCCESS;
}

参考:https://itk.org/Doxygen/html/Examples_2DataRepresentation_2Image_2Image1_8cxx-example.html
https://blog.csdn.net/gxuan/article/details/7630100

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值