基于C++的三维牙齿模型的自动化预处理

资源下载地址:https://download.csdn.net/download/sheziqiong/85629679
资源下载地址:https://download.csdn.net/download/sheziqiong/85629679

已实现的功能

使用VS运行工程,会显示该系统UI界面

  • 点击界面右栏中的【牙齿模型】按钮,会显示读取的牙齿模型,可通过鼠标点击、拖拽和滚轮的方式对牙齿模型进行旋转和缩放,以便全方位的观察。

  • 点击【去除牙龈】:

  • 点击【连通分量提取】,会显示将牙齿分成独立的各个牙齿的画面,其中包含去除牙龈后的整口牙的画面,和每个窗口显示单独的牙齿的画面:

  • 点击【包围盒】,会显示出各个牙齿的OBB包围盒。

  • 点击【FDI牙位表示法】,会显示各个牙齿使用FDI牙位表示法编号后的画面,红色的字体即为各个牙齿的编号:

  • 点击【牙齿缺失情况】,若有缺失,窗口上半部分会显示“miss”,下半部分显示缺失的牙齿编号(包括智齿);若无缺失情况,上半部分则显示“complete”。

  • 点击【牙齿数量】,会显示输入牙齿模型的牙齿个数。

  • 点击【轴向】,会显示添加了牙齿轴向的画面。

关键算法

  • 牙齿分割

    前期通过数字扫描仪的多次精密扫描获得患者牙齿的点云数据,通过 DBSCAN 算法 (一种密度聚类算法,参考可跳转至此) 完成牙齿点云的聚类,再将各组点云三角化,就得到了完整的 STL 三维牙齿模型。

    因此,对于一个作为输入的 STL 牙齿模型,其不同的牙齿之间不存在相邻的面片。类比寻找最大连通分量问题,我们可以考虑采用广度优先搜索,对面片进行聚类。但是,如果不对该算法进行优化,时间复杂度为面片的平方级。经实验,若未经优化,在 CPU 为 i7 7700 的计算机上运行该算法,含有14个牙齿(8万个面片)的模型需要40min才能分割完毕。

    鉴于此,本项目采取 Vtk 库特殊的 VtkPolyDataConnectivityFilter 类进行连通分量的提取。封装在该类中的工具函数使用特殊的数据结构保存三维模型的几何信息和拓扑信息,可完成面片的高效索引,从而大大加快连通分量的提取速度,在数秒内即可完成牙齿的分割工作。

未来需要优化的部分

  • 对连续缺失两颗以上牙齿的情况的处理不周。当有两颗以上牙齿连续的缺失时,算法只会补上一颗很大的“空牙齿”,而这会导致缺失部位周围牙齿的编号错误,因为两侧的牙齿的编号依赖于相对中间的牙齿的编号,因此会导致连续的错误。可以考虑的解决方案为:当两颗牙的中心的间距大于半径之和的二倍时,添加连续两颗“空牙齿”。连续缺失三颗乃至以上的情况同理。但是这样处理的问题是,系统的计算是直接计算两颗牙齿中心点之间的直线距离,当连续缺失的牙齿个数较多时,由于牙齿排列是有弧度的,依赖直线距离进行牙齿缺失的判断的误差会变大,导致编号和缺失识别不准确,因此对连续多颗牙齿缺失情况的识别,该系统还是需要进一步改善,改善的思路可以考虑根据牙模弧度来矫正牙齿中心点之间的距离的计算。
  • 在牙齿特征点的识别方面,比如牙尖的识别,虽然也进行了曲率特征的可视化分析,但主要采取的方法还是利用OBB包围盒的轴向来近似牙齿的牙尖方向,这个估计的误差还是挺大的。将来的工作应考虑深入研究利用曲率来识别牙尖的方法,通过曲率计算,精确的标记出各个牙齿的牙尖方向。

资源下载地址:https://download.csdn.net/download/sheziqiong/85629679
资源下载地址:https://download.csdn.net/download/sheziqiong/85629679

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值