Я пытаюсь создать путаницу для двух двоичных изображений.Они извлекаются (с использованием двоичного порогового значения) из 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 ошибок?