经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面
来源:cnblogs  作者:乔克灬叔叔  时间:2023/2/1 9:37:34  对本文有异议

在医学影像领域中,将三维重建中的人体组织展开平铺至二维,用来研判病灶和制定治疗方案的重要手段之一,

它能够将立体曲面所包含的信息更为直观的展示到二维平面上,常用的情景包括:

牙床全景图、平铺血管、骨骼二维化展开(肋骨平铺)。

 

众所周知,人体牙床正常情况下是有弧度的,无论是从俯视位还是冠状位观察都是不能直观的了解牙齿状况,

或多或少的都会被其他组织或牙齿遮挡,如下图所示:

 

所以我们要将三维或二维的影像拉伸后平铺到桌面上,目前主流曲面展开算法有如下几种:

①元素法

②旋转正交矩阵法

③迭代应变能量释放法 

 

本文将根据网络查询现有的算法粗略介绍用能量法展开牙床:

基于弹簧质点系统建立能量模型:

 

 

 

 

 

弹性变形能E和弹性力f的计算式为:

 

 

判断展开标准:

 

 

 

 曲面展开算法示例:

 

 

 

以VTK中圆柱体为例,将一根圆柱展开为一个矩形平面的部分代码:

  1. void Cylinder_Expansion(vtkPolyData* srcData, vtkPolyData* destData, GEO_CYLINDER src_Cylinder) {
  2. vtkSmartPointer<vtkPoints>srcPoints = srcData->GetPoints();
  3. vtkSmartPointer<vtkPoints>destPoints = vtkSmartPointer<vtkPoints>::New();
  4. int num = srcPoints->GetNumberOfPoints();
  5. double p[3],r[3],cross[3];
  6. double v0[3] = { 0 }, v1[3] = {0};
  7. v0[src_Cylinder.RdTran] = src_Cylinder.CenterTran;
  8. v0[src_Cylinder.RdLong] = src_Cylinder.CenterLong;
  9. v1[src_Cylinder.RdTran] = src_Cylinder.R;
  10. v1[src_Cylinder.RdLong] = 0;
  11. double arc_len;
  12. for (int i = 0; i < num; ++i) {
  13. srcPoints->GetPoint(i, p);
  14. v0[src_Cylinder.Axial]= p[src_Cylinder.Axial];
  15. vtkMath::Subtract(p, v0, p);
  16. arc_len = vtkMath::AngleBetweenVectors(v1,p);
  17. vtkMath::Cross(v1, p, cross);
  18. if (cross[src_Cylinder.Axial]<0)
    arc_len
    = vtkMath::Pi()*2-arc_len;
  19. r[src_Cylinder.RdTran]= src_Cylinder.CenterTran+ arc_len*src_Cylinder.R;
  20. r[src_Cylinder.Axial] = v0[src_Cylinder.Axial];
  21. r[src_Cylinder.RdLong] =sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2]) - src_Cylinder.R;
  22. destPoints->InsertPoint(i,r);
  23. } destData->SetPoints(destPoints);
  24. }

运行结果:

 

 

 

将此算法应用到医学影像中,开始定位展开锚点:

 

现在就可以在同一屏画面中得到了各种视角的牙床图:

 

同理,还可以应用到血管和骨骼的平铺展开,更好的观察血管阻塞和破裂、骨折骨裂等情况。

 

 

 

 

原文链接:https://www.cnblogs.com/Uncle-Joker/p/17079269.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号