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实现相关推荐

  1. VTK 项目一:MPR和STL+感兴趣勾画

    简介:用MFC做的简单的MPR实现和STL三维显示,MPR用vtkImageActor实现,特点就是简单,后续增加STL转掩码体数据,并实现编辑.后面慢慢贴出代码. 第二阶段进展: 用MFC开发了界面 ...

  2. 深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

    编译 | 庞佳 责编 | Leo 出品 | AI 科技大本营(公众号ID:rgznai100) AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上 ...

  3. x265发起者陈敏:别人看我是专注,其实我只是感兴趣而已

    认识陈敏是通过朋友介绍,当时我正在为第一次LiveVideoStackCon甄选讲师,陈敏的背景一下子吸引了我,如此低调.默默贡献的技术人正是我们希望挖掘的.但事与愿违,在通了十几封邮件后没能说服陈敏 ...

  4. 医学计算机应用研究的意义,医学图像感兴趣区域的自动提取-计算机应用研究.PDF...

    医学图像感兴趣区域的自动提取-计算机应用研究 第 12 期 何 楚等: 医学图像感兴趣区域的自动提取 1·57 · 医学图像感兴趣区域的自动提取* 何 楚, 彭文敏, 李吉星, 廖孟扬 ( 武汉大学 ...

  5. 做个中国清官网,有人感兴趣吗

    关于官员或者放宽到公务员群体的廉洁问题,从来都是公众关注的热点和焦点,如果能够运用网络的力量,荐贤戒腐,也是一个很有意义的事情.所以,有了这样一个想法,想做一个中国清官网(暂定名),如果有感兴趣的朋友 ...

  6. opencv感兴趣通道COI的使用

    opencv中设置和获取感兴趣通道COI的函数如下: SetImageCOI 设置感兴趣通道 void cvSetImageCOI( IplImage* image, int coi ); image ...

  7. 2.2 获取图像感兴趣区域_几何变换图像裁剪

    基于FPGA图像的裁剪 1 几何变换介绍 几何变换:从新规定图像内像素的几何排列方式. 几何变换包括:缩放.旋转.平移等.这些变换一般用于校正图像处理引起的空间失真,或者通过将图像配准到一个预定义的坐 ...

  8. ACL访问控制列表(访问控制、抓取感兴趣流)详解及基本ACL和高级ACL的配置。

    ACL --- 访问控制列表 1. 访问控制:在路由器流量流入或流出的接口上,匹配流量,然后执行设定好的动作.(pemit 允许,deny 拒绝) 2. 抓取感兴趣流:ACL的另一个作用就是和其他服务 ...

  9. LIN总线增强型校验_相比于LIN通讯,大家可能对CAN更感兴趣

    本文首发自微信公众号"汽车技术馆". 在之前的一篇文章中我们给大家分享了LIN通讯的一些信息,不知道大家是否感兴趣,因为其实在整车的应用中LIN应用的范围不是特别广,只是在一些对实 ...

最新文章

  1. TortoiseSVN Unable to connect to a repository at URL XXX
  2. Eureka缓存机制
  3. java实验报告13答案_(完整版)Java程序设计实验报告
  4. cartographer 前端两个方法:相干性匹配与非线性优化;以及回环检测方法:利用了分枝定界的相干性匹配
  5. python123外汇兑换计算器_使用python+PyQt5 实现等额本金计算器
  6. linux(ubuntu)下安装postgresql+pgAdmin4
  7. java异或运算_java中异或怎么运算?
  8. python显示图片固定大小
  9. 钓鱼网站检测技术的演进
  10. c盘里appdata是什么文件夹?
  11. HearthBuddy卡牌无法识别
  12. 第十篇:SpringBoot集成支付宝接口扫码支付
  13. 农村信用社招聘计算机类进去干啥,2008年山东农村信用社招聘考试计算机类的范围有知道的吗?...
  14. 在html中轮播图怎么做,HTML轮播图怎么做
  15. 哈夫曼树与哈夫曼编码及等长编码
  16. VUE项目练习大全(附github源码)
  17. 【博学谷学习记录】超强总结,用心分享 | 产品经理之AAARR模型和RFM模型
  18. 程序员成长之路(四)之有用的网址
  19. itunes在计算机中丢失,iTunes用户莫名丢失音乐文件 苹果将发布更新
  20. COMSOL——LiveLink for MATLAB学习3——奶酪模型

热门文章

  1. 如何删除字符串中重复的字符 用C语言实现
  2. vivo 顶像定制版 滑块验证
  3. Office常用技巧
  4. APP自动化测试-5.触屏操作及toast处理
  5. 驳马德兴《国奥输给裁判》:的确技不如人
  6. delphi FMX.WebBrowser与H5交互JavaScript
  7. select函数用法详解,及实例分析
  8. 好和弦-3-伴奏入门
  9. PowerMock使用-Whitebox
  10. absolute定位css元素居中的两种方法