日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VTK序列图像的读取

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VTK序列图像的读取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VTK序列圖像的讀取

分類: VTK系列教程 2673人閱讀 評論(2) 收藏 舉報 VTK序列圖像讀取

? ? ? ? 醫學圖像處理的應用程序中,經常會碰到讀取一個序列圖像的操作。比如CT、MR等所成的圖像都是一個切面一個切面地存儲的,醫學圖像處理程序要處理這些數據,第一步當然是把這些數據從磁盤等外部存儲介質中導入內存。

? ? ? ? 利用VTK可以讀取多種格式的圖像文件,支持讀取單個的二維圖像(比如*.BMP、*.JPEG、*.PNG等)或者三維圖像文件(*.VTK、*.mhd、*.mha等),也支持序列圖像文件的導入。下面我們詳細地講解如何在VTK里實現序列圖像文件的讀取(我們以美國可視人的數據做為測試數據,數據可以從這里下載到)。

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

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

?

圖1序列圖像的命名示例

?

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

?

[cpp] view plaincopy
  • //生成圖像序列的文件名數組??
  • vtkSmartPointer<vtkStringArray?>?fileArray?=??
  • vtkSmartPointer<vtkStringArray?>::New();??
  • charfileName[128];??
  • for(inti?=?1;?i?<?20;?i++)?//幾個圖像就循環幾次??
  • {??
  • sprintf(fileName,"../VisibleWomanHead/VisibleWomanHead_%02d.jpg",?i);??
  • vtkstd::stringfileStr(fileName);??
  • fileArray->InsertNextValue(fileStr);?????
  • }??
  • //讀取JPG序列圖像??
  • vtkSmartPointer<vtkJPEGReader>reader?=??
  • vtkSmartPointer<vtkJPEGReader>::New();??
  • reader->SetFileNames(fileArray);??
  • reader->Update();??
  • ?

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

    ?

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

    前面我們已經提過,在讀取序列圖像文件時,要求序列里的文件名有規律地命名(如圖1),既然這些文件名有規律,我們可以采用vtkImageReader2里的方法SetFilePrefix()/SetFilePattern()來讀取序列圖像。

    [cpp] view plaincopy
  • vtkSmartPointer<vtkJPEGReader>reader?=??
  • vtkSmartPointer<vtkJPEGReader>::New();??
  • reader->SetFilePrefix?("D:/Data/VisibleWomanHead/VisibleWomanHead_");??
  • reader->SetFilePattern("%s%02d.jpg");??
  • reader?->SetDataExtent?(0,511,0,511,1,20);//圖像大小是512*512??
  • reader->Update();??

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

    ?

    方法二:一張一張地讀入,然后合并成一個三維的數據體。

    [cpp] view plaincopy
  • vtkSmartPointer<vtkImageAppend?>?append?=??
  • ???????vtkSmartPointer<vtkImageAppend?>::New();??
  • append->SetAppendAxis(2);??
  • ???
  • vtkSmartPointer<vtkJPEGReader>reader?=??
  • ???????vtkSmartPointer<vtkJPEGReader>::New();??
  • char?fileName[128];??
  • for(int?i?=?1;?i?<?21;?i++)??
  • {??
  • ???????sprintf(fileName,"D:/Data/VisibleWomanHead/VisibleWomanHead_%02d.jpg",?i);??
  • ???????reader->SetFileName(fileName);??
  • ???????append->AddInputConnection(reader->GetOutputPort());??
  • }??
  • 我們使用類vtkImageAppend做合并的操作,其中方法SetAppendAxis(2)是指定Z軸為讀入的每層圖像數據的堆疊方向。其他的代碼你們繼續感受一下,就不再敘述了。

    ?

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

    總結

    以上是生活随笔為你收集整理的VTK序列图像的读取的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。