当前位置 : 主页 > 编程语言 > 其它开发 >

C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思

来源:互联网 收集:自由互联 发布时间:2022-05-14
当我们将CT切片重建为三维体之后,通常会消除一些不必要的外部组织来观察内部病灶, 一般思路是根据人体常见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

同样最后还是用观察者模式展现体重建

        //设置相机
            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);//装载绘图窗口

  

依照上述思想,实现最终效果,

案例①:从面部重建渐变到口腔牙齿,显露出牙床钢钉:

 

 

更为直观、方便的观察牙床钢钉及口腔其他情况:

 

案例②:颅脑及上胸腔平扫,从皮肤渐变到肌肉、神经、骨骼

 

 

渐变过程中观察骨骼、神经、血管等病灶:

 

 

网友评论