我正在尝试为2个二进制图像生成一个混淆矩阵。这些是从GeoTiff图像的2个波段中提取(使用二进制阈值)的,尽管我认为此信息应该无关紧要。
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 is not supported for confusion matrix
我尝试了问题和其他地方提到的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个错误的原因?