Пример #1
0
 def insert(self, cover_image):
     # Image to array
     cover_array = np.asarray(cover_image)
     # Blue component
     blue_cover_array = cover_array[:, :, 2]
     blue_cover_array.setflags(write=1)
     # Dividing in 32x32 blocks
     blocks32x32 = BlocksImage(blue_cover_array, 32, 32)
     # Touring each block 32x32
     for num_block in range(blocks32x32.max_num_blocks()):
         # Copying block 32x32
         blocksCopy32x32 = deepcopy(blocks32x32.get_block(num_block))
         # Dividing in 16x16 blocks
         blocksCopy16x16 = BlocksImage(blocksCopy32x32, 16, 16)
         # Get first block
         first_block = blocksCopy16x16.get_block(0)
         # Pariar
         for i in range(16):
             for y in range(16):
                 if (first_block[i, y] % 2) == 1:
                     first_block[i, y] -= 1
         # Hash of blocksCopy32x32 pareado
         blocksHash = utils.sha256Binary(blocksCopy32x32.tolist())
         # Insert data
         for i in range(16):
             for y in range(16):
                 first_block[i, y] += int(blocksHash[16 * i + y])
         # Update block
         blocks32x32.set_block(blocksCopy32x32, num_block)
     watermarked_image = Image.fromarray(cover_array)
     return watermarked_image
    def insert(self, cover_image):
        
        print("...Proceso de insercion...")

        # Instancias necesarias
        itools = ImageTools()

        print("Convirtiendo a YCbCr")
        # Convirtiendo a modelo de color YCbCr
        cover_ycbcr_array = itools.rgb2ycbcr(cover_image)

        # Obteniendo componente Y
        cover_array = cover_ycbcr_array[:, :, 0]

        # Objeto de la clase Bloque
        bt_of_cover = BlocksImage(cover_array)

        # Generando bloques a marcar
        print("Generando bloques a marcar")
        self.generar(bt_of_cover.max_num_blocks())

        print("Marcando")
        # Marcar los self.len_watermark_list bloques
        for i in range(self.len_watermark_list):
            block = bt_of_cover.get_block(self.pos[i])

            # Calculando DCT
            dct_block = DCT().dct2(block)

            c = self.c
            delta = self.delta

            # negative = False
            (px, py) = self.get_indice(c)
            # if dct_block[px, py] < 0:
            #     negative = True

            if self.watermark_list[i % self.len_watermark_list] == 0:
                # Bit a insertar 0
                dct_block[px, py] = 2*delta*round(abs(dct_block[px, py])/(2.0*delta)) - delta/2.0
            else:
                # Bit a insertar 1
                dct_block[px, py] = 2*delta*round(abs(dct_block[px, py])/(2.0*delta)) + delta/2.0

            # if negative:
            #     dct_block[px, py] *= -1

            idct_block = DCT().idct2(dct_block)
            
            bt_of_cover.set_block(idct_block, self.pos[i])

        print("Convirtiendo a RGB")
        image_rgb_array = itools.ycbcr2rgb(cover_ycbcr_array)

        return Image.fromarray(image_rgb_array)
