VTK系列教程九:VR图像裁剪
我们已经实现了自定义交互,但有一种交互比较特殊:VR图像的任意形状裁剪,俗称套索工具,它能够将我们不需要的部分,有遮挡的部分裁减掉,今天我们就来看一下其实现方式。
VTK中没有提供简单的方法来实现该功能,我们只能利用VTK中的基础功能一步步实现。
实现这个功能的第一步就是要能在VR图像上画一个多边形的标注,并获取多边形的顶点,在VTK中我们可以通过vtkInteractorStyleDrawPolygon实现。
this->m_iren->SetInteractorStyle(this->m_lassoStyle);
this->m_lassoStyle->GetPolygonPoints()
有了多边形的顶点,我们需要计算出体数据场vtkBoundingBox垂直屏幕方向最远点、和最近点,然后根据最近点和最远点以及顶点信息生成一个多边形vtkPolyData,计算该多边形与体数据场的最大交集,并根据交集生成一个vtkImageData用于掩膜。
上面过程我们用到了VTK中的vtkPolyDataToImageStencil、vtkImageStencilToImage类。
stencilToImage->SetInputData(BrushPolyDataToStencil->GetOutput());
stencilToImage->SetInsideValue(0);
stencilToImage->SetOutsideValue(255);
stencilToImage->SetOutputScalarType(VTK_UNSIGNED_CHAR);
stencilToImage->Update();
有了掩膜vtkImageData后,我们就可以进行裁剪操作了,如果体绘制使用的是vtkGPUVolumeRayCastMapper类,可以调用SetMaskInput函数来实现裁剪操作。
如果体绘制用的不是vtkGPUVolumeRayCastMapper,则可以根据掩膜结果直接操作原始vtkImageData,将原始数据中对应的值设置成一个边缘值,通过映射后该边缘值会被映射成一个黑色。
VTK系列教程九:VR图像裁剪相关推荐
- PVE系列教程(九)、openWRT设置主路由与旁路由模式
PVE系列教程(九).openWRT设置主路由与旁路由模式 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://nas.hepcloud.top:7000 Hello,小伙伴们,这是凯尔 ...
- VTK系列教程六:多平面重建
上一篇我们讲了在VTK中如何生成VR图像,这一篇我们来讲一下如何利用VTK生成MPR图像,多平面重建图像就是从不同的方向去看物体,根据方向的不同,生成的图像分别是:横断面.冠状面.矢状面. 前面我们讲 ...
- 经典算法研究系列:九、图像特征提取与匹配之SIFT算法
经典算法研究系列:九.SIFT算法研究 作者:July.二零一一年二月十五日. 推荐阅读: David G. Lowe, "Distinctive image features from s ...
- php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言
php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...
- Redis系列教程(九):Redis的内存回收原理,及内存过期淘汰策略详解
Redis内存回收机制 Redis的内存回收主要围绕以下两个方面: 1.Redis过期策略:删除过期时间的key值 2.Redis淘汰策略:内存使用到达maxmemory上限时触发内存淘汰数据 Red ...
- VTK系列教程十一:MPR定位线
我们已经实现了MPR图像的显示,但只能获取垂直某个轴的截面图,那如何获取带有倾斜角度的截面图呢?这样的截图对于不规则病灶和器官是有意义的. VTK其实给我们提供了一种非常简单的方法:vtkReslic ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中.整个流程如图: 我个人对Policy Injectio ...
- OPENCV入门教程九:图像旋转任意角度
一.目标 学习如何旋转图片. 二.函数说明 在OpenCV中,没有现成的函数直接用来实现图像旋转,它是用仿射变换函数warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰 ...
- 转:Java NIO系列教程(九) Pipe
Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pi ...
- twisted系列教程九–Deferred 的第二个小插曲
More Consequence of Callbacks 我们将要再来研究一下callback,尽管我们已经对deferred比较了解而且已经可以写出twisted 风格的异步程序,Deferred ...
最新文章
- spring bean 创建失败的常见原因
- 常州IBMV3700数据恢复成功
- linux里打包和压缩文件,linux ---打包和压缩文件
- 团购网站的兴衰与启示
- 21/100. Two Sum
- 异常处理:你不可能总是对的 - 零基础入门学习Python032
- “拒绝访问”协助方案
- 专访|从程序员到架构师:交流和分享最能让技术人进步
- Makefile中的@
- 免登录实现CSDN博客代码复制(2021.9.26)
- uniapp得到用户当前定位以及用户选择位置
- 世界三大短篇小说之王 代表作介绍
- 如何系统地学习3D建模!教你零基础入门,初学者看过来
- 自行更换iPhone 6s 手机电池 | 工序步骤
- 当我在ChatGPT上问重建大师,它居然这样回答我
- SAP 成套销售按项目销售
- webservice:com.sun.xml.internal.ws.server.ServerRtException: [failed to localize]
- PYNQ系列学习(三)|pynq与zynq对比(二)
- elementUI 表格合并单元格-多层级-合并行
- MMA-符号学运算的奥妙
热门文章
- Function eregi is deprecated (解决方法)
- mac jupyter notebook 服务似乎挂掉了,但是会立刻重启的
- 【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
- 解决方案:rabbitmq使用场景-超时未支付订单处理
- 设备巡检的痛点和巡检方案
- 前端开发,测试,后端,该如何选择?
- SpringBoot简单实现上传图片到七牛云
- Android开发学习心得 (一) 生如夏花之绚烂,死如秋叶之静美 -- App的生死轮回
- 升级wamp的php版本,Wamp升级PHP版本
- 如何在华为路由器中虚拟服务器,华为路由器ip地址