【问题标题】:Evaluate Image Segmentation Method评估图像分割方法
【发布时间】:2020-02-07 06:55:40
【问题描述】:

我已使用算法将图像分割成以下标签 如果重新整形,这将是一个 4 x 4 的标签矩阵。以下面的列表为例:

imagesegment = [1,1,1,1,1,2,2,1,1,1,2,3,3,3,3,3]
groundtruth =  [2,2,2,2,3,3,3,2,2,3,3,1,1,1,1,3]

鉴于基本事实和首先包含具有不同标记方案的标签的分割,我如何评估该方法?

def jaccard_similarity(list1, list2):
    s1 = set(list1)
    s2 = set(list2)
    return len(s1.intersection(s2)) / len(s1.union(s2))


jaccard(imagesegment, groundtruth)

鉴于标注方案与上面所示的不同,如何将分割后的图像与真实图像进行比较?

注意通过比较列表:图像片段中的 1 可以看作是真值中的 2,2 是 3,3 是 1。所以这不是错误分类,而是使用了不同的标签。

【问题讨论】:

  • @venkata 我听说过骰子系数。但我认为它和 Jaccard 有同样的问题。当他们对列表执行集合操作时。如果我错了,请纠正我 OK!

标签: python python-3.x image-processing computer-vision image-segmentation


【解决方案1】:

您可能想要比较共现矩阵。

分区共现矩阵是nxn(其中n是点数,在您的情况下为16)二进制矩阵,其中

C_ij = 1 iff label(i) == label(j)

您可以计算imagesegmentgroundtruth 的共现矩阵并计算相同条目的数量。

imagesegment = np.array([1,1,1,1,1,2,2,1,1,1,2,3,3,3,3,3])
groundtruth =  np.array([2,2,2,2,3,3,3,2,2,3,3,1,1,1,1,3])
Ci = imagesegment[None, :] == imagesegment[:, None]
Cg = groundtruth[None, :] == groundtruth[:, None]
# compare only half the matrix and ignore diagonal 
fci = np.concatenate([np.diag(Ci,k=k) for k in range(1, 16)])
fcg = np.concatenate([np.diag(Cg, k=k) for k in range(1, 16)])
# the actual score:
(fci==fcg).mean()  # 0.775 in your case. score of 1 is perfect

【讨论】:

  • 这似乎是一个比较好的方法。这种技术有通用名称吗(就像 Jacard、骰子、F1 一样)?
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 2019-02-12
  • 2020-10-09
  • 2022-10-17
  • 2018-12-12
  • 2020-06-05
  • 2021-06-08
  • 1970-01-01
相关资源
最近更新 更多