def decode_one_idx(self, prev_idx): mode = bits2int(self.stream[self.ct:self.ct + 1], is_uint=True) self.ct += 1 if mode == 1: idx = bits2int(self.stream[self.ct:self.ct + self.length], is_uint=True) self.ct += self.length return idx else: pred = self.learner.predict(np.array(prev_idx).reshape(1, -1)) return pred
def decode_fail(self, idx): mode = bits2int(self.stream[self.ct:self.ct + 2], is_uint=True) self.ct += 2 if mode < 3: a = idx[-4:-1] a.sort() return a[mode] else: b = idx[:-4] b.sort() val = bits2int(self.stream[self.ct:self.ct + self.length], is_uint=True) self.ct += self.length return b[val]
def decode_one_idx(self, prev_idx, mode): self.get_MPM(prev_idx) if mode == 3: idx = bits2int(self.stream[self.ct:self.ct + self.length], is_uint=True) self.ct += self.length return self.codeword_list[idx] else: return self.MPM_list[mode]
def decode_one_idx(self, prev_idx): mode = bits2int(self.stream[self.ct:self.ct + 2], is_uint=True) self.ct += 2 prob = self.learner.predict_proba(np.array(prev_idx).reshape( 1, -1)).reshape(-1) pred = np.argsort(prob)[-3:] pred.sort() if mode == 3: codeword = [] for i in range(self.n_codeword): if i not in pred: codeword.append(i) idx = bits2int(self.stream[self.ct:self.ct + self.length], is_uint=True) self.ct += self.length return codeword[idx] else: return pred[mode]
def decode_one_idx(self, prev_idx): mode = bits2int(self.stream[self.ct:self.ct + 1], is_uint=True) self.ct += 1 prob = self.learner.predict_proba(np.array(prev_idx).reshape( 1, -1)).reshape(-1) if mode == 1: idx = self.decode_fail(np.argsort(prob)) return idx else: return np.argmax(prob)
def decode(self, stream, H, W): self.stream = stream idx = np.zeros((H, W)) self.ct = 0 for i in range(idx.shape[0]): for j in range(idx.shape[1]): prev_idx = [ self.get_prev(idx, i - 1, j - 1), self.get_prev(idx, i - 1, j), self.get_prev(idx, i, j - 1) ] mode = bits2int(self.stream[self.ct:self.ct + 2], is_uint=True) self.ct += 2 idx[i, j] = self.decode_one_idx(prev_idx, mode) return idx.astype('int16')