Example #1
0
    def __init__(self, filepath, qually, mode='444'):
        '''
        '''
        imOrig = cv2.imread(filepath,1)
        self.filepath = filepath
        self.mode = mode
        #Taxa de compressão e Redundancia
        self.CRate = 0; self.Redunc = 0
        self.avgBits = 0
        #Qualidade
        self.qually = qually
        #Dimensões da imagem original
        self.Mo, self.No, self.Do = imOrig.shape
        self.r, self.c = [8, 8]       #DIMENSAO DOS BLOCOS
        #TRATA AS DIMENSOES DA IMAGEM
        (self.M, self.N, self.D), self.img = h.adjImg(imOrig)
        #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
        self.nBlkRows = int(np.floor(self.M/self.r))
        self.nBlkCols = int(np.floor(self.N/self.c))
        #Gera Tabela de Qunatizaçao
        self.Z = h.genQntb(self.qually)
        #TRANSFORMA DE RGB PARA YCbCr
        self.Ymg = cv2.cvtColor(self.img, cv2.COLOR_BGR2YCR_CB)
        self.NumBits = 0
        if self.Do == 2:
            self.NCHNL = 1
        elif self.Do == 3:
            self.NCHNL = 3
            
#        self.OUTCOMES = self._run_()
        self._run_()
Example #2
0
    def __init__(self, frame, qually, hufftables, Ztab, hvsqm, mode='444'):
        '''
        '''
        
        #TRATA AS DIMENSOES DA IMAGEM
        (self.Madj, self.Nadj, self.Dadj), self.img = h.adjImg(np.float32(frame))         #        imOrig = frame  #cv2.imread(filepath,1)        #self.filepath = filepath
        self.mode = mode
        self.hufftables = hufftables
        self.CRate = 0; self.Redunc = 0                #Taxa de compressão e Redundancia
        self.avgBits = 0; self.NumBits = 0             #Media de bits e numero de bits
        self.qually = qually                           #Qualidade
        self.M, self.N, self.D = frame.shape           #imOrig.shape          #Dimensões da imagem original
        self.r, self.c = [8, 8]                        #DIMENSAO DOS BLOCOS
        
        #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
        self.nBlkRows = int(np.floor(self.Madj/self.r))
        self.nBlkCols = int(np.floor(self.Nadj/self.c))
        
        #GERA TABELA DE QUANTIZAÇÃO
        self.Zhvs = Ztab[0]
        self.MV = Ztab[1]
        self.sspace = Ztab[2]
#        else:
#            self.Z = Ztab[1]
        
        #TRANSFORMA DE RGB PARA YCbCr
        self.Ymg = self.img #cv2.cvtColor(self.img, cv2.COLOR_BGR2YCR_CB)
        
        if self.D == 2:
            self.NCHNL = 1
        elif self.D == 3:
            self.NCHNL = 3
            
        self.seqhuff = self._run_()
Example #3
0
    def __init__(self, frame, qually, hufftables, Z, mode='444'):
        '''
        '''

        #TRATA AS DIMENSOES DA IMAGEM
        (Madj, Nadj, Dadj), self.img = h.adjImg(
            np.float32(frame)
        )  #        imOrig = frame  #cv2.imread(filepath,1)        #self.filepath = filepath
        self.mode = mode
        self.hufftables = hufftables
        self.CRate = 0
        self.Redunc = 0  #Taxa de compressão e Redundancia
        self.avgBits = 0
        self.NumBits = 0  #Media de bits e numero de bits
        self.qually = qually  #Qualidade
        self.M, self.N, self.D = frame.shape  #imOrig.shape          #Dimensões da imagem original
        self.r, self.c = [8, 8]  #DIMENSAO DOS BLOCOS

        #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
        self.nBlkRows = int(np.floor(Madj / self.r))
        self.nBlkCols = int(np.floor(Nadj / self.c))

        #GERA TABELA DE QUANTIZAÇÃO
        self.Z = Z
        #TRANSFORMA DE RGB PARA YCbCr
        self.Ymg = self.img  #cv2.cvtColor(self.img, cv2.COLOR_BGR2YCR_CB)

        if self.D == 2:
            self.NCHNL = 1
        elif self.D == 3:
            self.NCHNL = 3

        self.seqhuff = self._run_()
