| import torch.utils.data as data |
| import torch |
|
|
| from PIL import Image |
| import os |
| import scipy.io |
| import numpy as np |
| import csv |
| from openpyxl import load_workbook |
| import cv2 |
|
|
| class LIVEC(data.Dataset): |
| def __init__(self, root, index, transform): |
| imgpath = scipy.io.loadmat(os.path.join(root, 'Data', 'AllImages_release.mat')) |
| imgpath = imgpath['AllImages_release'] |
| imgpath = imgpath[7:1169] |
| mos = scipy.io.loadmat(os.path.join(root, 'Data', 'AllMOS_release.mat')) |
| labels = mos['AllMOS_release'].astype(np.float32) |
| labels = labels[0][7:1169] |
|
|
| sample, gt = [], [] |
| for i, item in enumerate(index): |
| sample.append(os.path.join(root, 'Images', imgpath[item][0][0])) |
| gt.append(labels[item]) |
| gt = normalization(gt) |
|
|
| self.samples, self.gt = sample, gt |
| self.transform = transform |
|
|
| def __getitem__(self, index): |
| """ |
| Args: |
| index (int): Index |
| |
| Returns: |
| tuple: (sample, target) where target is class_index of the target class. |
| """ |
| img_tensor, gt_tensor = get_item(self.samples, self.gt, index, self.transform) |
|
|
| return img_tensor, gt_tensor |
|
|
| def __len__(self): |
| length = len(self.samples) |
| return length |
|
|
|
|
| class Koniq10k(data.Dataset): |
| def __init__(self, root, index, transform): |
| imgname = [] |
| mos_all = [] |
| csv_file = os.path.join(root, 'koniq10k_distributions_sets.csv') |
| with open(csv_file) as f: |
| reader = csv.DictReader(f) |
| for row in reader: |
| imgname.append(row['image_name']) |
| mos = np.array(float(row['MOS'])).astype(np.float32) |
| mos_all.append(mos) |
|
|
| sample, gt = [], [] |
| for i, item in enumerate(index): |
| sample.append(os.path.join(root, '1024x768', imgname[item])) |
| gt.append(mos_all[item]) |
| gt = normalization(gt) |
|
|
| self.samples, self.gt = sample, gt |
| self.transform = transform |
|
|
| def __getitem__(self, index): |
| """ |
| Args: |
| index (int): Index |
| |
| Returns: |
| tuple: (sample, target) where target is class_index of the target class. |
| """ |
| img_tensor, gt_tensor = get_item(self.samples, self.gt, index, self.transform) |
|
|
| return img_tensor, gt_tensor |
|
|
| def __len__(self): |
| length = len(self.samples) |
| return length |
|
|
|
|
| class SPAQ(data.Dataset): |
| def __init__(self, root, index, transform): |
| imgname = [] |
| mos_all = [] |
| csv_file = os.path.join(root, 'koniq10k_scores_and_distributions.csv') |
| with open(csv_file) as f: |
| reader = csv.DictReader(f) |
| for row in reader: |
| imgname.append(row['image_name']) |
| mos = np.array(float(row['MOS_zscore'])).astype(np.float32) |
| mos_all.append(mos) |
|
|
| sample, gt = [], [] |
| for i, item in enumerate(index): |
| sample.append(os.path.join(root, '1024x768', imgname[item])) |
| gt.append(labels[item]) |
| gt = norm_target(gt) |
|
|
| self.samples, self.gt = sample, gt |
|
|
| self.samples, self.gt = sample, gt |
| self.transform = transform |
|
|
| def __getitem__(self, index): |
| """ |
| Args: |
| index (int): Index |
| |
| Returns: |
| tuple: (sample, target) where target is class_index of the target class. |
| """ |
| path, target = self.samples[index], self.gt[index] |
| sample = pil_loader(path) |
| sample = self.transform(sample) |
| return sample, target |
|
|
| def __len__(self): |
| length = len(self.samples) |
| return length |
|
|
|
|
| class BID(data.Dataset): |
| def __init__(self, root, index, transform): |
|
|
| imgname = [] |
| mos_all = [] |
|
|
| xls_file = os.path.join(root, 'DatabaseGrades.xlsx') |
| workbook = load_workbook(xls_file) |
| booksheet = workbook.active |
| rows = booksheet.rows |
| count = 1 |
| for row in rows: |
| count += 1 |
| img_num = booksheet.cell(row=count, column=1).value |
| img_name = "DatabaseImage%04d.JPG" % (img_num) |
| imgname.append(img_name) |
| mos = booksheet.cell(row=count, column=2).value |
| mos = np.array(mos) |
| mos = mos.astype(np.float32) |
| mos_all.append(mos) |
| if count == 587: |
| break |
|
|
| sample, gt = [], [] |
| for i, item in enumerate(index): |
| sample.append(os.path.join(root, imgname[item])) |
| gt.append(mos_all[item]) |
| gt = normalization(gt) |
|
|
| self.samples, self.gt = sample, gt |
| self.transform = transform |
|
|
| def __getitem__(self, index): |
| """ |
| Args: |
| index (int): Index |
| |
| Returns: |
| tuple: (sample, target) where target is class_index of the target class. |
| """ |
| img_tensor, gt_tensor = get_item(self.samples, self.gt, index, self.transform) |
|
|
| return img_tensor, gt_tensor |
|
|
| def __len__(self): |
| length = len(self.samples) |
| return length |
|
|
| def get_item(samples, gt, index, transform): |
| path, target = samples[index], gt[index] |
| sample = load_image(path) |
| samples = {'img': sample, 'gt': target } |
| samples = transform(samples) |
|
|
| return samples['img'], samples['gt'].type(torch.FloatTensor) |
|
|
|
|
| def getFileName(path, suffix): |
| filename = [] |
| f_list = os.listdir(path) |
| for i in f_list: |
| if os.path.splitext(i)[1] == suffix: |
| filename.append(i) |
| return filename |
|
|
|
|
| def load_image(img_path): |
| d_img = cv2.imread(img_path, cv2.IMREAD_COLOR) |
| d_img = cv2.resize(d_img, (224, 224), interpolation=cv2.INTER_CUBIC) |
| d_img = cv2.cvtColor(d_img, cv2.COLOR_BGR2RGB) |
| d_img = np.array(d_img).astype('float32') / 255 |
| d_img = np.transpose(d_img, (2, 0, 1)) |
| |
| return d_img |
|
|
| def normalization(data): |
| data = np.array(data) |
| range = np.max(data) - np.min(data) |
| data = (data - np.min(data)) / range |
| data = list(data.astype('float').reshape(-1, 1)) |
|
|
| return data |