def hierEncode(self, f_half, f): highResShape = np.shape(f) E_f_half = imt.ImageTransform.imresize(self.IMT.rgb2img(f_half), highResShape, 1) E_f_half_RGB = np.array(E_f_half) diffRGB = f.astype(int) - E_f_half_RGB.astype(int) diffRGB[diffRGB<0] = 1 diffRGB[diffRGB>255] = 255 diffRGB = diffRGB.astype(np.uint8) F_info, orgShape = coding.encode(np.array(diffRGB), self.quantMat) recRGB, recImg2show = coding.decode(F_info, self.quantMat, orgShape) return F_info, orgShape, recRGB, recImg2show
def hierEncode(self, f_half, f): highResShape = np.shape(f) E_f_half = imt.ImageTransform.imresize(self.IMT.rgb2img(f_half), highResShape, 1) E_f_half_RGB = np.array(E_f_half) diffRGB = f.astype(int) - E_f_half_RGB.astype(int) diffRGB[diffRGB < 0] = 1 diffRGB[diffRGB > 255] = 255 diffRGB = diffRGB.astype(np.uint8) F_info, orgShape = coding.encode(np.array(diffRGB), self.quantMat) recRGB, recImg2show = coding.decode(F_info, self.quantMat, orgShape) return F_info, orgShape, recRGB, recImg2show
def main(quantMat, path): #quantMat = np.full([8,8], 1) #Read Image orgImage = imt.ImageTransform() orgRGB = orgImage.readImage(path) #Reduce resolution imgPIL = orgImage.rgb2img(orgRGB) halfImg = imt.ImageTransform.imresize(imgPIL, np.shape(orgRGB), 2) quartImg = imt.ImageTransform.imresize(imgPIL, np.shape(orgRGB), 4) '''Hierachical Encoding''' #Encode quartImg F_info_quart, orgShape_quart = coding.encode(np.array(quartImg), quantMat) #print orgShape_quart #Decode QuartImg recRGB_quart, recImg2show_quart = coding.decode(F_info_quart, quantMat, orgShape_quart) #recImg2show_quart.show() #Encode half diff Image hierVar = hr.Hier(quantMat) halfdiffF_info, halfdifforgShape, hafldiffrecRGB, halfdiffrecImg2show = hierVar.hierEncode( np.array(quartImg), np.array(halfImg)) #Decode half recRGB_halfdiff, recImg2show_halfdiff = coding.decode( halfdiffF_info, quantMat, halfdifforgShape) fRecoverHalf, fRecoverHalfImg = hierVar.hireDecode(np.array(quartImg), recRGB_halfdiff) #fRecoverHalfImg.show() #fRecover, fRecoverImg = hierVar.hireDecode(fRecoverHalf, diffF_info, difforgShape) #Encode whole diff Image #imgPIL.show() diffF_info, difforgShape, diffrecRGB, diffrecImg2show = hierVar.hierEncode( np.array(fRecoverHalfImg), np.array(imgPIL)) #Decode whole image recRGB_diff, recImg2show_diff = coding.decode(diffF_info, quantMat, difforgShape) fRecover, fRecoverImg = hierVar.hireDecode(np.array(fRecoverHalfImg), recRGB_diff) #fRecoverHalfImg.show() #fRecoverImg.show() return [ imgPIL, fRecoverImg, halfdiffrecImg2show, diffrecImg2show, fRecoverHalfImg, recImg2show_quart ]
def main(quantMat, path): #quantMat = np.full([8,8], 1) #Read Image orgImage = imt.ImageTransform() orgRGB = orgImage.readImage(path) #Reduce resolution imgPIL = orgImage.rgb2img(orgRGB) halfImg = imt.ImageTransform.imresize(imgPIL, np.shape(orgRGB), 2) quartImg = imt.ImageTransform.imresize(imgPIL, np.shape(orgRGB), 4) '''Hierachical Encoding''' #Encode quartImg F_info_quart, orgShape_quart = coding.encode(np.array(quartImg), quantMat) #print orgShape_quart #Decode QuartImg recRGB_quart, recImg2show_quart = coding.decode(F_info_quart, quantMat, orgShape_quart) #recImg2show_quart.show() #Encode half diff Image hierVar = hr.Hier(quantMat) halfdiffF_info, halfdifforgShape, hafldiffrecRGB, halfdiffrecImg2show = hierVar.hierEncode(np.array(quartImg), np.array(halfImg)) #Decode half recRGB_halfdiff, recImg2show_halfdiff = coding.decode(halfdiffF_info, quantMat, halfdifforgShape) fRecoverHalf, fRecoverHalfImg = hierVar.hireDecode(np.array(quartImg), recRGB_halfdiff) #fRecoverHalfImg.show() #fRecover, fRecoverImg = hierVar.hireDecode(fRecoverHalf, diffF_info, difforgShape) #Encode whole diff Image #imgPIL.show() diffF_info, difforgShape, diffrecRGB, diffrecImg2show = hierVar.hierEncode(np.array(fRecoverHalfImg), np.array(imgPIL)) #Decode whole image recRGB_diff, recImg2show_diff = coding.decode(diffF_info, quantMat, difforgShape) fRecover, fRecoverImg = hierVar.hireDecode(np.array(fRecoverHalfImg), recRGB_diff) #fRecoverHalfImg.show() #fRecoverImg.show() return [imgPIL, fRecoverImg, halfdiffrecImg2show ,diffrecImg2show, fRecoverHalfImg ,recImg2show_quart]
class DatasetIAMSplit: """wrapper which provides a dataset interface for a split of the original dataset""" def __init__(self, dataset, start_idx, end_idx): assert start_idx >= 0 and end_idx <= len(dataset) self.dataset = dataset self.start_idx = start_idx self.end_idx = end_idx def __getitem__(self, idx): return self.dataset[self.start_idx + idx] def __len__(self): return self.end_idx - self.start_idx if __name__ == '__main__': from visualization import visualize from coding import encode, decode import matplotlib.pyplot as plt dataset = DatasetIAM(Path('../data'), (350, 350), (350, 350), caching=False) img, gt = dataset[0] gt_map = encode(img.shape, gt) gt = decode(gt_map) plt.imshow(visualize(img / 255 - 0.5, gt)) plt.show()
def check(s): c = encode(s) s2 = decode(c) assert '\n' not in c[:-1] assert c[-1] == '\n' assert s == s2
def __getitem__(self, item): batch_imgs = [] batch_gt_maps = [] batch_aabbs = [] for b in range(self.batch_size): if self.is_random: shuffled_idx = self.shuffled_indices[item * self.batch_size + b] else: shuffled_idx = item * self.batch_size + b img, aabbs = self.dataset[shuffled_idx] if self.is_random: # geometric data augmentation (image [0..255] and gt) if prob_true(0.75): # random scale fx = np.random.uniform(0.5, 1.5) fy = np.random.uniform(0.5, 1.5) # random position around center txc = self.input_size[1] * (1 - fx) / 2 tyc = self.input_size[0] * (1 - fy) / 2 freedom_x = self.input_size[1] // 10 freedom_y = self.input_size[0] // 10 tx = txc + np.random.randint(-freedom_x, freedom_x) ty = tyc + np.random.randint(-freedom_y, freedom_y) # map image into target image M = np.float32([[fx, 0, tx], [0, fy, ty]]) white_bg = np.ones(self.input_size, np.uint8) * 255 img = cv2.warpAffine(img, M, dsize=self.input_size[::-1], dst=white_bg, borderMode=cv2.BORDER_TRANSPARENT) # apply the same transformations to gt, and clip/remove aabbs outside of target image aabb_clip = AABB(0, img.shape[1], 0, img.shape[0]) aabbs = [ aabb.scale(fx, fy).translate(tx, ty).clip(aabb_clip) for aabb in aabbs ] aabbs = [aabb for aabb in aabbs if aabb.area() > 0] # photometric data augmentation (image [-0.5..0.5] only) img = (img / 255 - 0.5) if prob_true(0.25): # random distractors (lines) num_lines = np.random.randint(1, 20) for _ in range(num_lines): rand_pt = lambda: (np.random.randint(0, img.shape[1]), np.random.randint(0, img.shape[0])) color = np.random.triangular(-0.5, 0, 0.5) thickness = np.random.randint(1, 3) cv2.line(img, rand_pt(), rand_pt(), color, thickness) if prob_true(0.75): # random contrast img = (img - img.min()) / (img.max() - img.min()) - 0.5 # stretch img = img * np.random.triangular(0.1, 0.9, 1) # reduce contrast if prob_true(0.25): # random noise img = img + np.random.uniform(-0.1, 0.1, size=img.shape) if prob_true(0.25): # change thickness of text img = cv2.erode(img, np.ones((3, 3))) if prob_true(0.25): # change thickness of text img = cv2.dilate(img, np.ones((3, 3))) if prob_true(0.25): # invert image img = 0.5 - img else: img = (img / 255 - 0.5) gt_map = encode(self.output_size, aabbs, self.scale_down) batch_imgs.append(img[None, ...].astype(np.float32)) batch_gt_maps.append(gt_map) batch_aabbs.append(aabbs) batch_imgs = np.stack(batch_imgs, axis=0) batch_gt_maps = np.stack(batch_gt_maps, axis=0) batch_imgs = torch.from_numpy(batch_imgs).to('cuda') batch_gt_maps = torch.from_numpy(batch_gt_maps.astype( np.float32)).to('cuda') return DataLoaderItem(batch_imgs, batch_gt_maps, batch_aabbs)
def on_encode_button_clicked(self): method = self.method_chooser.get() text = self.text.get('1.0', 'end')[:-1] code = coding.encode(method, text) self.code.delete('1.0', 'end') self.code.insert('1.0', code)
def hamming_code(self): return encode(self.id_as_binary)
def dumps(obj, protocol=1): return encode(pickle.dumps(obj, protocol))