Example #4
0
    def _run_(self):
        '''
        '''
        #print '- Running Mjpeg Decoder...'
        hf = h.HuffCoDec(self.hufftables)
        r, c, chnl = self.R, self.C, self.NCHNL
        Z = self.Z
        
        #hufcd = self.huffcodes#self.fl.readline()[:-1]
        if self.mode == '444':
            for ch in range(chnl):                #hufcd = self.fl.readline()[:-1]            #    print hufcd[0:20]
                nblk, seqrec = hf.invhuff(self.huffcodes[ch], ch)
                for i in range(self.nBlkRows):
                    for j in range(self.nBlkCols):
                        blk = h.zagzig(seqrec[i*self.nBlkCols + j])
                        self.imRaw[r*i:r*i+r, c*j:c*j+c, ch] = np.round_( cv2.idct( blk*Z[:,:,ch] ))
                        
        elif self.mode == '420':
            #import math as m
            if chnl == 1:
                rYmg = self.imRaw
            else:                #Y = self.imRaw[:,:,0]
                Y = np.zeros( (self.M, self.N) )
                dims, CrCb = h.adjImg( downsample(np.zeros( (self.M, self.N, 2) ), self.mode)[1] )
                rYmg = [ Y, CrCb[:,:,0], CrCb[:,:,1] ]
                
            for ch in range(chnl):
                #hufcd = self.fl.readline()[:-1]
                if ch == 0:
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:
                    rBLK, cBLK = int(np.floor(dims[0]/self.R)), int(np.floor(dims[1]/self.C))
            #    print hufcd[0:20]
                nblk, self.seqrec = hf.invhuff(self.huffcodes[ch], ch)
                for i in range(rBLK):
                    for j in range(cBLK):
                        blk = h.zagzig(self.seqrec[i*cBLK + j])
                        #print rYmg[ch][r*i:r*i+r, c*j:c*j+c].shape, ch, i, j
                        rYmg[ch][r*i:r*i+r, c*j:c*j+c] = np.round_( cv2.idct( blk*Z[:,:,ch] ))
            # UPSAMPLE
            if chnl == 1:
                self.imRaw = rYmg #[:self.Mo, : self.No]
            else:
                self.imRaw[:,:,0] = rYmg[0]
                self.imRaw[:,:,1] = upsample(rYmg[1], self.mode)[:self.M, :self.N]
                self.imRaw[:,:,2] = upsample(rYmg[2], self.mode)[:self.M, :self.N]
        
        #self.fl.close()
        
#        imrec = cv2.cvtColor((self.imRaw[:self.Mo, :self.No]+128), cv2.COLOR_YCR_CB2BGR)
#        imrec = self.imRaw[:self.Mo, :self.No]+128
        imrec = self.imRaw+128.0
#        imrec[imrec>255.0]=255.0
#        imrec[imrec<0.0]=0.0
								
        #print 'Mjpeg Decoder Complete...'
        
        return imrec
Example #5
0
 def _run_(self):
     '''
     '''
     print '- Running Decoder...'
     hf = h.HuffCoDec()
     r, c, chnl = self.R, self.C, self.NCHNL
     Z = self.Z
     
     if self.mode == '444':
         for ch in range(chnl):
             hufcd = self.fl.readline()[:-1]
         #    print hufcd[0:20]
             nblk, seqrec = hf.invhuff(hufcd, ch)
             for i in range(self.nBlkRows):
                 for j in range(self.nBlkCols):
                     blk = h.zagzig(seqrec[i*self.nBlkCols + j])
                     self.imRaw[r*i:r*i+r, c*j:c*j+c, ch] = np.round_( cv2.idct( blk*Z[:,:,ch] ))
                     
     elif self.mode == '420':
         #import math as m
         if chnl == 1:
             rYmg = self.imRaw
         else:                #Y = self.imRaw[:,:,0]
             Y = np.zeros( (self.M, self.N) )
             dims, CrCb = h.adjImg( downsample(np.zeros( (self.M, self.N, 2) ), self.mode)[1] )
             rYmg = [ Y, CrCb[:,:,0], CrCb[:,:,1] ]
             
         for ch in range(chnl):
             hufcd = self.fl.readline()[:-1]
             if ch == 0:
                 rBLK = self.nBlkRows
                 cBLK = self.nBlkCols
             else:
                 rBLK, cBLK = int(np.floor(dims[0]/self.R)), int(np.floor(dims[1]/self.C))
         #    print hufcd[0:20]
             nblk, self.seqrec = hf.invhuff(hufcd, ch)
             for i in range(rBLK):
                 for j in range(cBLK):
                     blk = h.zagzig(self.seqrec[i*cBLK + j])
                     #print rYmg[ch][r*i:r*i+r, c*j:c*j+c].shape, ch, i, j
                     rYmg[ch][r*i:r*i+r, c*j:c*j+c] = np.round_( cv2.idct( blk*Z[:,:,ch] ))
         # UPSAMPLE
         if chnl == 1:
             self.imRaw = rYmg #[:self.Mo, : self.No]
         else:
             self.imRaw[:,:,0] = rYmg[0]
             self.imRaw[:,:,1] = upsample(rYmg[1], self.mode)[:self.M, :self.N]
             self.imRaw[:,:,2] = upsample(rYmg[2], self.mode)[:self.M, :self.N]
     
     self.fl.close()
     
     imrec = cv2.cvtColor((self.imRaw[:self.Mo, :self.No]+128), cv2.COLOR_YCR_CB2BGR)
     imrec[imrec>255]=255
     imrec[imrec<0]=0
     
     print 'Decoder Complete...'
     
     return np.uint8(imrec)
