vtk相机_C#开发PACS医学影像三维重建(一)使用VTK重建3D影像
VTK簡介:
VTK是一個開源的免費軟件系統(tǒng),主要用于三維計算機圖形學、圖像處理和可視化。Vtk是在面向?qū)ο笤淼幕A上設計和實現(xiàn)的,它的內(nèi)核是用C++構(gòu)建的。
因為使用C#語言開發(fā),而VTK是C++的,所以推薦使用VTK的.Net開發(fā)庫:ActiViz。
本系列文章主要以技術(shù)和代碼講解為主,ActiViz的安裝和環(huán)境配置可以參考:
ActiViz(VTK的C#庫)學習使用心得之二:Activiz.NET的下載和安裝
官網(wǎng)資料:https://www.kitware.eu/product/activiz
三維重建技術(shù)介紹:
對于一些復雜的圖像,醫(yī)生希望用三維重建來觀察病灶點來輔助診斷,一般在醫(yī)學領(lǐng)域內(nèi)的三維重建類型分為以下六種:
多層面重建(MPR)
最大密度投影(MIP)
表面陰影遮蓋(SSD)
容積漫游技術(shù)(VR)
曲面重建(CPR)
虛擬內(nèi)鏡技術(shù)(VE)
本系列教程最終效果(實際效果受顯卡能力決定):
當我們下載并安裝好ActiViz之后,準備好要三維重建的Dcm文件,在VS2017中新建一個桌面應用程序項目:
引用相關(guān)的動態(tài)庫:
在Form1的Load事件中:
private void Form1_Load(object sender, EventArgs e) { //創(chuàng)建數(shù)據(jù)讀取對象 vtkDICOMImageReader reader = new vtkDICOMImageReader(); //小端字節(jié) reader.SetDataByteOrderToLittleEndian(); //設置切片數(shù)據(jù)路徑 reader.SetDirectoryName(@"C:甥敳獲AdministratorDesktopvtk801"); vtkImageShrink3D shrink = new vtkImageShrink3D(); shrink.SetShrinkFactors(4, 4, 1); shrink.AveragingOn(); shrink.SetInput((vtkDataObject)(reader.GetOutput())); //提取等值面 vtkMarchingCubes skinExtractor = new vtkMarchingCubes(); //建立算法對象,從CT切片數(shù)據(jù)中提取出皮膚 skinExtractor.SetValue(0, 50); //提取出CT值為50的組織 skinExtractor.SetInputConnection(shrink.GetOutputPort()); vtkDecimatePro deci = new vtkDecimatePro(); deci.SetTargetReduction(0.3); deci.SetInputConnection(skinExtractor.GetOutputPort()); vtkSmoothPolyDataFilter smooth = new vtkSmoothPolyDataFilter(); //光滑圖像 smooth.SetInputConnection(deci.GetOutputPort()); smooth.SetNumberOfIterations(200); vtkPolyDataNormals skinNormals = new vtkPolyDataNormals(); //法線 skinNormals.SetInputConnection(smooth.GetOutputPort()); skinNormals.SetFeatureAngle(60.0); vtkStripper stripper = new vtkStripper(); stripper.SetInputConnection(skinNormals.GetOutputPort()); vtkDataSetMapper skinMapper = new vtkDataSetMapper(); skinMapper.SetInput(stripper.GetOutput()); skinMapper.ScalarVisibilityOff(); //設置相機 vtkCamera aCamera = new vtkCamera(); aCamera.SetViewUp(0, 0, -1); aCamera.SetPosition(0, 1, 0); aCamera.SetFocalPoint(0, 0, 0); aCamera.ComputeViewPlaneNormal(); //設置Actor vtkActor coneActor = new vtkActor(); coneActor.SetMapper(skinMapper); coneActor.GetProperty().SetAmbient(0.5); coneActor.GetProperty().SetDiffuse(1); coneActor.GetProperty().SetSpecular(0.6); //顯示類 vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer(); renderer.AddActor(coneActor);//添加coneActor對象 //renderer.AddActor2D(new vtkProp());//添加textActor對象 renderer.SetBackground(0, 0, 0); renderer.SetActiveCamera(aCamera);//添加相機 renderer.ResetCamera(); vtkRenderWindow renWin = renderWindowControl1.RenderWindow;//設置繪圖窗口renWin->AddRenderer(renderer);//裝載繪圖類 vtkWin32RenderWindowInteractor iren = new vtkWin32RenderWindowInteractor(); iren.SetRenderWindow(renWin);//裝載繪圖窗口 }這里我用的是頭顱的CT影像切片,運行后就得到了一個未上色的三維模型:
修改上面的代碼,嘗試提取腦部血管模型:
//建立算法對象,從CT切片數(shù)據(jù)中提取出皮膚skinExtractor.SetValue(0, 250); //血管CT值為200-300左右C#開發(fā)PACS、RIS醫(yī)學影像處理系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的vtk相机_C#开发PACS医学影像三维重建(一)使用VTK重建3D影像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程实现路由算法 实验报告_lt;中国通
- 下一篇: 弹道仿真软件_【决战决胜14】看,七部仿