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醫學影像處理系統(七):讀取影像Dicom資訊
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#開發醫學影像膠片列印系統(三):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醫學影像處理系統(七):讀取影像Dicom資訊
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#開發醫學影像膠片列印系統(三):Pacs二維功能在排版中的應用
PACS服務端:
C#開發PACS醫學影像處理系統服務端(一):醫療裝置的連線與收圖
C#開發PACS醫學影像處理系統服務端(二):高併發架構
PACS與RIS系統的通訊與整合
在RIS系統中調起PACS並開啟Dicom影像
雲PACS與遠端會診
C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(一):架構概述
C#開發PACS醫學影像處理系統之雲PACS(區域PACS)(二):遠端會診與雙向轉診
科幻級視訊特效:
使用Adobe After Effects 製作PACS影像處理系統宣傳視訊