Example #6
0
 def __init__(self, filename):
     '''
     '''
     
     self.fl = open(filename,'r')        
     header = self.fl.readline().split(',')                  #Lê cabeçalho
     self.Mo, self.No, self.Do, self.qually, self.mode = int(header[0]), int(header[1]), int(header[2]), int(header[3]), header[4][:-1]
     self.SHAPE = (self.Mo, self.No, self.Do)
     (self.M, self.N, self.D), self.imRaw = h.adjImg( np.zeros(self.SHAPE) )
     #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
     self.R, self.C = [8,8]
     #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
     self.nBlkRows = int(np.floor(self.M/self.R))
     self.nBlkCols = int(np.floor(self.N/self.C))
     #Gera Tabela de Qunatizaçao
     self.Z = h.genQntb(self.qually)
     
     if self.Do == 2:
         self.NCHNL = 1
     elif self.Do == 3:
         self.NCHNL = 3
Example #7
0
 def __init__(self, huffcode, hufftables, hvstables, args):  #filename):
     '''
     '''
     
     #self.fl = open(filename,'r')        #header = hdr #self.fl.readline().split(',')                  #Lê cabeçalho
     self.SHAPE, self.qually, self.mode, self.motionVec = args[0], args[1], args[2], args[3] #int(header[0]), int(header[1]), int(header[2]), int(header[3]), header[4][:-1]
     self.huffcodes = huffcode        #self.SHAPE = conf[0] #(self.Mo, self.No, self.Do)
     (self.M, self.N, self.D), self.imRaw = h.adjImg( np.zeros(self.SHAPE) )
     #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
     self.R, self.C = [8,8]
     #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
     self.nBlkRows = int(np.floor(self.M/self.R))
     self.nBlkCols = int(np.floor(self.N/self.C))
     #Gera Tabela de Quantizaçao
     self.hvstables = hvstables
     self.hufftables = hufftables
     
     if self.D == 2:
         self.NCHNL = 1
     elif self.D == 3:
         self.NCHNL = 3
Example #8
0
    def __init__(self, huffcode, hufftables, Z, args):  #filename):
        '''
        '''

        #self.fl = open(filename,'r')        #header = hdr #self.fl.readline().split(',')                  #Lê cabeçalho
        self.SHAPE, self.qually, self.mode = args[0], args[1], args[
            2]  #int(header[0]), int(header[1]), int(header[2]), int(header[3]), header[4][:-1]
        self.huffcodes = huffcode  #self.SHAPE = conf[0] #(self.Mo, self.No, self.Do)
        (self.M, self.N, self.D), self.imRaw = h.adjImg(np.zeros(self.SHAPE))
        #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
        self.R, self.C = [8, 8]
        #NUMERO DE BLOCOS NA VERTICAL E HORIZONTAL
        self.nBlkRows = int(np.floor(self.M / self.R))
        self.nBlkCols = int(np.floor(self.N / self.C))
        #Gera Tabela de Qunatizaçao
        self.Z = Z
        self.hufftables = hufftables

        if self.D == 2:
            self.NCHNL = 1
        elif self.D == 3:
            self.NCHNL = 3
