VTK感兴趣勾画 方式一: vtkImageMask实现
1、使用 vtkImageMask 实现。
优点:简单方便,mask与原始图像大小一致;
缺点:只支持单一掩码图像,无法实现多个掩码的编辑;
2、演示源码
void ImageMask2()
{// 读取数据int m_Dim[3] = { 512,512,333 };double m_Spacing[3] = { 0.32,0.32,0.8 };double m_Origin[3];m_Origin[0] = -m_Dim[0] * m_Spacing[0] * 0.5;m_Origin[1] = -m_Dim[1] * m_Spacing[1] * 0.5;m_Origin[2] = -m_Dim[2] * m_Spacing[2] * 0.5;size_t fSize = m_Dim[0] * m_Dim[1] * m_Dim[2] * sizeof(short);vtkImageData* input = vtkImageData::New();input->SetDimensions(m_Dim[0], m_Dim[1], m_Dim[2]);input->SetSpacing(m_Spacing[0], m_Spacing[1], m_Spacing[2]);input->SetOrigin(m_Origin);input->AllocateScalars(VTK_SHORT, 1);void *ptr = input->GetScalarPointer();//memcpy(ptr, m_pSrcData->m_pSrc, fSize);std::string m_ImgFile = "D:\\spineCT\\IMG-0001-00001.img";FILE *pFile = fopen(m_ImgFile.c_str(), "rb");if (pFile == NULL)return;fread(ptr, 1, fSize, pFile);fclose(pFile);//====================================================// 创建测试掩码图像vtkImageData* mask = vtkImageData::New();mask->SetDimensions(m_Dim[0], m_Dim[1], m_Dim[2]);mask->SetSpacing(m_Spacing[0], m_Spacing[1], m_Spacing[2]);mask->SetOrigin(m_Origin);mask->AllocateScalars(VTK_UNSIGNED_CHAR, 1);void *ptrMak = mask->GetScalarPointer();memset(ptrMak, 0, 512 * 512 * 333);unsigned char* pMask = (unsigned char*)ptrMak;for (int i = 0; i < 333; i++){for (int j = 200; j < 400; j++){for (int k = 200; k < 400; k++){pMask[i * 512 * 512 + j * 512 + k] = 255;}}}//====================================================vtkSmartPointer<vtkImageMapToWindowLevelColors> windowLevel = vtkSmartPointer<vtkImageMapToWindowLevelColors>::New();windowLevel->SetWindow(800);windowLevel->SetLevel(800);windowLevel->SetInputData(input);windowLevel->Update();vtkNew<vtkImageMask> maskFilter;maskFilter->SetImageInputData(windowLevel->GetOutput());maskFilter->SetMaskInputData(mask);maskFilter->SetMaskedOutputValue(255, 0, 0);maskFilter->SetMaskAlpha(0.4);maskFilter->NotMaskOn(); // 255 不可见maskFilter->Update();int imeExtent[6];input->GetExtent(imeExtent);input->GetExtent(ImageExtent);imeExtent[4] = 0;imeExtent[5] = 0;// Display the imagevtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();actor->GetMapper()->SetInputConnection(maskFilter->GetOutputPort());actor->SetDisplayExtent(imeExtent);//itemActor->SetOrigin();vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor);vtkCamera* camera = renderer->GetActiveCamera();camera->ParallelProjectionOn();camera->SetParallelScale(100);camera->SetFocalPoint(0,0,0);camera->SetPosition(0,0,400);camera->SetViewUp(0,1,0);vtkSmartPointer<vtkRenderWindow> window = vtkSmartPointer<vtkRenderWindow>::New();window->AddRenderer(renderer);// Set up the interactionvtkSmartPointer<vtkInteractorStyleImage> imageStyle = vtkSmartPointer<vtkInteractorStyleImage>::New();vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetInteractorStyle(imageStyle);window->SetInteractor(interactor);window->Render();vtkSmartPointer<vtkImageInteractionCallback> callback = vtkSmartPointer<vtkImageInteractionCallback>::New();callback->SetImageReslice(actor, itemActor, renderer);callback->SetInteractor(interactor);imageStyle->AddObserver(vtkCommand::MouseMoveEvent, callback);imageStyle->AddObserver(vtkCommand::LeftButtonPressEvent, callback);imageStyle->AddObserver(vtkCommand::LeftButtonReleaseEvent, callback);imageStyle->AddObserver(vtkCommand::KeyPressEvent, callback);// Start interaction// The Start() method doesn't return until the window is closed by the userinteractor->Start();
}
3、勾画交互-矩形工具
4、勾画交互-圆形工具
VTK感兴趣勾画 方式一: vtkImageMask实现相关推荐
- VTK 项目一:MPR和STL+感兴趣勾画
简介:用MFC做的简单的MPR实现和STL三维显示,MPR用vtkImageActor实现,特点就是简单,后续增加STL转掩码体数据,并实现编辑.后面慢慢贴出代码. 第二阶段进展: 用MFC开发了界面 ...
- 深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?
编译 | 庞佳 责编 | Leo 出品 | AI 科技大本营(公众号ID:rgznai100) AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上 ...
- x265发起者陈敏:别人看我是专注,其实我只是感兴趣而已
认识陈敏是通过朋友介绍,当时我正在为第一次LiveVideoStackCon甄选讲师,陈敏的背景一下子吸引了我,如此低调.默默贡献的技术人正是我们希望挖掘的.但事与愿违,在通了十几封邮件后没能说服陈敏 ...
- 医学计算机应用研究的意义,医学图像感兴趣区域的自动提取-计算机应用研究.PDF...
医学图像感兴趣区域的自动提取-计算机应用研究 第 12 期 何 楚等: 医学图像感兴趣区域的自动提取 1·57 · 医学图像感兴趣区域的自动提取* 何 楚, 彭文敏, 李吉星, 廖孟扬 ( 武汉大学 ...
- 做个中国清官网,有人感兴趣吗
关于官员或者放宽到公务员群体的廉洁问题,从来都是公众关注的热点和焦点,如果能够运用网络的力量,荐贤戒腐,也是一个很有意义的事情.所以,有了这样一个想法,想做一个中国清官网(暂定名),如果有感兴趣的朋友 ...
- opencv感兴趣通道COI的使用
opencv中设置和获取感兴趣通道COI的函数如下: SetImageCOI 设置感兴趣通道 void cvSetImageCOI( IplImage* image, int coi ); image ...
- 2.2 获取图像感兴趣区域_几何变换图像裁剪
基于FPGA图像的裁剪 1 几何变换介绍 几何变换:从新规定图像内像素的几何排列方式. 几何变换包括:缩放.旋转.平移等.这些变换一般用于校正图像处理引起的空间失真,或者通过将图像配准到一个预定义的坐 ...
- ACL访问控制列表(访问控制、抓取感兴趣流)详解及基本ACL和高级ACL的配置。
ACL --- 访问控制列表 1. 访问控制:在路由器流量流入或流出的接口上,匹配流量,然后执行设定好的动作.(pemit 允许,deny 拒绝) 2. 抓取感兴趣流:ACL的另一个作用就是和其他服务 ...
- LIN总线增强型校验_相比于LIN通讯,大家可能对CAN更感兴趣
本文首发自微信公众号"汽车技术馆". 在之前的一篇文章中我们给大家分享了LIN通讯的一些信息,不知道大家是否感兴趣,因为其实在整车的应用中LIN应用的范围不是特别广,只是在一些对实 ...
最新文章
- TortoiseSVN Unable to connect to a repository at URL XXX
- Eureka缓存机制
- java实验报告13答案_(完整版)Java程序设计实验报告
- cartographer 前端两个方法:相干性匹配与非线性优化;以及回环检测方法:利用了分枝定界的相干性匹配
- python123外汇兑换计算器_使用python+PyQt5 实现等额本金计算器
- linux(ubuntu)下安装postgresql+pgAdmin4
- java异或运算_java中异或怎么运算?
- python显示图片固定大小
- 钓鱼网站检测技术的演进
- c盘里appdata是什么文件夹?
- HearthBuddy卡牌无法识别
- 第十篇:SpringBoot集成支付宝接口扫码支付
- 农村信用社招聘计算机类进去干啥,2008年山东农村信用社招聘考试计算机类的范围有知道的吗?...
- 在html中轮播图怎么做,HTML轮播图怎么做
- 哈夫曼树与哈夫曼编码及等长编码
- VUE项目练习大全(附github源码)
- 【博学谷学习记录】超强总结,用心分享 | 产品经理之AAARR模型和RFM模型
- 程序员成长之路(四)之有用的网址
- itunes在计算机中丢失,iTunes用户莫名丢失音乐文件 苹果将发布更新
- COMSOL——LiveLink for MATLAB学习3——奶酪模型