一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

1.提取感兴趣区域

感兴趣区域(Volum of Interest,VOI)是指图像内部的一个子区域。在VTK中vtkExtractVOI类实现由用户指定的区域范围提取图像的子图像。该Filter的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。
其示例代码如下所示:
复制代码
 1 #include <vtkAutoInit.h>
 2 VTK_MODULE_INIT(vtkRenderingOpenGL);
 3  
 4 #include <vtkSmartPointer.h>
 5 #include <vtkBMPReader.h>
 6 #include <vtkImageData.h>//提取图像内部信息,如维度等
 7 #include <vtkExtractVOI.h>
 8 #include <vtkImageActor.h>
 9 #include <vtkRenderer.h>
10 #include <vtkRenderWindow.h>
11 #include <vtkRenderWindowInteractor.h>
12 #include <vtkInteractorStyleImage.h>
13  
14 int main()
15 {
16     vtkSmartPointer<vtkBMPReader> reader =
17         vtkSmartPointer<vtkBMPReader>::New();
18     reader->SetFileName("lena.bmp");
19     reader->Update();
20  
21     int dim[3];
22     reader->GetOutput()->GetDimensions(dim);
23     //提取图像子模块
24     vtkSmartPointer<vtkExtractVOI> extractVOI =
25         vtkSmartPointer<vtkExtractVOI>::New();
26     extractVOI->SetInputConnection(reader->GetOutputPort());
27     extractVOI->SetVOI(dim[0] / 4., 3.*dim[0] / 4., dim[1] / 4., 3.*dim[1] / 4, 0, 0);
28     extractVOI->Update();
29     //创建演员
30     vtkSmartPointer<vtkImageActor> origActor =
31         vtkSmartPointer<vtkImageActor>::New();
32     origActor->SetInputData(reader->GetOutput());
33  
34     vtkSmartPointer<vtkImageActor>  voiActor =
35         vtkSmartPointer<vtkImageActor>::New();
36     voiActor->SetInputData(extractVOI->GetOutput());
37     //化妆
38     double origView[4] = { 0, 0, 0.5, 1.0 };
39     double voiView[4] = { 0.5, 0, 1.0, 1.0 };
40     vtkSmartPointer<vtkRenderer> origRender =
41         vtkSmartPointer<vtkRenderer>::New();
42     origRender->SetViewport(origView);
43     origRender->AddActor(origActor);
44     origRender->ResetCamera();
45     origRender->SetBackground(1.0, 0, 0);
46  
47     vtkSmartPointer<vtkRenderer> voiRender =
48         vtkSmartPointer<vtkRenderer>::New();
49     voiRender->SetViewport(voiView);
50     voiRender->AddActor(voiActor);
51     voiRender->ResetCamera();
52     voiRender->SetBackground(0.0, 0.0, 0.0);
53     //舞台
54     vtkSmartPointer<vtkRenderWindow> renderwindow =
55         vtkSmartPointer<vtkRenderWindow>::New();
56     renderwindow->AddRenderer(origRender);
57     renderwindow->AddRenderer(voiRender);
58     renderwindow->SetSize(640, 320);
59     renderwindow->SetWindowName("ExtractVolumeOfInterestFromImage");
60     //设置交互
61     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
62         vtkSmartPointer<vtkRenderWindowInteractor>::New();
63     vtkSmartPointer<vtkInteractorStyleImage> style =
64         vtkSmartPointer<vtkInteractorStyleImage>::New();
65     rwi->SetInteractorStyle(style);
66     rwi->SetRenderWindow(renderwindow);
67     rwi->Initialize();
68  
69     rwi->Start();
70     return 0;
71 }
复制代码
上例代码实现了提取一副图像的子区域。
首先读取一个图像,并获取图像的维数。然后定义vtkExtractVOI对象,该对象接收两个输入一个是图像数据,第二个是区域大小。设置区域大小的函数原型:
void SetVOI(int _arg1, int _arg2, int _arg3, int _arg4, int _arg5, int _arg6)
void SetVOI(int _arg[])
其参数是提取的区域各个方向的大小,共6个参数,依次表示x方向最小值,x方向最大值,y方向最小值,y方向最大值,z方向最小值和z方向最大值。上例中由于读取的是二维图像,因此z方向的区域为[0,0],而在x方向范围为[ dims[0]/4 , 3*dims[0]/4 ],y方向范围为[ dims[1]/4 , 3*dims[1]/4 ],即提取图像原图中间1/4图像。
执行结果如下:
posted on   一杯清酒邀明月  阅读(857)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-01-06 VisionPro 图标工具说明
2020-01-06 Qt OpenCV::Mat与Qt::QImage相互转换
2020-01-06 QT .和::和:和->
2020-01-06 Qt QImage的浅拷贝与深拷贝
2020-01-06 Qt QImag图像保存、格式转换
2020-01-06 Qt 获取当前时间
2020-01-06 Qt 信号阻塞和断开
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示