1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)

VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)

时间:2023-09-09 04:28:11

相关推荐

VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)

1.提取感兴趣区域

感兴趣区域(Volum of Interest,VOI)是指图像内部的一个子区域。在VTK中vtkExtractVOI类实现由用户指定的区域范围提取图像的子图像。该Filter的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。 其示例代码如下所示:

#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL);#include <vtkSmartPointer.h>#include <vtkBMPReader.h>#include <vtkImageData.h>//提取图像内部信息,如维度等#include <vtkExtractVOI.h>#include <vtkImageActor.h>#include <vtkRenderer.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkInteractorStyleImage.h>int main(){vtkSmartPointer<vtkBMPReader> reader =vtkSmartPointer<vtkBMPReader>::New();reader->SetFileName("lena.bmp");reader->Update();int dim[3];reader->GetOutput()->GetDimensions(dim);//提取图像子模块vtkSmartPointer<vtkExtractVOI> extractVOI =vtkSmartPointer<vtkExtractVOI>::New();extractVOI->SetInputConnection(reader->GetOutputPort());extractVOI->SetVOI(dim[0] / 4., 3.*dim[0] / 4., dim[1] / 4., 3.*dim[1] / 4, 0, 0);extractVOI->Update();//创建演员vtkSmartPointer<vtkImageActor> origActor =vtkSmartPointer<vtkImageActor>::New();origActor->SetInputData(reader->GetOutput());vtkSmartPointer<vtkImageActor> voiActor =vtkSmartPointer<vtkImageActor>::New();voiActor->SetInputData(extractVOI->GetOutput());//化妆double origView[4] = { 0, 0, 0.5, 1.0 };double voiView[4] = { 0.5, 0, 1.0, 1.0 };vtkSmartPointer<vtkRenderer> origRender =vtkSmartPointer<vtkRenderer>::New();origRender->SetViewport(origView);origRender->AddActor(origActor);origRender->ResetCamera();origRender->SetBackground(1.0, 0, 0);vtkSmartPointer<vtkRenderer> voiRender =vtkSmartPointer<vtkRenderer>::New();voiRender->SetViewport(voiView);voiRender->AddActor(voiActor);voiRender->ResetCamera();voiRender->SetBackground(0.0, 0.0, 0.0);//舞台vtkSmartPointer<vtkRenderWindow> renderwindow =vtkSmartPointer<vtkRenderWindow>::New();renderwindow->AddRenderer(origRender);renderwindow->AddRenderer(voiRender);renderwindow->SetSize(640, 320);renderwindow->SetWindowName("ExtractVolumeOfInterestFromImage");//设置交互vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleImage> style =vtkSmartPointer<vtkInteractorStyleImage>::New();rwi->SetInteractorStyle(style);rwi->SetRenderWindow(renderwindow);rwi->Initialize();rwi->Start();return 0;}

上例代码实现了提取一副图像的子区域。 首先读取一个图像,并获取图像的维数。然后定义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图像。 执行结果如下:

2.参考资料

1.《C++ primer》

2.《The VTK User’s Guide – 11thEdition》

3.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》

4. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, .

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。