Python-VTK批量讀取二維切片并顯示三維模型
前言:
VTK,(visualizationtoolkit)是一個(gè)開(kāi)放資源的免費(fèi)軟件系統(tǒng),主要用于三維計(jì)算機(jī)圖形學(xué)、圖像處理和可視化。Vtk是在面向?qū)ο笤淼幕A(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)的,它的內(nèi)核是用C++構(gòu)建的,包含有大約250,000行代碼,2000多個(gè)類,還包含有幾個(gè)轉(zhuǎn)換界面,因此也可以自由的通過(guò)Java,Tcl/Tk和Python各種語(yǔ)言使用vtk。
主要函數(shù)介紹
vtk.vtkJPEGReader(): 讀取圖片的接口,可以通過(guò)該接口設(shè)置讀取的圖片位置、大小、維度。需要注意的是,如果需要將一列二維圖片讀取成一個(gè)三維圖像需要將一些圖片命名成自然順序0、1、2、3···,這樣VTK才能正確的讀取圖片。如果需要讀取其他格式的圖片只需要將函數(shù)中的JPEG換成對(duì)應(yīng)的格式即可,如PNG。
vtk.vtkMarchingCubes(): 三維重建函數(shù),MarchingCubes算法實(shí)際上是一個(gè)分而治之的方法,因?yàn)槠鋵⒌戎得娴某槿》植加诿恳粋€(gè)體素(voxel)中進(jìn)行。對(duì)于每個(gè)被處理的體素,以三角面片來(lái)逼近其內(nèi)部的等值面。每個(gè)體素是一個(gè)小立方體(cube),在構(gòu)造三角面片的處理過(guò)程中對(duì)每個(gè)體素都“掃描”一遍,就好像是一個(gè)處理器在這些體素上移動(dòng)一樣,也因此而得名。··在等值面抽取的過(guò)程中將一系列二維切片數(shù)據(jù)看做是一個(gè)三維的數(shù)據(jù)場(chǎng),從中將具有某種閾值的物質(zhì)抽取出來(lái),以某種拓?fù)湫问竭B接成三角面片,所以MC算法也被稱為“等值面提取”(IsosurfaceExtraction)算法。··在醫(yī)學(xué)應(yīng)用上,采用MC算法可以重建人體外部輪廓、內(nèi)部組織器官,使醫(yī)生能夠直接在三維圖像上觀察感興趣的器官與周圍組織的空間關(guān)系。
import vtk # 定義渲染窗口、交互模式 aRender = vtk.vtkRenderer() Renwin = vtk.vtkRenderWindow() Renwin.AddRenderer(aRender) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(Renwin) # 定義個(gè)圖片讀取接口 #讀取PNG圖片就換成PNG_Reader = vtk.vtkPNGReader() Jpg_Reader = vtk.vtkJPEGReader() Jpg_Reader.SetNumberOfScalarComponents(1) Jpg_Reader.SetFileDimensionality(3) # 說(shuō)明圖像是三維的 # 定義圖像大小,本行表示圖像大小為(512*512*240) Jpg_Reader.SetDataExtent(0, 512, 0, 512, 0, 240) # 設(shè)置圖像的存放位置 Jpg_Reader.SetFilePrefix("E:/outer/label/5/") # 設(shè)置圖像前綴名字 #表示圖像前綴為數(shù)字(如:0.jpg) Jpg_Reader.SetFilePattern("%s%d.jpg") Jpg_Reader.Update() Jpg_Reader.SetDataByteOrderToLittleEndian() # 計(jì)算輪廓的方法 contour = vtk.vtkMarchingCubes() contour.SetInputConnection(Jpg_Reader.GetOutputPort()) contour.ComputeNormalsOn() contour.SetValue(0, 255) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(contour.GetOutputPort()) mapper.ScalarVisibilityOff() actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.SetBackground([0.1, 0.1, 0.5]) renderer.AddActor(actor) window = vtk.vtkRenderWindow() window.SetSize(512, 512) window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(window) # 開(kāi)始顯示 window.Render() interactor.Initialize() interactor.Start()
效果展示
到此這篇關(guān)于Python-VTK批量讀取二維切片并顯示三維模型的文章就介紹到這了,更多相關(guān)Python-VTK讀取二維切片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?Flask框架實(shí)現(xiàn)Proteus仿真Arduino與網(wǎng)頁(yè)數(shù)據(jù)交互
這篇文章主要介紹了Python?Flask框架實(shí)現(xiàn)Proteus仿真Arduino與網(wǎng)頁(yè)數(shù)據(jù)交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11keras分類之二分類實(shí)例(Cat and dog)
這篇文章主要介紹了keras分類之二分類實(shí)例(Cat and dog),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Python協(xié)程 yield與協(xié)程greenlet簡(jiǎn)單用法示例
這篇文章主要介紹了Python協(xié)程 yield與協(xié)程greenlet簡(jiǎn)單用法,簡(jiǎn)要講述了協(xié)程的概念、原理,并結(jié)合實(shí)例形式分析了Python協(xié)程 yield與協(xié)程greenlet基本使用方法,需要的朋友可以參考下2019-11-11python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03解決pip install psycopg2出錯(cuò)問(wèn)題
這篇文章主要介紹了解決pip install psycopg2出錯(cuò)問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07