1. 程式人生 > 其它 >C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路 C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路

C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路 C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路

C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路

當我們將CT切片重建為三維體之後,通常會消除一些不必要的外部組織來觀察內部病灶,

一般思路是根據人體常見CT值範圍來使得部分組織透明來達到效果,

但這是非黑即白的,即,要麼顯示面板,要麼顯示神經,要麼顯示骨骼…

然而,當病灶介於兩個CT值範圍中間或重合時,要觀察病灶這將是一個非常困難的工作,需要手動旋轉、切割等一系列操作,

嚴重降低判斷準確性和工作效率,故此採用梯度透明思想來展現漸變過程。

 

準備一張人體CT值範圍表參考:

 

當我們對三維體使用滑鼠操作時,將CT值從最小值到最大值對映到三維體上面,並將透明度從0到100漸變,

如果能自己用程式碼實現效果最好,否則也可以用VTK進行梯度透明,部分C++程式碼如下:

vtkSmartPointer<vtkPiecewiseFunction> GradualOp = vtkSmartPointer<vtkPiecewiseFunction>::New();
GradualOp->AddPoint(10, 0.0);
GradualOp->AddPoint(20, 0.5);
GradualOp->AddPoint(30, 1.0);
volumeProperty->SetGradientOpacity(GradualOp);

梯度小於10點的不透明度乘子設為0,完全透明。

梯度大小為10時,不透明度為0;

梯度大小為20時,不透明度乘子為0.5;

梯度大小在10-20時,不透明度乘子通過線性對映至0-0.5之間的數值;

當梯度大小在20-30之間時,不透明度乘子通過線性對映至0.5-1.0之間;

梯度值大於30時,不透明度乘子為1

同樣最後還是用觀察者模式展現體重建

複製程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 //設定相機     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);//裝載繪圖視窗

  

依照上述思想,實現最終效果,

案例①:從面部重建漸變到口腔牙齒,顯露出牙床鋼釘:

 

 

更為直觀、方便的觀察牙床鋼釘及口腔其他情況:

 

案例②:顱腦及上胸腔平掃,從面板漸變到肌肉、神經、骨骼

 

 

漸變過程中觀察骨骼、神經、血管等病灶:

 

 

C#開發PACS、RIS、3D醫學影像處理系統系列教程 目錄整理:

菜鳥入門篇

PACS客戶端:

C#開發PACS醫學影像處理系統(一):開發背景和功能預覽

C#開發PACS醫學影像處理系統(二):介面佈局之選單欄

C#開發PACS醫學影像處理系統(三):介面佈局之工具欄

C#開發PACS醫學影像處理系統(四):介面佈局之狀態列

C#開發PACS醫學影像處理系統(五):查詢病人資訊列表

C#開發PACS醫學影像處理系統(六):載入Dicom影像

C#開發PACS醫學影像處理系統(七):讀取影像Dicom資訊

C#開發PACS醫學影像處理系統(八):單元格變換

C#開發PACS醫學影像處理系統(九):序列控制元件與拖拽

C#開發PACS醫學影像處理系統(十):Dicom影像下載策略與演算法

C#開發PACS醫學影像處理系統(十一):Dicom影像掛片協議

C#開發PACS醫學影像處理系統(十二):繪圖處理之圖形標記

C#開發PACS醫學影像處理系統(十三):繪圖處理之病灶測量

C#開發PACS醫學影像處理系統(十四):處理Dicom影像窗寬窗位

C#開發PACS醫學影像處理系統(十五):Dicom影像交叉定位線演算法

C#開發PACS醫學影像處理系統(十六):2D處理之影像平移和縮放

C#開發PACS醫學影像處理系統(十七):2D處理之影像旋轉和翻轉

C#開發PACS醫學影像處理系統(十八):Dicom使用LUT色彩增強和反色

C#開發PACS醫學影像處理系統(十九):Dicom影像放大鏡

 

PACS三維處理醫學影象:

C#開發PACS醫學影像三維重建(一):使用VTK重建3D影像

C#開發PACS醫學影像三維重建(二):使用VTK進行體繪製

C#開發PACS醫學影像三維重建(三):紋理對映與顏色傳輸

C#開發PACS醫學影像三維重建(四):3D網格平滑效果

C#開發PACS醫學影像三維重建(五):基於梯度透明的組織漫遊

C#開發PACS醫學影像三維重建(六):三維光源與陰影效果

C#開發PACS醫學影像三維重建(七):空間測量與標註

C#開發PACS醫學影像三維重建(八):VR體繪製

C#開發PACS醫學影像三維重建(九):MPR三檢視切面重建

C#開發PACS醫學影像三維重建(十):MIP最小密度投影

C#開發PACS醫學影像三維重建(十一):CPR曲面重建

C#開發PACS醫學影像三維重建(十二):VE虛擬內鏡技術

C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路

熟手進階篇

