# -*- coding: utf-8 -*-
"""
Created on Tue Jul 21 15:29:02 2020
@author: 12624
"""
import numpy as np
import cv2
import os
"""
混淆矩阵
P\L P N
P TP FP
N FN TN
"""
# 获取颜色字典
# labelFolder 标签文件夹,之所以遍历文件夹是因为一张标签可能不包含所有类别颜色
# classNum 类别总数(含背景)
def color_dict(labelFolder, classNum):
colorDict = []
# 获取文件夹内的文件名
ImageNameList = os.listdir(labelFolder)
for i in range(len(ImageNameList)):
ImagePath = labelFolder + "/" + ImageNameList[i]
img = cv2.imread(ImagePath).astype(np.uint32)
# 如果是灰度,转成RGB
if(len(img.shape) == 2):
img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB).astype(np.uint32)
# 为了提取唯一值,将RGB转成一个数
img_new = img[:,:,0] * 1000000 + img[:,:,1] * 1000 + img[:,:,2]
unique = np.unique(img_new)
# 将第i个像素矩阵的唯一值添加到colorDict中
for j in range(unique.shape[0]):
colorDict.append(unique[j])
# 对目前i个像素矩阵里的唯一值再取唯一值
colorDict = sorted(set(colorDict))
# 若唯一值数目等于总类数(包括背景)ClassNum,停止遍历剩余的图像
if(len(colorDict) == classNum):
break
# 存储颜色的BGR字典,用于预测时的渲染结果
colorDict_BGR = []
for k in range(len(colorDict)):
# 对没有达到九位数字的结果进行左边补零(eg:5,201,111->005,201,111)
color = str(colorDict[k]).rjust(9, '0')
# 前3位B,中3位G,后3位R
color_BGR = [int(color[0 : 3]), int(color[3 : 6]), int(color[6 : 9])]
colorDict_BGR.append(color_BGR)
# 转为numpy格式
colorDict_BGR = np.array(colorDict_BGR)
# 存储颜色的GRAY字典,用于预处理时的onehot编码
colorDict_GRAY = colorDict_BGR.reshape((colorDict_BGR.shape[0], 1 ,colorDict_BGR.shape[1])).astype(np.uint8)
colorDict_GRAY = cv2.cvtColor(colorDict_GRAY, cv2.COLOR_BGR2GRAY)
return colorDict_BGR, colorDict_GRAY
def ConfusionMatrix(numClass, imgPredict, Label):
# 返回混淆矩阵
mask = (Label >= 0) & (Label < numClass)
label = numClass * Label[mask] + imgPredict[mask]
count = np.bincount(label, minlength = numClass**2)
confusionMatrix = count.reshape(numClass, numClass)
return confusionMatrix
def OverallAccuracy(confusionMatrix):
# 返回所有类的整体像素精度OA
# acc = (TP + TN) / (TP + TN + FP + TN)
OA = np.diag(confusionMatrix).sum() / confusionMatrix.sum()
return OA
def Precision(confusionMatrix):
# 返回所有类别的精确率precision
precision = np.diag(confusionMatrix) / confusionMatrix.sum(axis = 1)
return precision
def Recall(confusionMatrix):
# 返回所有类别的召回率recall
recall = np.diag(confusionMatrix) / confusionMatrix.sum(axis = 0)
return recall
def F1Score(confusionMatrix):
precision = np.diag(confusionMatrix) / confusionMatrix.sum(axis = 1)
recall = np.diag(confusionMatrix) / confusionMatrix.sum(axis = 0)
f1score = 2 * precision * recall / (precision + recall)
return f1score
def IntersectionOverUnion(confusionMatrix):
# 返回交并比IoU
intersection = np.diag(confusionMatrix)
union = np.sum(confusionMatrix, axis = 1) + np.sum(confusionMatrix, axis = 0) - np.diag(confusionMatrix)
IoU = intersection / union
return IoU
def MeanIntersectionOverUnion(confusionMatrix):
# 返回平均交并比mIoU
intersection = np.diag(confusionMatrix)
union = np.sum(confusionMatrix, axis = 1) + np.sum(confusionMatrix, axis = 0) - np.diag(confusionMatrix)
IoU = intersection / union
mIoU = np.nanmean(IoU)
return mIoU
def Frequency_Weighted_Intersection_over_Union(confusionMatrix):
# 返回频权交并比FWIoU
freq = np.sum(confusionMatrix, axis=1) / np.sum(confusionMatrix)
iu = np.diag(confusionMatrix) / (
np.sum(confusionMatrix, axis = 1) +
np.sum(confusionMatrix, axis = 0) -
np.diag(confusionMatrix))
FWIoU = (freq[freq > 0] * iu[freq > 0]).sum()
return FWIoU
#################################################################
# 标签图像文件夹
LabelPath = r"Data\test\label1"
# 预测图像文件夹
PredictPath = r"Data\test\predict1"
# 类别数目(包括背景)
classNum = 3
#################################################################
# 获取类别颜色字典
colorDict_BGR, colorDict_GRAY = color_dict(LabelPath, classNum)
# 获取文件夹内所有图像
labelList = os.listdir(LabelPath)
PredictList = os.listdir(PredictPath)
# 读取第一个图像,后面要用到它的shape
Label0 = cv2.imread(LabelPath + "//" + labelList[0], 0)
# 图像数目
label_num = len(labelList)
# 把所有图像放在一个数组里
label_all = np.zeros((label_num, ) + Label0.shape, np.uint8)
predict_all = np.zeros((label_num, ) + Label0.shape, np.uint8)
for i in range(label_num):
Label = cv2.imread(LabelPath + "//" + labelList[i])
Label = cv2.cvtColor(Label, cv2.COLOR_BGR2GRAY)
label_all[i] = Label
Predict = cv2.imread(PredictPath + "//" + PredictList[i])
Predict = cv2.cvtColor(Predict, cv2.COLOR_BGR2GRAY)
predict_all[i] = Predict
# 把颜色映射为0,1,2,3...
for i in range(colorDict_GRAY.shape[0]):
label_all[label_all == colorDict_GRAY[i][0]] = i
predict_all[predict_all == colorDict_GRAY[i][0]] = i
# 拉直成一维
label_all = label_all.flatten()
predict_all = predict_all.flatten()
# 计算混淆矩阵及各精度参数
confusionMatrix = ConfusionMatrix(classNum, predict_all, label_all)
precision = Precision(confusionMatrix)
recall = Recall(confusionMatrix)
OA = OverallAccuracy(confusionMatrix)
IoU = IntersectionOverUnion(confusionMatrix)
FWIOU = Frequency_Weighted_Intersection_over_Union(confusionMatrix)
mIOU = MeanIntersectionOverUnion(confusionMatrix)
f1ccore = F1Score(confusionMatrix)
for i in range(colorDict_BGR.shape[0]):
# 输出类别颜色,需要安装webcolors,直接pip install webcolors
try:
import webcolors
rgb = colorDict_BGR[i]
rgb[0], rgb[2] = rgb[2], rgb[0]
print(webcolors.rgb_to_name(rgb), end = " ")
# 不安装的话,输出灰度值
except:
print(colorDict_GRAY[i][0], end = " ")
print("")
print("混淆矩阵:")
print(confusionMatrix)
print("精确度:")
print(precision)
print("召回率:")
print(recall)
print("F1-Score:")
print(f1ccore)
print("整体精度:")
print(OA)
print("IoU:")
print(IoU)
print("mIoU:")
print(mIOU)
print("FWIoU:")
print(FWIOU)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip基于Keras和Unet算法的多波段遥感图像语义分割python实现源码.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
资源推荐
资源详情
资源评论































收起资源包目录














共 12 条
- 1
资源评论


Scikit-learn
- 粉丝: 6750
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 工程机电安装光谱分析作业指导书.doc
- 第15讲逻辑门电路.ppt
- 第-九-章--设备更新的技术经济分析-9-3.ppt
- 2.1-呼吸系统疾病总论.ppt
- 北京某综合体育办公楼电气安装施工组织设计.doc
- 人防专项施工方案.doc
- 如何提高管线焊接合格率.ppt
- 混凝土工程专项施工方案.docx
- 陕西某办公楼工程施工招标文件.doc
- 商业广场营业楼锚杆施工.docx
- 驾驶员手册——驾驶员招聘与管理.pptx
- 菏泽市立医院:DSA+ISP+ICL+CDR.docx
- 第三章建筑工程费用项目构成.ppt
- 第六章:脏腑辩证1-别晓东.ppt
- 737NG飞机空调系统故障的排除及预防.doc
- 组织理论与设计.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
