第一步:将VOC数据集的类别标签放入Label文件夹中,使用以下代码将VOC2012数据集的图片按照类别分组保存新的文件夹
import os
import shutil
# 文件目录结构:
# D:/VOC2012/JPEGImages
# D:/VOC2012/Label
# D:/VOC2012/SegmentationClass
# D:/VOC2012/VOC2012-CoSaliency
Set_Data_Dir = 'D:/VOC2012/Label/'
for group_file in os.listdir(Set_Data_Dir):
Group_File_Dir = Set_Data_Dir + group_file
with open(Group_File_Dir) as f:
lines = f.read().splitlines()
for line in lines:
if line[-2:] != '-1':
origin_gt = 'D:/VOC2012/SegmentationClass/' + line[:-3] + '.png'
if os.path.exists(origin_gt):
origin_image = 'D:/VOC2012/JPEGImages/' + line[:-3] + '.jpg'
new_fold = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13])
if not os.path.exists(new_fold):
os.mkdir(new_fold)
new_image = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13]) + '/' + line[:-3] + '.jpg'
new_gt = 'D:/VOC2012/VOC2012-CoSaliency-Origin/' + str(group_file[:-13]) + '/' + line[:-3] + '.png'
shutil.copyfile(origin_image, new_image)
shutil.copyfile(origin_gt, new_gt)
第二步 转化语义分割真值图为显著性检测真值图
import os
import shutil
import cv2
from PIL import Image
import numpy as np
Set_Data_Dir = 'D:/VOC2012/VOC2012-CoSaliency-Origin/'
New_Data_Dir = 'D:/VOC2012/VOC2012-CoSaliency/'
i = 0
for group_file in os.listdir(Set_Data_Dir):
i = i + 1
for imgPath in [imgName for imgName in os.listdir(Set_Data_Dir + group_file + "/") if 'jpg' in imgName]:
origin_image = Set_Data_Dir + group_file + "/" + imgPath
new_fold = New_Data_Dir + group_file
if not os.path.exists(new_fold):
os.mkdir(new_fold)
newImg = New_Data_Dir + group_file + "/" + imgPath
shutil.copyfile(origin_image, newImg)
for gtPath in [gtName for gtName in os.listdir(Set_Data_Dir + group_file + "/") if 'png' in gtName]:
origin_gt_path = Set_Data_Dir + group_file + "/" + gtPath
origin_gt = Image.open(origin_gt_path)
origin_gt = np.array(origin_gt)
origin_gt[origin_gt != i] = 0
origin_gt[origin_gt == i] = 255
newGt_path = New_Data_Dir + group_file + "/" + gtPath
cv2.imwrite(newGt_path, origin_gt)
第三步 每张图片在组中与最相似的一张组成新组
import cv2
import os
import numpy as np
import shutil
import random
def CopyPic(img_path, j, Set_dir_len, group_dir_len, img_dir_len):
rgbOld = img_path
rgbFolder = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j)
print(rgbFolder)
if not os.path.exists(rgbFolder):
os.mkdir(rgbFolder)
rgbNew = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j) + "/" + img_path[group_dir_len:-4] + ".jpg"
print(rgbNew)
gtOld = img_path[:-4] + ".png"
print(gtOld)
gtNew = "D:/VOC2012/processed_datasets/" + img_path[Set_dir_len:group_dir_len-1] + '_' + str(j) + "/" + img_path[group_dir_len:-4] + ".png"
print(gtNew)
print()
shutil.copyfile(rgbOld, rgbNew)
shutil.copyfile(gtOld, gtNew)
return
Set_Data_Dir = "D:/VOC2012/VOC2012-CoSaliency-Delete/"
Set_dir_len = len(Set_Data_Dir)
#[p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]
for group_name in os.listdir(Set_Data_Dir):
i = 1
Group_Data_Dir = Set_Data_Dir + group_name + "/"
group_dir_len = len(Group_Data_Dir)
for img_name in [p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]:
img_path = Group_Data_Dir + img_name
img_dir_len = len(img_path)
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist(img, [0], None, [256], [0, 256])
list_loss = []
list_path = []
for o_img_name in [p for p in os.listdir(Group_Data_Dir) if 'jpg' in p]:
o_img_path = Group_Data_Dir + o_img_name
if img_path != o_img_path:
o_img = cv2.imread(o_img_path, cv2.IMREAD_GRAYSCALE)
o_hist = cv2.calcHist(o_img, [0], None, [256], [0, 256])
o_loss = cv2.compareHist(hist, o_hist, cv2.HISTCMP_BHATTACHARYYA)
list_loss.append(o_loss)
list_path.append(o_img_path)
loss_sort_index = np.argsort(list_loss)
CopyPic(img_path, i, Set_dir_len, group_dir_len, img_dir_len)
CopyPic(list_path[loss_sort_index[0]], i, Set_dir_len, group_dir_len, img_dir_len)
i = i + 1