醫學影像演算法:

C#處理醫學影像(一):基於Hessian矩陣的血管肺紋理骨骼增強對比

C#處理醫學影像(二):基於Hessian矩陣的醫學影像增強與窗寬窗位

C#處理醫學影像(三):基於漫水邊界自動選取病灶範圍的實現思路

C#處理醫學影像(四):影像銳化增強對比

 

PACS網頁端 開發Web版本的PACS:

C#開發Web端PACS(一):基於PACS客戶端思想重寫Web端

C#開發Web端PACS(二):使用 .Net MVC 開發手機端PACS服務端

C#開發Web端PACS(三):使用HTML5和CSS3開發PACS手機端頁面

C#開發Web端PACS(四):Web端與服務端的DICOM傳輸

C#開發Web端PACS(五):Web端的平移縮放旋轉2D操作

C#開發Web端PACS(六):Web端的窗寬窗位調整

C#開發Web端PACS(七):將移動端接入微信公眾號實現醫院雲膠片

登峰造極篇

C#開發基於Python人工智慧的肺結節自動檢測

C#開發基於Python人工智慧的脊柱側彎曲率演算法

C#開發基於Python機器學習的醫學影像骨骼模擬動畫

C#開發基於Python機器學習的術後恢復模擬

C#開發基於U3D的VR眼鏡裝置虛擬人體三維重建

C#開發基於全息投影的裸眼3D醫學影像顯示技術

周邊附加篇

膠片列印:

C#開發醫學影像膠片列印系統(一):萬能花式佈局的實現思路

C#開發醫學影像膠片列印系統(二):膠片印表機通訊

C#開發醫學影像膠片列印系統(三):Pacs二維功能在排版中的應用

 

PACS服務端:

C#開發PACS醫學影像處理系統服務端(一):醫療裝置的連線與收圖

C#開發PACS醫學影像處理系統服務端(二):高併發架構

 

PACS與RIS系統的通訊與整合

在RIS系統中調起PACS並開啟Dicom影像

 

雲PACS與遠端會診

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(一):架構概述

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(二):遠端會診與雙向轉診

 

科幻級視訊特效:

使用Adobe After Effects 製作PACS影像處理系統宣傳視訊

本文作者:喬克灬叔叔

本文連結:https://www.cnblogs.com/Uncle-Joker/p/16224192.html

版權宣告:本作品採用知識共享署名-非商業性使用-禁止演繹 2.5 中國大陸許可協議進行許可。

抱歉!發生了錯誤!麻煩反饋至[email protected]收藏該文    19  0   轉 https://www.cnblogs.com/Uncle-Joker/p/16224192.html

當我們將CT切片重建為三維體之後,通常會消除一些不必要的外部組織來觀察內部病灶,

一般思路是根據人體常見CT值範圍來使得部分組織透明來達到效果,

但這是非黑即白的,即,要麼顯示面板,要麼顯示神經,要麼顯示骨骼…

然而,當病灶介於兩個CT值範圍中間或重合時,要觀察病灶這將是一個非常困難的工作,需要手動旋轉、切割等一系列操作,

嚴重降低判斷準確性和工作效率,故此採用梯度透明思想來展現漸變過程。

 

準備一張人體CT值範圍表參考:

 

當我們對三維體使用滑鼠操作時,將CT值從最小值到最大值對映到三維體上面,並將透明度從0到100漸變,

如果能自己用程式碼實現效果最好,否則也可以用VTK進行梯度透明,部分C++程式碼如下:

vtkSmartPointer<vtkPiecewiseFunction> GradualOp = vtkSmartPointer<vtkPiecewiseFunction>::New();
GradualOp->AddPoint(10, 0.0);
GradualOp->AddPoint(20, 0.5);
GradualOp->AddPoint(30, 1.0);
volumeProperty->SetGradientOpacity(GradualOp);

梯度小於10點的不透明度乘子設為0,完全透明。

梯度大小為10時,不透明度為0;

梯度大小為20時,不透明度乘子為0.5;

梯度大小在10-20時,不透明度乘子通過線性對映至0-0.5之間的數值;

當梯度大小在20-30之間時,不透明度乘子通過線性對映至0.5-1.0之間;

梯度值大於30時,不透明度乘子為1

同樣最後還是用觀察者模式展現體重建

複製程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 //設定相機     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);//裝載繪圖視窗

  

依照上述思想,實現最終效果,

案例①:從面部重建漸變到口腔牙齒,顯露出牙床鋼釘:

 

 

更為直觀、方便的觀察牙床鋼釘及口腔其他情況:

 

案例②:顱腦及上胸腔平掃,從面板漸變到肌肉、神經、骨骼

 

 

漸變過程中觀察骨骼、神經、血管等病灶:

 

 

C#開發PACS、RIS、3D醫學影像處理系統系列教程 目錄整理:

菜鳥入門篇