Example #9
0
    def _run_(self):
        '''
        '''
        
        print '- Running Encoder...'
        hf = h.HuffCoDec()
        flnm = self.filepath.split('/')[-1:][0].split('.')[0] + '.huff'
        fo = open(flnm,'w')
        fo.write(str(self.Mo) + ',' + str(self.No) + ',' + str(self.Do) + ',' + 
                 str(self.qually) + ',' + self.mode + '\n')
        
        dYmg = self.Ymg - 128
        r, c, chnl = self.r, self.c, self.NCHNL
        coefs = np.zeros((r, c, chnl))
        seqhuff = ''
        #nbits = self.NumBits
        if self.mode == '444':
            for ch in range(chnl):
                DCant = 0
                for i in range(self.nBlkRows):
                    for j in range(self.nBlkCols):
                        sbimg = dYmg[r*i:r*i+r, c*j:c*j+c, ch]     #Subimagens nxn
                #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round( coefs/self.Z[:,:,ch] )      #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                #    CODIFICAÇÃO - Codigos de Huffman
                #  - FOWARD HUFF
                        seq = h.zigzag(zcoefs)                     #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(DCant, seq, ch)          #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        seqhuff += hfcd[1]          
                #Salvar os codigos em arquivo
                fo.write(seqhuff+'\n')
                seqhuff = ''
                
        elif self.mode == '420':
            
            if chnl == 1:
                Ymg = dYmg
            else:
                Y = dYmg[:,:,0]
                dims, CrCb = h.adjImg(downsample(dYmg[:,:,1:3], self.mode)[1])
                Ymg = [ Y, CrCb[:,:,0], CrCb[:,:,1] ]
                self.lYmg = Ymg
            
            for ch in range(chnl):
                DCant = 0
                if ch == 0: #LUMINANCIA
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:       #CROMINANCIA
                    rBLK, cBLK = int(np.floor(dims[0]/self.r)), int(np.floor(dims[1]/self.c))
                
                for i in range(rBLK):
                    for j in range(cBLK):
                        sbimg = Ymg[ch][r*i:r*i+r, c*j:c*j+c]     #Subimagens nxn
                #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round( coefs/self.Z[:,:,ch] )      #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                #    CODIFICAÇÃO - Codigos de Huffman - FOWARD HUFF
                        seq = h.zigzag(zcoefs)                     #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(DCant, seq, ch)          #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        seqhuff += hfcd[1]          
                #Salvar os codigos em arquivo
                fo.write(seqhuff + '\n')
                seqhuff = ''
        
        fo.close()

        self.avgBits = (float(self.NumBits)/float(self.Mo*self.No))
        self.CRate = 24./self.avgBits
        self.Redunc = 1.-(1./self.CRate)
        print '- Encoder Complete...'
Example #10
0
    def _run_(self):
        '''
        '''
        
        hf = h.HuffCoDec(self.hufftables)        #flnm = self.filepath.split('/')[-1:][0].split('.')[0] + '.huff'        #fo = open(flnm,'w')        #fo.write(str(self.Mo) + ',' + str(self.No) + ',' + str(self.Do) + ',' +         #         str(self.qually) + ',' + self.mode + '\n')
        outseq = []
        
