コード例 #1
0
ファイル: hierarchical.py プロジェクト: CrazyAlan/cmpt820
	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
コード例 #2
0
ファイル: hierarchical.py プロジェクト: CrazyAlan/cmpt820
    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
コード例 #3
0
ファイル: main.py プロジェクト: skyscraperV/cmpt820
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
    ]
コード例 #4
0
ファイル: main.py プロジェクト: CrazyAlan/cmpt820
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] 
コード例 #5
0

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()
コード例 #6
0
def check(s):
    c = encode(s)
    s2 = decode(c)
    assert '\n' not in c[:-1]
    assert c[-1] == '\n'
    assert s == s2
コード例 #7
0
    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)
コード例 #8
0
ファイル: ubercoder.py プロジェクト: LancerRevX/uber_coder
 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)
コード例 #9
0
ファイル: marker.py プロジェクト: david-abel/discover_2018
 def hamming_code(self):
     return encode(self.id_as_binary)
コード例 #10
0
def dumps(obj, protocol=1):
    return encode(pickle.dumps(obj, protocol))