ITK 数据表达(图像)
1.创建图像
//首先,必须包含图像类的头文件:
#include “itkImage.h”//然后必须决定像素的类型和图像的维,用这两个参数对图像类进行实例化。下面是创建一个三维、像素是无符号短字符数据类型的图像的程序:
typedef itk::Image< unsigned short, 3 > ImageType;//然后就可以调用 New( )操作创建图像并将结果分配到 itk::SmartPointer。
ImageType::Pointer image = ImageType::New( );
如上所述,在 ITK 中人为地创建图像需要对图像进行实例化,并将描述图像的区域与图像结合起来。
一个区域是由两个类来定义的:itk::Index 和 itk::Size 类。与图像结合的图像中的原始区域是由 Index 来定义的。区域的延伸或大小是由 Size 来定义的。Index 是由一个 n 维数列来表示的,在拓扑图像结构中这些表示图像最初的像素的数列的元素都是整数。当人为创建图像时,用户就需要定义图像的大小和图像的起始位置。有了这两个参数,就可以选择处理的区域。
图像的起始点是由一个 Index 类定义的,这个类中存放了一个 n 维数列,数列中的元素都是整数,表示图像中各维上最初的像素值。
ImageType::IndexType start;//起点位置
start[0] = 0; // first index on X
start[1] = 0; // first index on Y
start[2] = 0; // first index on Z//区域大小是用一个相同大小的图像数列来表示的(使用 Size 类),数列中的元素是无符号
整数,表示图像像素在各个方向上的延伸。
ImageType::SizeType size;//各方向尺寸
size[0] = 200; // size along X
size[1] = 200; // size along Y
size[2] = 200; // size along Z//定义了起始地址和图像大小这两个参数就可以创建一个 ImageRegion 对象,这个区域是
用图像的起始地址和大小来初始化的。
ImageType::RegionType region;
region.SetSize( size );
region.SetIndex( start );
最后,这个区域传递给图像对象来定义其延伸和初始地址。SetRegion 方法同时设定了LargePossibleRegion、BufferedRegion 和 RequestedRegion。注意:并未执行任何操作来给图像像素数据分配内存,调用 Allocate( )来进行分配内存,直到给区域分配了足够的内存来存放信息分配都不需要任何指令。
image->SetRegions( region );
image->Allocate( );
2.从文件中读取图像
ImageType::Pointer image = reader->GetOutput( );
3.访问像素数据
ImageType::IndexType pixelIndex;
pixelIndex[0] = 27; // x position
pixelIndex[1] = 29; // y position
pixelIndex[2] = 37; // z position
ImageType::PixelType pixelValue = image->GetPixel( pixelIndex );
image->SetPixel( pixelIndex, pixelValue+1 );
4.定义原点和间距
ImageType::SpacingType spacing;
// Note: measurement units (e.g., mm, inches, etc.) are defined by the application.
spacing[0] = 0.33; // spacing along X
spacing[1] = 0.33; // spacing along Y
spacing[2] = 1.20; // spacing along Z
image->SetSpacing( spacing );
const ImageType::SpacingType& sp = image->GetSpacing( );
std::cout << "Spacing = ";
std::cout << sp[0] << ", " << sp[1] << ", " << sp[2] << std::endl;
ImageType::PointType origin;
origin[0] = 0.0; // coordinates of the first pixel in N-D
origin[1] = 0.0;
origin[2] = 0.0;
image->SetOrigin( origin );
const ImageType::PointType& orgn = image->GetOrigin( );
std::cout << "Origin = ";
std::cout << orgn[0] << ", " << orgn[1] << ", " << orgn[2] << std::endl;
typedef itk::Point< double, ImageType::ImageDimension > PointType;
PointType point;
point[0] = 1.45; // x coordinate
point[1] = 7.21; // y coordinate
point[2] = 9.28; // z coordinate
ImageType::IndexType pixelIndex;
bool isInside = image->TransformPhysicalPointToIndex( point, pixelIndex );
if ( isInside )
{
ImageType::PixelType pixelValue = image->GetPixel( pixelIndex );
pixelValue += 5;
image->SetPixel( pixelIndex, pixelValue );
}
ITK 数据表达(图像)相关推荐
- 基于C++的ITK图像分割与配准学习笔记1(图像数据表达-图像)
ITK学习参考资料整理汇总(包含 ItkSoftwareGuide.PDF英文版.ItkSoftwareGuide-2.4.0-中文版.医学图像分割与配准(1ITK初步分册) (1)PDF. 医学图像 ...
- ITK读取RGB图像像素值
/*这个程序接收输入参数作为文件路径, 读取指定的图片数据(RGB), 并显示指定位置的像素值.(这里是[0,0]位置) */ #include "itkImage.h" #inc ...
- 斯坦福大学数据可视化课程学习笔记:第二节 从数据到图像
<斯坦福大学数据可视化课程学习笔记>课程资源来自于斯坦福大学数据可视化课程,是我所在团队实习生提升计划的一部分.本系列是 "秉姝" 同学在学习过程中记录和整理的学习笔记 ...
- 5 | PyTorch加载真实数据:图像、表格、文本,one-hot
在实际的工作中,常见的机器学习处理的数据大概分成三种,一种是图像数据,图像数据通常是RGB三通道的彩色数据,图像上的每个像素由一个数值表示,这个其实比较容易处理:一种是文本数据,文本数据挖掘就是我们通 ...
- R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字、并为类型数据添加图像符号标签
R语言使用gt包和gtExtras包优雅地.漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解.使用gtExtras包添加一个图,显示表中某一列中的数字.并为类型数据添加图像符号标签 目 ...
- Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略
Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图
- Facebook开源数据高效图像Transformer,媲美SOTA CNN
作者|魔王.小舟.杜伟 来源|机器之心 将自然语言处理领域主流模型 Transformer 应用在视觉领域似乎正在成为趋势.最近,Facebook 研究人员提出一项新技术--数据高效图像 Transf ...
- 计算机视觉:数据预处理-图像增广方法
计算机视觉:数据预处理-图像增广方法 数据预处理 随机改变亮暗.对比度和颜色等 随机填充 随机裁剪 随机缩放 随机翻转 随机打乱真实框排列顺序 图像增广方法汇总 批量数据读取与加速 数据预处理 在计算 ...
- ITK:处理3D图像的2D切片
ITK:处理3D图像的2D切片 内容提要 C++实现代码 内容提要 此示例说明了从3D体积中提取2D切片的常见任务.在该切片上执行一些处理,然后将其粘贴到与输入中的卷相同大小的输出卷上. C++实现代 ...
最新文章
- AI在医疗行业的最新进展
- 【编程大系】Java资源汇总
- mysql 添加用户_mysql创建用户与授权
- Java字符类isUpperCase()方法与示例
- 前端学习(768):构造对象与对象区别
- .NET二级域名共享Session
- CarMaker快速入门
- 使用hydra离线破解windows密码
- 论文中的三线表及表格规范
- 质因数分解的一些讨论(Pollard-Rho算法)
- 快车解密php,PHP迅雷、快车、旋风下载专用链转换代码
- Python面向对象案例之语音计算器
- APP推广:app推广的渠道有哪些既简单又有效的?
- 点灯科技——小爱同学/RFID/四路继电器
- 基于yolov5与改进VGGNet的车辆多标签实时识别算法
- Python 中 Logging 模块使用详情
- Android Amazon S3 功能接入
- 2020 年度开发工具 Top 100
- jieba分词自定义词典
- 开源IM项目OpenIM每周迭代版本发布-群管理 阅后即焚等-v2.0.6
热门文章
- 在windows下安装yii2框架
- Debian11_kubeadm1.23.5使用ingress-nginx暴露dashboard(3)
- 屏蔽QQ群消息的简单方法(转)
- hive on spark 线上问题排查案例分享
- linux下nginx安装与配置说明
- 华为的鸿蒙河图名字,华为地图起名“河图”,再次震撼国人
- 基于HTML旅游网站设计与实现 途游网站制作 学生DW静态旅游网页设计 html静态旅游风景区网页设计制作 web前端课程设计 web前端课程设计代码 web课程设计
- android 获取移动网络,Android获取移动当前APP移动流量的方法
- 防卫厅,采用VE合约制度
- pipenv install 包名 报错问题解决