#        dYmg = self.Ymg - 128
        dYmg = self.Ymg - 128
        r, c, chnl = self.r, self.c, self.NCHNL
        coefs = np.zeros((r, c, chnl))

        
        if self.mode == '444':
            for ch in range(chnl):
                DCant = 0
                
                seqhuff = ''        #nbits = self.NumBits
                a, b = [0, 0]                
                for i in range(self.nBlkRows):
                    temp_seq=''
                    for j in range(self.nBlkCols):
                        
                        sbimg = dYmg[r*i:r*i+r, c*j:c*j+c, ch]     #Subimagens nxn
                #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = int(a*(self.nBlkCols/2)+b)
                        Z = self.Zhvs[ int(abs(self.MV[vec_index][0])) ][ int(abs(self.MV[vec_index][1])) ] 
                #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round( coefs/Z )      #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                #    CODIFICAÇÃO - Codigos de Huffman
                #  - FOWARD HUFF
                        seq = h.zigzag(zcoefs)                     #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(DCant, seq, ch)          #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        temp_seq += hfcd[1]
                        if j%2 != 0:
                            b += 1
                    if i%2 != 0:																												
                        a += 1
                        b = 0
                    else:
                        b = 0
                    seqhuff += temp_seq
                        
                #Salvar os codigos em arquivo
                #fo.write(seqhuff+'\n')
                outseq.append(seqhuff)
                
        elif self.mode == '420':
            
            if chnl == 1:
                Ymg = dYmg
            else:
                Y = dYmg[:,:,0]
                dims, CrCb = h.adjImg(downsample(dYmg[:,:,1:3], self.mode)[1])
                Ymg = [ Y, CrCb[:,:,0], CrCb[:,:,1] ]
                self.lYmg = Ymg
            for ch in range(chnl):
                DCant = 0
                
                seqhuff = ''        #nbits = self.NumBits
                a , b = [0, 0]
                if ch == 0: #LUMINANCIA
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:       #CROMINANCIA
                    rBLK, cBLK = int(np.floor(dims[0]/self.r)), int(np.floor(dims[1]/self.c))
                
                for i in range(rBLK):
                    for j in range(cBLK):
                        sbimg = Ymg[ch][r*i:r*i+r, c*j:c*j+c]     #Subimagens nxn
                #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = 0
                        if ch == 0: #LUMINANCIA
                            vec_index = int(a*(self.nBlkCols/2)+b)
                        else:       #CROMINANCIA
                            vec_index = int(a*(self.nBlkCols/2)+b)
                        Z = self.Zhvs[ int(abs(self.MV[vec_index][0])) ][ int(abs(self.MV[vec_index][1])) ] 
                #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round( coefs/Z )      #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                #    CODIFICAÇÃO - Codigos de Huffman - FOWARD HUFF
                        seq = h.zigzag(zcoefs)                     #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(DCant, seq, ch)          #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        seqhuff += hfcd[1]
                        if ch == 0:
                            if j%2 != 0:
                                b += 1
                            else:
                                pass
                        else:
                            b += 1
                    if ch == 0:
                        if i%2 != 0:
                            a += 1
                            b = 0
                        else:
                            b = 0
                    else:
                        a += 1
                        b = 0
                outseq.append(seqhuff)
                
        #fo.close()
        self.avgBits = (float(self.NumBits)/float(self.M*self.N))
        self.CRate = 24./self.avgBits
        self.Redunc = 1.-(1./self.CRate)
        #print '- Encoder Complete...'
        #return (self.CRate, self.Redunc, self.NumBits)
        return outseq
