热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

5.3.3图像类型转换

注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:https:blog.csdn.netwww_doling_netarticledetails8541534

注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:

https://blog.csdn.net/www_doling_net/article/details/8541534

1.vtkImageCast

这个类进行类型转换时,只是将类型进行强制转换,而没有进行比例的缩放,因此使用起来会比较受限,因此VTK中时不推荐使用这个类的,例如一副double类型的图像,图像值的范围[-1,1]。如果需要将图像转化为unsigned char类型,这种方法是不可行的!

2.vtkImageShiftScale

这个类时用起来要比上一类更加的灵活。他可以指定偏移和比例参数来对输入图像数据进行操作,例如一副double类型的图像,其数值范围为[-1,1],如果将其转换为unsigned char类型,需要设置shift=+1,Scale=127.5;那么输入图像的数据-1可以被映射为(-1+1)*127.5=0;+1可以被映射为(1+1)*127.5=255。具体使用方法如下所示:

#include"vtkSmartPointer.h"
#include"vtkImageCast.h"
#include"vtkImageShiftScale.h"
#include"vtkBMPReader.h"
#include"vtkMetaImageReader.h"
#include"vtkImageViewer2.h"
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"

int main(){
	vtkSmartPointer reader = vtkSmartPointer::New();
	reader->SetFileName("head.mhd");
	reader->Update();
	//第一种类型转换方案
	vtkSmartPointer imgCast = vtkSmartPointer::New();
	imgCast->SetInputData((vtkDataObject *)reader->GetOutput());
	imgCast->SetOutputScalarTypeToFloat();
	//第二种转换方式
	vtkSmartPointer imgShiftScale = vtkSmartPointer::New();
	imgShiftScale->SetInputData((vtkDataObject *)reader->GetOutput());
	imgShiftScale->SetOutputScalarTypeToFloat();

	vtkSmartPointer imgViewer = vtkSmartPointer::New();
	imgViewer->SetInputConnection(imgShiftScale->GetOutputPort());   //imgShiftScale->GetOutputPort()在这里设置用第一种还是第二种类型转换方式

	vtkSmartPointer rwi = vtkSmartPointer::New();
	imgViewer->SetupInteractor(rwi);

	imgViewer->SetColorLevel(500);
	imgViewer->SetColorWindow(2000);
	imgViewer->SetSlice(20);
	imgViewer->SetSliceOrientationToXY();
	imgViewer->Render();

	imgViewer->GetRenderer()->SetBackground(1, 1, 1);
	imgViewer->SetSize(640,480);
	imgViewer->GetRenderWindow()->SetWindowName("imageTypeTrans");

	rwi->Start();


	return EXIT_SUCCESS;
}

运行结果:


参考资料:

1.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
2. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

所用软件:vtk7.0+visual studio 2013

推荐阅读
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了lintcode(12)题目的要求和解题思路,以及给出了相应的代码实现。题目要求在给定的字符串source中找到包括所有目标字符串字母的最短子串,并且时间复杂度为O(n)。解题思路是使用滑动窗口的方法,通过维护一个unordered_map来记录目标字符串中每个字符的出现次数,并使用双指针来寻找最小子串。代码实现部分给出了具体的实现代码。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
author-avatar
贺群爱你_235
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有