Exemplo n.º 1
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
Exemplo n.º 2
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...'
Exemplo n.º 3
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