Example #11
0
    def _run_(self):
        '''
        '''
        #print '- Running Mjpeg Decoder...'
        hf = h.HuffCoDec(self.hufftables)
        r, c, chnl = self.R, self.C, self.NCHNL


        if self.mode == '444':
            for ch in range(chnl):                #hufcd = self.fl.readline()[:-1]            #    print hufcd[0:20]
                nblk, seqrec = hf.invhuff(self.huffcodes[ch], ch)
                a, b = [0, 0]
                for i in range(self.nBlkRows):
                    for j in range(self.nBlkCols):
                
                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = int(a*(self.nBlkCols/2)+b)
                        # Quantization table
                        Z = 0
                        if len(self.motionVec[vec_index]) == 2:
                            Z = self.hvstables[abs(self.motionVec[vec_index][0])][abs(self.motionVec[vec_index][1])]
                        elif len(self.motionVec[vec_index]) == 3:
                            Z = self.hvstables[abs(self.motionVec[vec_index][1])][abs(self.motionVec[vec_index][2])]
                        else:
                            Z = self.hvstables[int((abs(self.motionVec[vec_index][1])+abs(self.motionVec[vec_index][3]))/2.)][int((abs(self.motionVec[vec_index][2])+abs(self.motionVec[vec_index][4]))/2.)]
      
                        blk = h.zagzig(seqrec[i*self.nBlkCols + j])
                        self.imRaw[r*i:r*i+r, c*j:c*j+c, ch] = np.round_( cv2.idct( blk*Z ))
                        if j%2 != 0:
                            b += 1
                    if i%2 != 0:																												
                        a += 1
                        b = 0
                    else:
                        b = 0
                        
        elif self.mode == '420':
            #import math as m
            if chnl == 1:
                rYmg = self.imRaw
            else:                #Y = self.imRaw[:,:,0]
                Y = np.zeros( (self.M, self.N) )
                dims, CrCb = h.adjImg( downsample(np.zeros( (self.M, self.N, 2) ), self.mode)[1] )
                rYmg = [ Y, CrCb[:,:,0], CrCb[:,:,1] ]
                
            for ch in range(chnl):
                a, b = [0, 0]
                if ch == 0:
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:
                    rBLK, cBLK = int(np.floor(dims[0]/self.R)), int(np.floor(dims[1]/self.C))
            #    print hufcd[0:20]
                nblk, self.seqrec = hf.invhuff(self.huffcodes[ch], ch)
                for i in range(rBLK):
                    for j in range(cBLK):
                        
                
                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = 0
                        if ch == 0: #LUMINANCIA
                            vec_index = int(a*(self.nBlkCols/2)+b)
                        else:       #CROMINANCIA
                            vec_index = int(a*(self.nBlkCols/2)+b)
                        # Quantization table
                        Z = 0
                        if len(self.motionVec[vec_index]) == 2:
                            Z = self.hvstables[abs(self.motionVec[vec_index][0])][abs(self.motionVec[vec_index][1])]
                        elif len(self.motionVec[vec_index]) == 3:
                            Z = self.hvstables[abs(self.motionVec[vec_index][1])][abs(self.motionVec[vec_index][2])]
                        else:
                            Z = self.hvstables[int((abs(self.motionVec[vec_index][1])+abs(self.motionVec[vec_index][3]))/2.)][int((abs(self.motionVec[vec_index][2])+abs(self.motionVec[vec_index][4]))/2.)]
                            
                        blk = h.zagzig(self.seqrec[i*cBLK + j])
                        #print rYmg[ch][r*i:r*i+r, c*j:c*j+c].shape, ch, i, j
                        rYmg[ch][r*i:r*i+r, c*j:c*j+c] = np.round_( cv2.idct( blk*Z ))
                        if ch == 0:
                            if j%2 != 0:
                                b += 1
                            else:
                                pass
                        else:
                            b += 1
                    if ch == 0:
                        if i%2 != 0:
                            a += 1
                            b = 0
                        else:
                            b = 0
                    else:
                        a += 1
                        b = 0
            # UPSAMPLE
            if chnl == 1:
                self.imRaw = rYmg #[:self.Mo, : self.No]
            else:
                self.imRaw[:,:,0] = rYmg[0]
                self.imRaw[:,:,1] = upsample(rYmg[1], self.mode)[:self.M, :self.N]
                self.imRaw[:,:,2] = upsample(rYmg[2], self.mode)[:self.M, :self.N]
        
        #self.fl.close()
        
#        imrec = cv2.cvtColor((self.imRaw[:self.Mo, :self.No]+128), cv2.COLOR_YCR_CB2BGR)
#        imrec = self.imRaw[:self.Mo, :self.No]+128
        imrec = self.imRaw+128.0
#        imrec[imrec>255.0]=255.0
#        imrec[imrec<0.0]=0.0
								
        #print 'Mjpeg Decoder Complete...'
        
        return imrec
