예제 #1
0
파일: hmm_factory.py 프로젝트: Enomiss/MSc
    def _initialize_border(self, piximage):
        
        img_matrix = piximage.image_ycrcb
    
        coeff_n = VARIABLE['coefficients_number']
    
        blockH = VARIABLE['block_height']
        blockW = VARIABLE['block_width']

        imgH, imgW = np.array(np.shape(img_matrix)[:2])
        
        overlapH = VARIABLE['overlap_vertical']
        overlapW = VARIABLE['overlap_horizontal']

        numBlockH = int( (imgH-blockH)/(blockH-overlapH) ) + 1
        numBlockW = int( (imgW-blockW)/(blockW-overlapW) ) + 1
    
        img_r_matrix = np.array(img_matrix[:,:,0], np.float32)
        img_g_matrix = np.array(img_matrix[:,:,1], np.float32)
        img_b_matrix = np.array(img_matrix[:,:,2], np.float32)
    
        data_bgr = [ ]
        for row in range(numBlockH):
            bgr = []
            for col in range(numBlockW):
                row_start, col_start = [ row*(blockW-overlapW), col*(blockH-overlapH)]
                row_end, col_end = [ row_start+blockW, col_start+blockH ] 
             
             
                bgr.append( zigzag( cv2.dct(img_b_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                bgr.append( zigzag( cv2.dct(img_g_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                bgr.append( zigzag( cv2.dct(img_r_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                
            data_bgr.append(bgr)
            
        data_bgr = np.reshape( np.array(data_bgr), (numBlockH, numBlockW, 3, coeff_n) )
       
        self.data_bgr = data_bgr
        
        ss_positions, s_positions = piximage.border_positions
        
        self.N_border = { }
        for key, ss_item in ss_positions.items():
            s_item = s_positions[key]
            
            blockHpos =  [ numpy.ceil( (ss_item[0]-blockH)/(blockH-overlapH) ) + 1, int( (ss_item[1]-blockH)/(blockH-overlapH) ) + 1 ]
            blockWpos = [ numpy.ceil( (s_item[0]-blockW)/(blockW-overlapW) ) + 1, int( (s_item[1]-blockW)/(blockW-overlapW) ) + 1 ]
            self.N_border[key] = [blockHpos, blockWpos]
        
        self.N_border = OrderedDict(sorted(self.N_border.items(), key=lambda t: t[1][0][0]))
        self.data_bgr_splitted = split_border( data_bgr, self.N_border )
예제 #2
0
파일: hmm_factory.py 프로젝트: Enomiss/MSc
    def _initialize(self, img_matrix):
     
        coeff_n = VARIABLE['coefficients_number']
    
        blockH = VARIABLE['block_height']
        blockW = VARIABLE['block_width']

        imgH, imgW = np.array(np.shape(img_matrix)[:2])
        
        overlapH = VARIABLE['overlap_vertical']
        overlapW = VARIABLE['overlap_horizontal']

        numBlockH = int( (imgH-blockH)/(blockH-overlapH) ) + 1
        numBlockW = int( (imgW-blockW)/(blockW-overlapW) ) + 1
    
        
        img_r_matrix = np.array(img_matrix[:,:,0], np.float32)
        img_g_matrix = np.array(img_matrix[:,:,1], np.float32)
        img_b_matrix = np.array(img_matrix[:,:,2], np.float32)
    
        data_bgr = [ ]
        for row in range(numBlockH):
            bgr = []
            for col in range(numBlockW):
                row_start, col_start = [ row*(blockW-overlapW), col*(blockH-overlapH)]
                row_end, col_end = [ row_start+blockW, col_start+blockH ] 
             
             
                bgr.append( zigzag( cv2.dct(img_b_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                bgr.append( zigzag( cv2.dct(img_g_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                bgr.append( zigzag( cv2.dct(img_r_matrix[row_start:row_end, col_start:col_end]), coeff_n ) )
                
            data_bgr.append(bgr)
            
        data_bgr = np.reshape( np.array(data_bgr), (numBlockH, numBlockW, 3, coeff_n) )
       
        self.data_bgr = data_bgr
        self.data_bgr_splitted = split( data_bgr, self.N )