VTK修炼之道18:图像基本操作_图像信息的访问与修改(vtkImageChangeInformation)
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道18:图像基本操作_图像信息的访问与修改(vtkImageChangeInformation)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.類vtkImageChengeInformation用于圖像信息修改
vtkImageData中提供了多個Set函數用于設置圖像的基本信息。當對一個管線的輸出修改圖像信息后,如果管線重新Update,那么這些修改都會恢復回原來的值。而vtkChangeImageInformation可以作為管線中的一個filter來修改圖像信息。利用這個filter可以修改圖像的原點,像素間隔以及范圍起點(extent),另外還可以對圖像平移縮放等操作。
2.代碼及仿真
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL);#include <vtkSmartPointer.h> #include <vtkBMPReader.h> #include <vtkImageData.h> #include <vtkImageChangeInformation.h> #include <vtkImageViewer2.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h>int main() {vtkSmartPointer<vtkBMPReader> reader =vtkSmartPointer<vtkBMPReader>::New();reader->SetFileName("lena.bmp");reader->Update();int dims[3];double origin[3];double spacing[3];reader->GetOutput()->GetDimensions(dims);std::cout << "圖像維度:" << dims[0] << " " << dims[1] << " " << dims[2] << std::endl;reader->GetOutput()->GetOrigin(origin);std::cout << "圖像中心:" << origin[0] << " " << origin[1] << " " << origin[2] << std::endl;reader->GetOutput()->GetSpacing(spacing);std::cout << "圖像間隔:" << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl;vtkSmartPointer<vtkImageChangeInformation> changer =vtkSmartPointer<vtkImageChangeInformation>::New();changer->SetInputData(reader->GetOutput());changer->SetOutputOrigin(100, 100, 0);changer->SetOutputSpacing(10, 10, 1);changer->SetCenterImage(1);changer->Update();changer->GetOutput()->GetDimensions(dims);std::cout << "圖像維度:" << dims[0] << " " << dims[1] << " " << dims[2] << std::endl;changer->GetOutput()->GetOrigin(origin);std::cout << "圖像中心:" << origin[0] << " " << origin[1] << " " << origin[2] << std::endl;changer->GetOutput()->GetSpacing(spacing);std::cout << "圖像間隔:" << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl;vtkSmartPointer<vtkImageViewer2> imgViewer =vtkSmartPointer<vtkImageViewer2>::New();imgViewer->SetInputConnection(changer->GetOutputPort());vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();imgViewer->SetupInteractor(rwi);imgViewer->Render();imgViewer->GetRenderer()->ResetCamera();imgViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);imgViewer->Render();imgViewer->GetRenderWindow()->SetWindowName("ChangeImageInfo");imgViewer->SetSize(640, 480);rwi->Start();return 0; }輸出結果: 首先讀入圖像,由vtkImageData提供函數接口獲取圖像的維數,原點和像素間隔。然后定義vtkImageChangeInformation指針,并設置輸出圖像原點為(100, 100, 0),輸出圖像像素間隔為(10, 10, 1),然后調用CenterImage()函數將圖像的原點置于圖像的中心。
操作后的結果使得圖像的原點位于(-2555, -2555, 0),SetOutputOrigin(100, 100, 0)并沒有起作用。
原因在哪里呢?
如果看下CenterImage()函數的注釋,可以發現該函數的作用是將(0, 0, 0)點置于圖像的中心。當CenterImage該函數執行時會重寫SetOutputOrigin(),所以SetOutputOrigin函數不會產生任何作用。那(-2555, -2555, 0)又是如何計算出來的呢?
這個原理如下圖所示:
根據圖像的維數和像素間隔計算得到新的圖像的寬度和高度為(512-1)*10,初始圖像的原點位于(0, 0,0),現在將圖像的中心平移至原點,平移量為(-(512-1)*10/2,(512-1)*5/2, 0) = (-2555, -2555,0)。
總結
以上是生活随笔為你收集整理的VTK修炼之道18:图像基本操作_图像信息的访问与修改(vtkImageChangeInformation)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (BCB) CComPtrIHTMLDo
- 下一篇: 关于CompleteWithAppPat