Example #12
0
    def _run_(self):
        '''
        '''

        hf = h.HuffCoDec(
            self.hufftables
        )  #flnm = self.filepath.split('/')[-1:][0].split('.')[0] + '.huff'        #fo = open(flnm,'w')        #fo.write(str(self.Mo) + ',' + str(self.No) + ',' + str(self.Do) + ',' +         #         str(self.qually) + ',' + self.mode + '\n')
        outseq = []

        #        dYmg = self.Ymg - 128
        dYmg = self.Ymg - 128
        r, c, chnl = self.r, self.c, self.NCHNL
        coefs = np.zeros((r, c, chnl))

        if self.mode == '444':
            for ch in range(chnl):
                DCant = 0

                seqhuff = ''  #nbits = self.NumBits
                a, b = [0, 0]
                for i in range(self.nBlkRows):
                    temp_seq = ''
                    for j in range(self.nBlkCols):

                        sbimg = dYmg[r * i:r * i + r, c * j:c * j + c,
                                     ch]  #Subimagens nxn
                        #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = int(a * (self.nBlkCols / 2) + b)
                        Z = self.Zhvs[int(abs(self.MV[vec_index][0]))][int(
                            abs(self.MV[vec_index][1]))]
                        #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round(
                            coefs / Z
                        )  #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                        #    CODIFICAÇÃO - Codigos de Huffman
                        #  - FOWARD HUFF
                        seq = h.zigzag(
                            zcoefs)  #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(
                            DCant, seq,
                            ch)  #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        temp_seq += hfcd[1]
                        if j % 2 != 0:
                            b += 1
                    if i % 2 != 0:
                        a += 1
                        b = 0
                    else:
                        b = 0
                    seqhuff += temp_seq

                #Salvar os codigos em arquivo
                #fo.write(seqhuff+'\n')
                outseq.append(seqhuff)

        elif self.mode == '420':

            if chnl == 1:
                Ymg = dYmg
            else:
                Y = dYmg[:, :, 0]
                dims, CrCb = h.adjImg(
                    downsample(dYmg[:, :, 1:3], self.mode)[1])
                Ymg = [Y, CrCb[:, :, 0], CrCb[:, :, 1]]
                self.lYmg = Ymg
            for ch in range(chnl):
                DCant = 0

                seqhuff = ''  #nbits = self.NumBits
                a, b = [0, 0]
                if ch == 0:  #LUMINANCIA
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:  #CROMINANCIA
                    rBLK, cBLK = int(np.floor(dims[0] / self.r)), int(
                        np.floor(dims[1] / self.c))

                for i in range(rBLK):
                    for j in range(cBLK):
                        sbimg = Ymg[ch][r * i:r * i + r,
                                        c * j:c * j + c]  #Subimagens nxn
                        #    TRANSFORMADA - Aplica DCT
                        coefs = cv2.dct(sbimg)
                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = 0
                        if ch == 0:  #LUMINANCIA
                            vec_index = int(a * (self.nBlkCols / 2) + b)
                        else:  #CROMINANCIA
                            vec_index = int(a * (self.nBlkCols / 2) + b)
                        Z = self.Zhvs[int(abs(self.MV[vec_index][0]))][int(
                            abs(self.MV[vec_index][1]))]
                        #    QUANTIZAÇÃO/LIMIARIZAÇÃO
                        zcoefs = np.round(
                            coefs / Z
                        )  #Coeficientes normalizados - ^T(u,v)=arred{T(u,v)/Z(u,v)}
                        #    CODIFICAÇÃO - Codigos de Huffman - FOWARD HUFF
                        seq = h.zigzag(
                            zcoefs)  #Gera Sequencia de coeficientes 1-D
                        hfcd = hf.fwdhuff(
                            DCant, seq,
                            ch)  #Gera o codigo huffman da subimagem
                        DCant = seq[0]
                        self.NumBits += hfcd[0]
                        seqhuff += hfcd[1]
                        if ch == 0:
                            if j % 2 != 0:
                                b += 1
                            else:
                                pass
                        else:
                            b += 1
                    if ch == 0:
                        if i % 2 != 0:
                            a += 1
                            b = 0
                        else:
                            b = 0
                    else:
                        a += 1
                        b = 0
                outseq.append(seqhuff)

        #fo.close()
        self.avgBits = (float(self.NumBits) / float(self.M * self.N))
        self.CRate = 24. / self.avgBits
        self.Redunc = 1. - (1. / self.CRate)
        #print '- Encoder Complete...'
        #return (self.CRate, self.Redunc, self.NumBits)
        return outseq
