VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)
生活随笔
收集整理的這篇文章主要介紹了
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]. 機械工業出版社, 2015.
總結
以上是生活随笔為你收集整理的VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果谁和飞鸽传书讨论这两个问题
- 下一篇: CSS选择器的权重详解