Пример #3
0
    def extract(self, watermarked_image):
        # Instancias necesarias
        itools = ImageTools()

        # Convirtiendo a modelo de color YCbCr
        watermarked_ycbcr_array = itools.rgb2ycbcr(watermarked_image)

        # Tomando componente Y
        watermarked_array = watermarked_ycbcr_array[:, :, 0]

        # Wavelet Transform
        LL, [LH, HL, HH] = pywt.dwt2(watermarked_array, 'haar')

        colums = len(LL[0])

        extract = []

        # Extracting
        # Dividiendo LL en bloques de 8x8
        bt_of_LL = BlocksImage(LL)

        for i in range(bt_of_LL.max_num_blocks()):
            # Cuantificado
            QLL = utils.quantification(bt_of_LL.get_block(i), self.Q)
            # replaced directly by the resulting Q-LL
            bt_of_LL.set_block(QLL, i)

        for i in range(self.len_watermark_list):
            # Extrayendo
            px = self.pos[i] // colums
            py = self.pos[i] - (px * colums)
            extract.append(abs(round((HH[px, py] - LL[px, py]) / self.k)))

        # for i in range(self.len_watermark_list + 1):
        #     # Marcado
        #     if i > 0:
        #         px = i // colums
        #         py = i - (px * colums)
        #         extract.append(abs(round((HH[px, py] - LL[px, py])/self.k)))

        wh = int(math.sqrt(self.len_watermark_list))
        extract_image1 = Image.new("L", (wh, wh), 255)
        array_extract_image = misc.fromimage(extract_image1)

        for i in range(wh):
            for y in range(wh):
                if extract[wh * i + y] == 0:
                    array_extract_image[i, y] = 0

        watermark_extracted = misc.toimage(array_extract_image)

        return watermark_extracted
 def insertInComponent(self, component_cover_array):
     # Dividing in 32x32 blocks
     blocks32x32 = BlocksImage(component_cover_array, 32, 32)
     # Touring each block 32x32
     for num_block in range(blocks32x32.max_num_blocks()):
         # Copying block 32x32
         blocksCopy32x32 = deepcopy(blocks32x32.get_block(num_block))
         # Dividing in 16x16 blocks
         blocksCopy16x16 = BlocksImage(blocksCopy32x32, 16, 16)
         # Get first block
         first_block = blocksCopy16x16.get_block(0)
         # Pariar
         for i in range(16):
             for y in range(16):
                 if (first_block[i, y] % 2) == 1:
                     first_block[i, y] -= 1
         # Hash of blocksCopy32x32 pareado
         blocksHash = utils.sha256Binary(blocksCopy32x32.tolist())
         # Insert data
         for i in range(16):
             for y in range(16):
                 first_block[i, y] += int(blocksHash[16*i + y])
         # Update block
         blocks32x32.set_block(blocksCopy32x32, num_block)
    def insert(self, cover_image):
        
        print("...Proceso de insercion...")

        # Instancias necesarias
        itools = ImageTools()

        print("Convirtiendo a YCbCr")
        # Convirtiendo a modelo de color YCbCr
        cover_ycbcr_array = itools.rgb2ycbcr(cover_image)

        # Obteniendo componente Y
        cover_array = cover_ycbcr_array[:, :, 0]

        # Objeto de la clase Bloque
        bt_of_cover = BlocksImage(cover_array)

        # Generando bloques a marcar
        print("Generando bloques a marcar")
        self.generar(bt_of_cover.max_num_blocks())

        print("Marcando")
        # Marcar los self.len_watermark_list bloques
        for i in range(self.len_watermark_list):
            block = bt_of_cover.get_block(self.pos[i])

            # Valores de coeficiente y delta optimo para el bloque
            (c, delta) = self.clasificar(self.pos[i], cover_image) 

            # Calculando Krawchout Transform
            dqkt_block = DqKT().dqkt2(block)

            negative = False
            (px, py) = self.get_indice(c)
            if dqkt_block[px, py] < 0:
                negative = True

            if self.watermark_list[i % self.len_watermark_list] == 0:
                # Bit a insertar 0
                dqkt_block[px, py] = 2*delta*round(abs(dqkt_block[px, py])/(2.0*delta)) + delta/2.0
            else:
                # Bit a insertar 1
                dqkt_block[px, py] = 2*delta*round(abs(dqkt_block[px, py])/(2.0*delta)) - delta/2.0

            if negative:
                dqkt_block[px, py] *= -1
            idqkt_block = DqKT().idqkt2(dqkt_block)
            inv = idqkt_block
            for x in range(8):
                for y in range(8):
                    if (inv[x, y] - int(inv[x, y])) < 0.5:
                        inv[x, y] = int(inv[x, y])
                    else:
                        inv[x, y] = int(inv[x, y]) + 1
                    if inv[x, y] > 255:
                        inv[x, y] = 255
                    if inv[x, y] < 0:
                        inv[x, y] = 0
            bt_of_cover.set_block(idqkt_block, self.pos[i])

        print("Convirtiendo a RGB")
        image_rgb_array = itools.ycbcr2rgb(cover_ycbcr_array)

        return Image.fromarray(image_rgb_array)
Пример #6
0
    def insert(self, cover_image):
        # Instancia
        itools = ImageTools()

        print("Convirtiendo a YCbCr")
        # Convirtiendo a modelo de color YCbCr
        cover_ycbcr_array = itools.rgb2ycbcr(cover_image)

        # Obteniendo componente Y
        cover_array = cover_ycbcr_array[:, :, 0]

        print("DWT")
        # DWT
        LL, [LH, HL, HH] = pywt.dwt2(cover_array, 'haar')

        # Generando posiciones a utilizar
        self.generar(LL.size)

        # Dividiendo LL en bloques de 8x8
        bt_of_LL = BlocksImage(LL)
        bt_of_HH = BlocksImage(HH)

        print("Re-asignando subbanda HH")
        for i in range(bt_of_LL.max_num_blocks()):
            # Cuantificado
            QLL = utils.quantification(bt_of_LL.get_block(i), self.Q)
            # replaced directly by the resulting Q-LL
            bt_of_HH.set_block(QLL, i)

        QWLL = np.copy(HH)
        # QWLL = np.full_like(HH)

        print("Modificando LL")
        for i in range(self.len_watermark_list):
            colums = len(LL[0])
            # Marcado
            px = self.pos[i] // colums
            py = self.pos[i] - (px * colums)
            QWLL[px, py] = HH[px, py] + self.watermark_list[i] / 255 * self.k

        # print("Modificando LL")
        # for i in range(self.len_watermark_list + 1):
        #     colums = len(LL[0])
        #     # Marcado
        #     if i > 0:
        #         px = i // colums
        #         py = i - (px * colums)
        #         LL[px, py] += self.watermark_list[i-1]/255 * self.k

        bt_of_QWLL = BlocksImage(QWLL)
        for i in range(bt_of_LL.max_num_blocks()):
            # Descuantificando
            UQWLL = utils.unquantification(bt_of_QWLL.get_block(i), self.Q)
            # replaced directly by the resulting Q-LL
            bt_of_LL.set_block(UQWLL, i)

        # Inverse transform
        print("IDWT")
        cover_ycbcr_array[:, :, 0] = pywt.idwt2((LL, (LH, HL, HH)), 'haar')

        print("Convirtiendo a RGB")
        image_rgb_array = itools.ycbcr2rgb(cover_ycbcr_array)

        return Image.fromarray(image_rgb_array)