BSD500 mat 转化为 jpg 或者 png

BSD500 mat 转化为 jpg 或者 png

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
from scipy import io
import os
###运行时需要改变root值为BSD500所在的相应根目录
root = './data_and_code/BSDS500'
PATH = os.path.join(root,'groundTruth')

def convert(root, PATH):
    for sub_dir_name in ['train','test','val']:
        sub_pth = os.path.join(PATH,sub_dir_name)
        ##为生成的图片新建个文件夹保存
        save_pth = os.path.join(root,'GT_convert',sub_dir_name)
        os.makedirs(save_pth,exist_ok=True)
        print('开始转换'+sub_dir_name+'文件夹中内容')
        for filename in os.listdir(sub_pth):
            # 读取mat文件中所有数据
            #mat文件里面是以字典形式存储的数据
            #包括 dict_keys(['__globals__', 'groundTruth', '__header__', '__version__'])
            #我们要用到'groundTruth']中的轮廓
            #x['groundTruth'][0][0][0][0][1]为轮廓
            #x['groundTruth'][0][0][0][0][0]为分割图
            data = io.loadmat(os.path.join(sub_pth,filename))
            edge_data = data['groundTruth'][0][0][0][0][1]
            #存储的是归一化后的数据:0<x<1
            #因此需要还原回0<x<255
            edge_data_255 = edge_data * 255
            new_img_name = filename.split('.')[0]+'.jpg'
            print(new_img_name, type(new_img_name))

            dir = save_pth + "/" + new_img_name
            # print("savedir:",dir)
            new_img_name = Image.fromarray(edge_data_255)
            new_img_name.save(dir)

            # plt.imshow(new_img_name)
            # plt.show()

读取数据

# img = "./data_and_code/BSDS500/GT_convert/image/2092.jpg"
# label = "./data_and_code/BSDS500/GT_convert/train/2092.jpg"
#
# img = Image.open(img)
# label = Image.open(label)
# # print(np.max(label),np.min(label))
# label = np.array(label)
# f = open('a.txt', 'w')
# for i in range(label.shape[0]):
#     # f.write('\n')
#     for j in range(label.shape[1]):
#         print(label[i,j])
#         f.write(str(label[i,j]))
# f.close()


# plt.figure(figsize=(10, 10))
# plt.subplot(1, 2, 1)
# plt.imshow(img)
# plt.title("original ground")
#
# plt.subplot(1, 2, 2)
# plt.imshow(label)
# plt.title("label img")
# plt.show()
Matlab中绘制BSD500标签数据的PR曲线,首先需要了解PR曲线的概念和计算方法。PR曲线常用于评估分类模型的性能,特别是针对二分类问题。 首先,为了绘制PR曲线,我们需要有已知的标签数据和模型预测结果。 1. BSD500标签数据:这是指BSD500数据集中每个样本的真实类别标签。假设我们有N个样本,我们可以将其表示为一个N维向量Y_true=[y1, y2, ..., yn],其中yi表示第i个样本的真实类别(例如0或1,代表负类和正类)。 2. 模型预测结果:这是指用训练好的分类模型对BSD500数据集进行预测得到的结果。同样,我们可以将预测结果表示为一个N维向量Y_pred=[p1, p2, ..., pn],其中pi表示第i个样本的预测概率或置信度(通常在0到1之间)。 接下来,我们可以使用Matlab中的函数计算PR曲线的各个点。 1. 计算精确率(Precision):精确率表示模型预测为正类的样本中真实为正类的比例。通过以下公式计算: Precision = TP / (TP + FP) 其中,TP表示真正类样本的数量,FP表示假正类样本的数量。 2. 计算召回率(Recall):召回率表示模型预测为正类的样本在真实为正类样本中的比例。通过以下公式计算: Recall = TP / (TP + FN) 其中,TP表示真正类样本的数量,FN表示假负类样本的数量。 3. 绘制PR曲线:在Matlab中,我们可以通过计算一系列不同阈值下的精确率和召回率,并将其作为曲线上的点进行绘制。可以使用plot函数将这些点连接起来,形成PR曲线。 最后,通过绘制BSD500数据集的PR曲线,我们可以直观地评估分类模型的性能,根据曲线的形状和表现,我们能够了解到模型在不同精确率和召回率条件下的表现,并选择最合适的阈值和模型参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值