def load_data(): import cv2 from zca import ZCA zca = ZCA() # load dataset dataset = np.load('dataset/{}.npy'.format(dataset_name)).item() data = dataset['data'] data_map = dataset['label'] global nch, ncls nch = data.shape[2] ncls = len(np.unique(data_map)) - 1 # partition the training and test data train_coord = np.empty( (0, 2)).astype(np.int8) # coordinates of the training data test_coord = np.empty( (0, 2)).astype(np.int8) # coordinates of the test data for cls in range(ncls): coord_class = np.transpose(np.nonzero(data_map == cls + 1)) rng.shuffle(coord_class) # count = int(np.round(len(coord_class) * percent)) samples_per_class = count train_coord = np.concatenate( (train_coord, coord_class[:samples_per_class])) test_coord = np.concatenate( (test_coord, coord_class[samples_per_class:])) rng.shuffle(train_coord) rng.shuffle(test_coord) print(train_coord.shape, test_coord.shape) train_map = np.zeros_like(data_map) test_map = np.zeros_like(data_map) for i in range(train_coord.shape[0]): train_map[train_coord[i, 0], train_coord[i, 1]] = data_map[train_coord[i, 0], train_coord[i, 1]] for i in range(test_coord.shape[0]): test_map[test_coord[i, 0], test_coord[i, 1]] = data_map[test_coord[i, 0], test_coord[i, 1]] # data preprocessin data = ( (data - np.min(data[train_map != 0])) / np.max(data[train_map != 0] - np.min(data[train_map != 0])) - 0.5) * 2 zca.fit(data[train_map != 0]) data = zca.transform(data.reshape(-1, nch)).reshape(data.shape[0], data.shape[1], data.shape[2]) # padding the HSI scene and the label map data = cv2.copyMakeBorder(data, patch_size // 2, patch_size // 2, patch_size // 2, patch_size // 2, cv2.BORDER_REPLICATE) train_map = cv2.copyMakeBorder(train_map, patch_size // 2, patch_size // 2, patch_size // 2, patch_size // 2, cv2.BORDER_REPLICATE) test_map = cv2.copyMakeBorder(test_map, patch_size // 2, patch_size // 2, patch_size // 2, patch_size // 2, cv2.BORDER_REPLICATE) train_coord += patch_size // 2 test_coord += patch_size // 2 return data, train_map, train_coord, test_map, test_coord