Example #13
0
    def _run_(self):
        '''
        '''
        #print '- Running Mjpeg Decoder...'
        hf = h.HuffCoDec(self.hufftables)
        r, c, chnl = self.R, self.C, self.NCHNL

        if self.mode == '444':
            for ch in range(
                    chnl
            ):  #hufcd = self.fl.readline()[:-1]            #    print hufcd[0:20]
                nblk, seqrec = hf.invhuff(self.huffcodes[ch], ch)
                a, b = [0, 0]
                for i in range(self.nBlkRows):
                    for j in range(self.nBlkCols):

                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = int(a * (self.nBlkCols / 2) + b)
                        # Quantization table
                        Z = 0
                        if len(self.motionVec[vec_index]) == 2:
                            Z = self.hvstables[abs(
                                self.motionVec[vec_index][0])][abs(
                                    self.motionVec[vec_index][1])]
                        elif len(self.motionVec[vec_index]) == 3:
                            Z = self.hvstables[abs(
                                self.motionVec[vec_index][1])][abs(
                                    self.motionVec[vec_index][2])]
                        else:
                            Z = self.hvstables[int(
                                (abs(self.motionVec[vec_index][1]) +
                                 abs(self.motionVec[vec_index][3])) / 2.)][int(
                                     (abs(self.motionVec[vec_index][2]) +
                                      abs(self.motionVec[vec_index][4])) / 2.)]

                        blk = h.zagzig(seqrec[i * self.nBlkCols + j])
                        self.imRaw[r * i:r * i + r, c * j:c * j + c,
                                   ch] = np.round_(cv2.idct(blk * Z))
                        if j % 2 != 0:
                            b += 1
                    if i % 2 != 0:
                        a += 1
                        b = 0
                    else:
                        b = 0

        elif self.mode == '420':
            #import math as m
            if chnl == 1:
                rYmg = self.imRaw
            else:  #Y = self.imRaw[:,:,0]
                Y = np.zeros((self.M, self.N))
                dims, CrCb = h.adjImg(
                    downsample(np.zeros((self.M, self.N, 2)), self.mode)[1])
                rYmg = [Y, CrCb[:, :, 0], CrCb[:, :, 1]]

            for ch in range(chnl):
                a, b = [0, 0]
                if ch == 0:
                    rBLK = self.nBlkRows
                    cBLK = self.nBlkCols
                else:
                    rBLK, cBLK = int(np.floor(dims[0] / self.R)), int(
                        np.floor(dims[1] / self.C))
            #    print hufcd[0:20]
                nblk, self.seqrec = hf.invhuff(self.huffcodes[ch], ch)
                for i in range(rBLK):
                    for j in range(cBLK):

                        #    SELEÇÃO DA MATRIZ DE QUANTIZAÇÃO
                        vec_index = 0
                        if ch == 0:  #LUMINANCIA
                            vec_index = int(a * (self.nBlkCols / 2) + b)
                        else:  #CROMINANCIA
                            vec_index = int(a * (self.nBlkCols / 2) + b)
                        # Quantization table
                        Z = 0
                        if len(self.motionVec[vec_index]) == 2:
                            Z = self.hvstables[abs(
                                self.motionVec[vec_index][0])][abs(
                                    self.motionVec[vec_index][1])]
                        elif len(self.motionVec[vec_index]) == 3:
                            Z = self.hvstables[abs(
                                self.motionVec[vec_index][1])][abs(
                                    self.motionVec[vec_index][2])]
                        else:
                            Z = self.hvstables[int(
                                (abs(self.motionVec[vec_index][1]) +
                                 abs(self.motionVec[vec_index][3])) / 2.)][int(
                                     (abs(self.motionVec[vec_index][2]) +
                                      abs(self.motionVec[vec_index][4])) / 2.)]

                        blk = h.zagzig(self.seqrec[i * cBLK + j])
                        #print rYmg[ch][r*i:r*i+r, c*j:c*j+c].shape, ch, i, j
                        rYmg[ch][r * i:r * i + r, c * j:c * j + c] = np.round_(
                            cv2.idct(blk * Z))
                        if ch == 0:
                            if j % 2 != 0:
                                b += 1
                            else:
                                pass
                        else:
                            b += 1
                    if ch == 0:
                        if i % 2 != 0:
                            a += 1
                            b = 0
                        else:
                            b = 0
                    else:
                        a += 1
                        b = 0
            # UPSAMPLE
            if chnl == 1:
                self.imRaw = rYmg  #[:self.Mo, : self.No]
            else:
                self.imRaw[:, :, 0] = rYmg[0]
                self.imRaw[:, :, 1] = upsample(rYmg[1],
                                               self.mode)[:self.M, :self.N]
                self.imRaw[:, :, 2] = upsample(rYmg[2],
                                               self.mode)[:self.M, :self.N]

        #self.fl.close()


#        imrec = cv2.cvtColor((self.imRaw[:self.Mo, :self.No]+128), cv2.COLOR_YCR_CB2BGR)
#        imrec = self.imRaw[:self.Mo, :self.No]+128
        imrec = self.imRaw + 128.0
        #        imrec[imrec>255.0]=255.0
        #        imrec[imrec<0.0]=0.0

        #print 'Mjpeg Decoder Complete...'

        return imrec