Оценить метод сегментации изображения - PullRequest
1 голос
/ 10 октября 2019

Я сегментировал изображение с помощью алгоритма на следующие метки. Это будет матрица меток 4 х 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. Так что это не неправильная классификация, а использование другой маркировки.

1 Ответ

2 голосов
/ 10 октября 2019

Вы, вероятно, хотите сравнить матрицы совпадений.

Матрица совпадений разделов равна n x n (где n - количество точек, 16 в вашем случае) двоичная матрица, где

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

Вы можетевычислить матрицу совместного вхождения для imagesegment и для groundtruth и подсчитать количество идентичных записей.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...