如何获得二进制图像的混淆矩阵?

时间:2019-05-21 12:03:01

标签: python scikit-learn confusion-matrix

我正在尝试为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_Truthth1的内容,并确认它们是二进制的。

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个错误的原因?

0 个答案:

没有答案