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

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

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

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

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

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

①元素法

②旋转正交矩阵法

③迭代应变能量释放法

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

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

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

判断展开标准:

曲面展开算法示例:

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

void  Cylinder_Expansion(vtkPolyData* srcData, vtkPolyData* destData, GEO_CYLINDER src_Cylinder) {
vtkSmartPointer<vtkPoints>srcPoints = srcData->GetPoints();
vtkSmartPointer<vtkPoints>destPoints = vtkSmartPointer<vtkPoints>::New();
int num = srcPoints->GetNumberOfPoints();
double p[3],r[3],cross[3];
double v0[3] = { 0 }, v1[3] = {0};
v0[src_Cylinder.RdTran] = src_Cylinder.CenterTran;
v0[src_Cylinder.RdLong] = src_Cylinder.CenterLong;
v1[src_Cylinder.RdTran] = src_Cylinder.R;
v1[src_Cylinder.RdLong] = 0; double arc_len;
for (int i = 0; i < num; ++i) { srcPoints->GetPoint(i, p);
v0[src_Cylinder.Axial]= p[src_Cylinder.Axial];
vtkMath::Subtract(p, v0, p);
arc_len = vtkMath::AngleBetweenVectors(v1,p);
vtkMath::Cross(v1, p, cross);
if (cross[src_Cylinder.Axial]<0)
arc_len = vtkMath::Pi()*2-arc_len;
r[src_Cylinder.RdTran]= src_Cylinder.CenterTran+ arc_len*src_Cylinder.R;
r[src_Cylinder.Axial] = v0[src_Cylinder.Axial];
r[src_Cylinder.RdLong] =sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2]) - src_Cylinder.R;
destPoints->InsertPoint(i,r);
} destData->SetPoints(destPoints);
}

运行结果:

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

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

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

最新文章

  1. cookie相关
  2. angularjs表单验证checkbox
  3. 移动设备如何打开RMS加密的文档
  4. linux进程间通信-信号量(semaphore)
  5. [LeetCode]题解(python):049-Groups Anagrams
  6. 【转】winform退出代码:Application.Exit和Environment.Exit(0)
  7. 新功能:Azure 负载平衡器的空闲超时现可配置了
  8. cf472D Design Tutorial: Inverse the Problem
  9. 在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
  10. UVA 3713 Astronauts
  11. 2018年最新JAVA面试题总结之数据库(3)
  12. Redis压缩列表
  13. Tomcat与Nginx服务器的配合使用及各自的区别
  14. python学习Day5 几种数据类型的使用
  15. 二、截取字符串长度(css方式)
  16. Springboot+Mybatis 显示sql语句
  17. Socks5 RFC1928协议中文版
  18. ArrayList源码分析笔记(jdk1.8)
  19. Linux Firewall 开启与关闭 以及sudo 设置
  20. Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)

热门文章

  1. 浅谈API和SDK的区别
  2. Linux的挖矿木马病毒清除(kswapd0进程)
  3. Go | 函数(包)的使用
  4. go cookie session
  5. 【OpenStack云平台】搭建openstack云平台
  6. 基于python的数学建模---Fuzzy C-Means(模糊C均值聚类)
  7. 图文详解在VMware Workstation 16 PRO虚拟机上安装Rocky 8.6 linux系统
  8. mysql数据库报错 sql 1452 Cannot add or update a child row:a foreign key constraint fails
  9. Oracle 一对多将多行数据整理为一行
  10. ATM购物车项目 三层架构