C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面 - 乔克...
source link: https://www.cnblogs.com/Uncle-Joker/p/17079269.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面
在医学影像领域中,将三维重建中的人体组织展开平铺至二维,用来研判病灶和制定治疗方案的重要手段之一,
它能够将立体曲面所包含的信息更为直观的展示到二维平面上,常用的情景包括:
牙床全景图、平铺血管、骨骼二维化展开(肋骨平铺)。
众所周知,人体牙床正常情况下是有弧度的,无论是从俯视位还是冠状位观察都是不能直观的了解牙齿状况,
或多或少的都会被其他组织或牙齿遮挡,如下图所示:
所以我们要将三维或二维的影像拉伸后平铺到桌面上,目前主流曲面展开算法有如下几种:
②旋转正交矩阵法
③迭代应变能量释放法
本文将根据网络查询现有的算法粗略介绍用能量法展开牙床:
基于弹簧质点系统建立能量模型:
判断展开标准:
曲面展开算法示例:
以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); }
运行结果:
将此算法应用到医学影像中,开始定位展开锚点:
现在就可以在同一屏画面中得到了各种视角的牙床图:
同理,还可以应用到血管和骨骼的平铺展开,更好的观察血管阻塞和破裂、骨折骨裂等情况。
C#开发PACS、RIS、3D医学影像处理系统系列教程 目录整理:
菜鸟入门篇
医学影像三维篇
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#开发基于Python人工智能的肺结节自动检测
C#开发基于Python人工智能的脊柱侧弯曲率算法
C#开发基于Python机器学习的医学影像骨骼仿真动画
C#开发基于Python机器学习的术后恢复模拟
C#开发基于U3D的VR眼镜设备虚拟人体三维重建
C#开发基于全息投影的裸眼3D医学影像显示技术
医疗影像软件产品友情链接
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK