我们在用一个算法对一幅图像进行分割之后,总会面临这样一个问题,分割的结果到底好不好。用眼睛可以看出好坏,但这只是主观的好坏,如何量化的对分割的结果进行评价呢,这是这篇文章我要讨论的主题。
我查阅过很多方法,包括ROC曲线,Dice重合率等等,要么是我理解不好,要么是难以实现。下面的代码,将基于GT(ground truth)图像计算分割图像的分割精度、过分割率、欠分割等指标来评估算法的分割结果。
首先简要介绍一下相关概念
GT(ground truth)图像:我理解的就是含有理论分割结果的图像,用来和结果图像进行比较的参照图像。那么GT图像怎么来,一般通过专家手工勾画出来,得到理论值。当然为避免偶然性,你可以选择多个专家,得到多个GT分割结果,取各项评估参数的平均值。
分割精度:个人理解就是分割准确的面积占GT图像中真实面积的百分比。找了半天找了这么个公式(如下)。
不难理解,其中Rs表示专家手工勾画出的分割图像的参考面积,Ts表示算法分割得到的图像的真实面积,|Rs-Ts|表示错误分割的像素点个数。
过分割率:即分割在GT图像参考面积之外的像素点的比率,计算公式如下:
含义同上,Os表示本不应该包含在分割结果中的像素点个数,实际却在分割结果中的像素点个数。换句话讲,Os中的像素点出现在实际分割图像中,但不出现在理论分割图像Rs中。
欠分割率:即分割在GT图像参考面积之中欠缺的像素点的比率,计算的公式如下:
含义同上,Us表示本应该包含在分割结果中的像素点个数,实际却不在分割结果中的像素点个数。换句话讲,Us中的像素点出现在理论分割图像中,但不出现在实际分割图像中。
好了,理论介绍完了,下面看一下效果和代码吧,我把我做头发分割的结果拿来做一下测试。
测试结果如下:
计算的各类参数如下: