BSDS500分割數據集的下載及簡單處理


下載地址:https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/resources.html#bsds500

由於groundtruth是以mat格式存儲的,所以有時用的時候需要先轉換成jpg格式。從網上看了一下沒找到能直接用的,於是參考bolg寫了一個處理的代碼。

參考:https://blog.csdn.net/zhou_438/article/details/103490859

將代碼中的root換成你數據集實際所在位置,然后直接運行代碼,就可以在你數據集文件夾 BSR\BSDS500\data 中多出一個GT_convert文件夾,就是轉換后的結果。

from scipy import io
import scipy
import os
###運行時需要改變root值為BSD500所在的相應根目錄
root = 'F:\\lyc\\Data_Set\\BSR\\BSDS500'
PATH = os.path.join(root,'data\\groundTruth')


for sub_dir_name in ['train','test','val']:
    sub_pth = os.path.join(PATH,sub_dir_name)
    ##為生成的圖片新建個文件夾保存
    save_pth = os.path.join(root,'data\\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)
        scipy.misc.imsave(os.path.join(save_pth,new_img_name), edge_data_255)  # 保存圖片

 參考其他bolg對數據集進行的處理,但是crf對其中中間模糊像素不進行處理,一直以為是作者自己對數據集進行擴充的,后來發現不是,如果自己擴充他就不會與未擴充的方法進行比較,原來多個ground truth就藏在這個數據集中

        a = data['groundTruth'][0][1][0][0][1]*255
        b = data['groundTruth'][0][2][0][0][1]*255
        c = data['groundTruth'][0][3][0][0][1]*255
        d = data['groundTruth'][0][4][0][0][1]*255
        e = data['groundTruth'][0][5][0][0][1]*255
        f = data['groundTruth'][0][0][0][0][1]*255

  分別是6個ground truth。BSDS500數據集提出時只說是對BSDS300進行擴充,因此要看數據集具體構成要看BSDS300的論文。

另外:以mat存儲的矩陣是可以用python直接讀取的,因此並不一定要先轉換成圖片存儲:

import scipy.io as scio
mat_path = './test.mat'
mat = scio.loadmat(mat_path)

  就可以獲取mat矩陣了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM