Как получить путаницу матрицы для двоичного изображения? - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь создать путаницу для двух двоичных изображений.Они извлекаются (с использованием двоичного порогового значения) из 2-х полос в изображении GeoTiff, хотя я думаю, что эта информация не имеет значения.

dataset = rasterio.open('NDBI.tif')

VH_26Jun2015 = dataset.read(1)
VH_30Sep2015 = dataset.read(3)
GND_Truth = dataset.read(7)

VH_diff = VH_26Jun2015 - VH_30Sep2015
ret,th1 = cv2.threshold(VH_diff,0.02,255,cv2.THRESH_BINARY)

print(confusion_matrix(GND_Truth,th1)

Ошибка 1: я использовал приведенный выше код и столкнулся с проблемой, упомянутой здесь ValueError: multilabel-Indicator не поддерживается для матрицы путаницы Я попробовал решение argmax(axis=1), упомянутое ввопрос и другие места, но с результирующей матрицей размером 1983x1983 гг.(Эта ошибка 1, вероятно, та же самая, с которой столкнулся человек в вопросе выше).

print(confusion_matrix(GND_Truth.argmax(axis=1),th1.argmax(axis=1)))
Output: 
[[8 2 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]

Я проверил содержимое GND_Truth и th1 и убедился, что они двоичные.

numpy.unique(GND_Truth)
Output: 
array([0., 1.], dtype=float32)

Ошибка 2: Затем я вместо ravel() попытался сгладить свои двоичные изображения при передаче в confusion_matrix, как показано ниже, но в результате получилась матрица 3x3, тогда как я ожидаю матрицу 2x2.

print(confusion_matrix(GND_Truth.ravel().astype(int),th1.ravel().astype(int)))
Output: 
[[16552434        0  2055509]
 [ 6230317        0  1531602]
 [       0        0        0]]

Преобразование данных astype(int) на самом деле ничего не изменило.Подскажите, пожалуйста, что может быть причиной этих 2 ошибок?

...