我遵循了Tim Cootes所描述的Active Shape Models方法 textbook和original paper。到目前为止一切顺利(Procrustes分析,主成分分析,图像预处理(对比度,噪声))。只有拟合程序本身似乎不会收敛。
我使用textbook(第13页)中描述的灰度结构方法的统计模型,为40个地标中的每一个创建8个门牙中的每一个的拟合函数(所以320个不同通过对8个门牙中的每一个的40个界标中的每一个沿着垂直于边界的轮廓的任一侧上的5(= k
个)点采样每个门齿的拟合函数。这些函数等于马哈拉诺比斯距离(textbook p.14)。
在拟合过程中,我通过当前近似牙齿的40个标志中的每一个沿着垂直于边界的轮廓在任一侧上采样10(= m>k
)点。这样我就必须用相应的拟合函数来评估2(m-k)+1
个样本。
这些样本中的每一个都包含2k+1
点的梯度值。选择最小化函数的样本,并将相应的界标定位在那些2k+1
点的中点。这是针对40个地标中的每一个进行的。这导致了一种新的(未经验证的)牙齿近似。
图像坐标系中的这种近似与图像坐标系中的牙齿模型对齐。然后计算主成分分析的系数(bi
)并检查|bi|<3*sqrt(eigenvalue_i)
是否为了不偏离模型的形状太多。如果需要,系数(bi
)会受到限制,我们会转换回图像坐标系并开始一些新的迭代。
显示我们想要找到左上门牙的图像。
在迭代19中显示具有图像坐标系中的牙齿近似的梯度图像。 (红色:验证前 - 绿色:验证后)我们可以看到我们与最佳解决方案不同。
def create_gradient(img):
temp = cv2.Scharr(img, ddepth=-1, dx=1, dy=0)
return cv2.Scharr(temp, ddepth=-1, dx=0, dy=1)
在迭代19中显示模型坐标系中牙齿的近似值。 (蓝色:模型 - 红色:验证前 - 绿色:验证后)我们可以看到我们仍然接近模型的形状。
显示模型坐标系中牙齿的近似值,持续19次迭代。 (蓝色:模型 - 红色:验证前 - 绿色:验证后)在所有这些迭代中,我们可以看到我们保持接近模型的形状
所以我们保持接近形状(由主成分分析保护),但不接近地标周围的强度行为(由拟合函数保护)。
答案 0 :(得分:3)
渐变图像错误或更好没有任何用处,因为需要沿剖面法线而不是水平和垂直方向取导数。