此为基于距离场提取骨架的公式,DTp表示体素p与它最近的边界体素的距离,VP代表某体素的26邻居,也就是共同分享一个顶点邻居体素,这样的体素不管是实体素还是虚体素最多只有26个。TP代表细化的参数,第二行参数求出了体素p和它26邻居的平均距离场的值,当体素p满足不等式,这个体素是线性骨架上的体素。TP越小,保留的骨架体素可能会越线性,也有可能会断裂。但是通常情况下,TP参数不容易直观上估计它的值,因此,保留的骨架体素往往都包含许多噪声。为了处理这个问题,采用的是多分辨率的办法,对TP的设定根据邻域的范围分成三种情况(3*3*3、5*5*5、7*7*7),多分辨率计算如下 公式所示:
先算出26的平均距离值,然后TP1的值就是模型所有体素的26邻域平均距离值与所有体素的DT值的差再除以体素总数。
124、342的算法也是如此。如果体素p满足这三个分辨率,那么他就是骨架体素。
这个方法的不足在于,当模型内有一些孤点时,在计算近似的距离场时,这些孤点会导致局部的最值。改进的方式就是把基于距离场提取的粗糙骨架进行L1中值优化改进。
关于距离值怎么计算,可以直接计算体素中心点到边界体素中心点的欧氏距离,计算量大、精度高往往不至于。所以有通过(3,4,5)的加权、棋盘距离、曼哈顿距离之类的方式来计算。
(3,4,5)加权指的是,从最外层开始向内层计算距离值。当边界体素和背景体素是面相邻的时候,DT值为3,边相邻DT值为4,点相邻DT值为5。第一次遍历之后,就得到了边界体素上的DT值,在以这一圈为基础向内部累加,FNei + 3,ENei + 4,VNei + 5。
伪代码如下:
(3,4,5)
c/c++开发分享距离变换提取骨架地址:https://blog.csdn.net/weixin_36429070/article/details/108573327
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/597559.html