VTK順序圖表像的讀取[轉][改]

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

醫學影像處理的應用程式中,經常會碰到讀取一個順序圖表像的操作。比如CT、MR等所成的映像都是一個切面一個切面地儲存的,醫學影像處理程式要處理這些資料,第一步當然是把這些資料從磁碟等外部儲存介質中匯入記憶體。

        利用VTK可以讀取多種格式的影像檔,支援讀取單個的二維映像(比如*.BMP、*.JPEG、*.PNG等)或者三維影像檔(*.VTK、*.mhd、*.mha等),也支援順序圖表像檔案的匯入。下面我們詳細地講解如何在VTK裡實現順序圖表像檔案的讀取(我們以美國可視人的資料做為測試資料,資料可以從這裡下載到)。

在講解VTK順序圖表像讀取之前,有一個問題需要注意的:就是待讀取的順序圖表像的檔案名稱必須是規則的,比如像所示的。

Tips:涉及到指改檔案名稱的,如果熟悉Dos命令的,直接用rename命令就可以完成;或者是使用一個小軟體Renamer來修改。

 

圖1順序圖表像的命名樣本

 

方法一:使用SetFileNames()方法讀取順序圖表像。

 1 [cpp] view plaincopy 2 //產生映像序列的檔案名稱數組   3 vtkSmartPointer<vtkStringArray > fileArray =   4 vtkSmartPointer<vtkStringArray >::New();   5 charfileName[128];   6 for(inti = 1; i < 20; i++) //幾個映像就迴圈幾次   7 {   8 sprintf(fileName,"../VisibleWomanHead/VisibleWomanHead_%02d.jpg", i);   9 vtkstd::stringfileStr(fileName);  10 fileArray->InsertNextValue(fileStr);     11 }  12 //讀取JPG順序圖表像  13 vtkSmartPointer<vtkJPEGReader>reader =  14 vtkSmartPointer<vtkJPEGReader>::New();  15 reader->SetFileNames(fileArray);  16 reader->Update();  

說明:要讀取的序列檔案是存放在檔案夾VisibleWomanHead裡的,而且每個映像的命名規則是:VisibleWomanHead_01.jpg,VisibleWomanHead_02.jpg……1所示。方法一我們使用了vtkStringArray先構建一個包含要讀取的順序圖表像檔案的檔案名稱數組,然後調用vtkJPEGReader裡的SetFileNames()方法。方法SetFileNames()是在類vtkImageReader2裡實現的,所以大部分VTK映像的讀取類都可以用這種方法來讀取順序圖表像檔案。

 

方法二:使用SetFilePrefix()/SetFilePattern()方法讀取順序圖表像。

前面我們已經提過,在讀取順序圖表像檔案時,要求序列裡的檔案名稱有規律地命名(1),既然這些檔案名稱有規律,我們可以採用vtkImageReader2裡的方法SetFilePrefix()/SetFilePattern()來讀取順序圖表像。

1 vtkSmartPointer<vtkJPEGReader>reader =2 vtkSmartPointer<vtkJPEGReader>::New();3 reader->SetFilePrefix ("D:/Data/VisibleWomanHead/VisibleWomanHead_");4 reader->SetFilePattern("%s%02d.jpg");5 reader ->SetDataExtent (0,511,0,511,1,20);//映像大小是512*5126 reader->Update();

至於為什麼這麼寫,你們感受一下就知道了,特別是SetFilePrefix()、SetFilePattern()、SetDataExtent()這幾個函數的參數。

 

方法三:一張一張地讀入,然後合并成一個三維的資料體。

 1 vtkSmartPointer<vtkImageAppend > append = 2        vtkSmartPointer<vtkImageAppend >::New(); 3 append->SetAppendAxis(2); 4   5 vtkSmartPointer<vtkJPEGReader>reader = 6        vtkSmartPointer<vtkJPEGReader>::New(); 7 char fileName[128]; 8 for(int i = 1; i < 21; i++) 9 {10        sprintf(fileName,"D:/Data/VisibleWomanHead/VisibleWomanHead_%02d.jpg", i);11        reader->SetFileName(fileName);12        append->AddInputConnection(reader->GetOutputPort());13 }

我們使用類vtkImageAppend做合并的操作,其中方法SetAppendAxis(2)是指定Z軸為讀入的每層映像資料的堆疊方向。其他的代碼你們繼續感受一下,就不再敘述了。

==========歡迎轉載,轉載時請保留該聲明資訊==========
著作權歸@東靈工作室所有,更多資訊請訪問東靈工作室
教程系列導航:http://blog.csdn.net/www_doling_net/article/details/8763686
================================================

 

 

這裡再補充一種用vtkVolume16Reader類,讀取DICOM檔案的方法:

vtkVolume16Reader *v16 = vtkVolume16Reader::New();v16->SetFilePrefix( "E:/MedImage Data/Simon/SIMON_" );v16->SetFilePattern("%s%02d.dcm");v16->SetDataDimensions (512,512);v16->SetImageRange (0,54);v16->SetDataByteOrderToLittleEndian();v16->SetDataSpacing (0.25, 0.25, 1.0);

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.