PACS客戶端:

C#開發PACS醫學影像處理系統(一):開發背景和功能預覽

C#開發PACS醫學影像處理系統(二):介面佈局之選單欄

C#開發PACS醫學影像處理系統(三):介面佈局之工具欄

C#開發PACS醫學影像處理系統(四):介面佈局之狀態列

C#開發PACS醫學影像處理系統(五):查詢病人資訊列表

C#開發PACS醫學影像處理系統(六):載入Dicom影像

C#開發PACS醫學影像處理系統(七):讀取影像Dicom資訊

C#開發PACS醫學影像處理系統(八):單元格變換

C#開發PACS醫學影像處理系統(九):序列控制元件與拖拽

C#開發PACS醫學影像處理系統(十):Dicom影像下載策略與演算法

C#開發PACS醫學影像處理系統(十一):Dicom影像掛片協議

C#開發PACS醫學影像處理系統(十二):繪圖處理之圖形標記

C#開發PACS醫學影像處理系統(十三):繪圖處理之病灶測量

C#開發PACS醫學影像處理系統(十四):處理Dicom影像窗寬窗位

C#開發PACS醫學影像處理系統(十五):Dicom影像交叉定位線演算法

C#開發PACS醫學影像處理系統(十六):2D處理之影像平移和縮放

C#開發PACS醫學影像處理系統(十七):2D處理之影像旋轉和翻轉

C#開發PACS醫學影像處理系統(十八):Dicom使用LUT色彩增強和反色

C#開發PACS醫學影像處理系統(十九):Dicom影像放大鏡

 

PACS三維處理醫學影象:

C#開發PACS醫學影像三維重建(一):使用VTK重建3D影像

C#開發PACS醫學影像三維重建(二):使用VTK進行體繪製

C#開發PACS醫學影像三維重建(三):紋理對映與顏色傳輸

C#開發PACS醫學影像三維重建(四):3D網格平滑效果

C#開發PACS醫學影像三維重建(五):基於梯度透明的組織漫遊

C#開發PACS醫學影像三維重建(六):三維光源與陰影效果

C#開發PACS醫學影像三維重建(七):空間測量與標註

C#開發PACS醫學影像三維重建(八):VR體繪製

C#開發PACS醫學影像三維重建(九):MPR三檢視切面重建

C#開發PACS醫學影像三維重建(十):MIP最小密度投影

C#開發PACS醫學影像三維重建(十一):CPR曲面重建

C#開發PACS醫學影像三維重建(十二):VE虛擬內鏡技術

C#開發PACS醫學影像三維重建(十三):基於人體CT值從面板漸變到骨骼的梯度透明思路

熟手進階篇

醫學影像演算法:

C#處理醫學影像(一):基於Hessian矩陣的血管肺紋理骨骼增強對比

C#處理醫學影像(二):基於Hessian矩陣的醫學影像增強與窗寬窗位

C#處理醫學影像(三):基於漫水邊界自動選取病灶範圍的實現思路

C#處理醫學影像(四):影像銳化增強對比

 

PACS網頁端 開發Web版本的PACS:

C#開發Web端PACS(一):基於PACS客戶端思想重寫Web端

C#開發Web端PACS(二):使用 .Net MVC 開發手機端PACS服務端

C#開發Web端PACS(三):使用HTML5和CSS3開發PACS手機端頁面

C#開發Web端PACS(四):Web端與服務端的DICOM傳輸

C#開發Web端PACS(五):Web端的平移縮放旋轉2D操作

C#開發Web端PACS(六):Web端的窗寬窗位調整

C#開發Web端PACS(七):將移動端接入微信公眾號實現醫院雲膠片

登峰造極篇

C#開發基於Python人工智慧的肺結節自動檢測

C#開發基於Python人工智慧的脊柱側彎曲率演算法

C#開發基於Python機器學習的醫學影像骨骼模擬動畫

C#開發基於Python機器學習的術後恢復模擬

C#開發基於U3D的VR眼鏡裝置虛擬人體三維重建

C#開發基於全息投影的裸眼3D醫學影像顯示技術

周邊附加篇

膠片列印:

C#開發醫學影像膠片列印系統(一):萬能花式佈局的實現思路

C#開發醫學影像膠片列印系統(二):膠片印表機通訊

C#開發醫學影像膠片列印系統(三):Pacs二維功能在排版中的應用

 

PACS服務端:

C#開發PACS醫學影像處理系統服務端(一):醫療裝置的連線與收圖

C#開發PACS醫學影像處理系統服務端(二):高併發架構

 

PACS與RIS系統的通訊與整合

在RIS系統中調起PACS並開啟Dicom影像

 

雲PACS與遠端會診

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(一):架構概述

C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(二):遠端會診與雙向轉診

 

科幻級視訊特效:

使用Adobe After Effects 製作PACS影像處理系統宣傳視訊