コード例 #1
0
    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)
コード例 #2
0
    def insert(self, cover_image):
        # Instancias necesarias
        itools = ImageTools()

        # Embedding of Copyright Information (robust watermarking)
        # Convirtiendo a modelo de color YCbCr
        cover_ycbcr_array = itools.rgb2ycbcr(cover_image)

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

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

        # Watermark resize
        self.watermark_proccesing(LL.shape)

        colums = len(LL[0])

        print("Creando posisciones random")
        val = [x for x in range(self.cant_posibilidades)]
        random.shuffle(val)
        self.v = val[:self.len_watermark_list]

        print("Insertando")
        # Embedding
        for i in range(self.len_watermark_list):
            px = self.v[i] // colums
            py = self.v[i] - (px * colums)
            if self.watermark_list[i] == 255:
                if HL[px, py] <= LH[px, py]:
                    T = abs(LH[px, py]) - abs(HL[px, py])
                    A3w = T + HL[px][py]
                    HL[px, py] = A3w + (LH[px, py] + HL[px, py]) / 2.0
            else:
                if LH[px, py] <= HL[px, py]:
                    T = abs(HL[px, py]) - abs(LH[px, py])
                    A2w = T + LH[px, py]
                    LH[px, py] = A2w + (LH[px, py] + HL[px, py]) / 2.0

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

        image_rgb_array = itools.ycbcr2rgb(cover_ycbcr_array)

        # Generating the watermarked image
        watermarked_image = Image.fromarray(image_rgb_array)

        return watermarked_image
コード例 #3
0
    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)
コード例 #4
0
ファイル: my_insert.py プロジェクト: EroPerez/dhmdi
def insert(cover_image, watermark_image):
    from image_tools.ImageTools import ImageTools
    dqkt = DqKT()
    myqr = MyQR62()
    dat = DAT()
    itools = ImageTools()

    delta = 128

    c = [1, 19]

    if (c[1] - c[0]) != 0:
        # Convirtiendo a modelo de color YCbCr
        cover_ycbcr_array = itools.rgb2ycbcr(cover_image)

        cover_array = cover_ycbcr_array[:, :, 0]
        # Cargando watermark
        watermark = watermark_image.convert("1")

        # Utilizando Arnold Transforms
        for i in range(20):
            watermark = dat.dat2(watermark)

        # obteniendo array de la watermark
        watermark_array = misc.fromimage(watermark)  # Array of watermark

        # Instance a la clase Bloque
        bt_of_cover = BlockTools(cover_array)

        # Calculando e imprimeindo datos iniciales
        len_of_watermark = watermark_array.size

        # Datos de la watermark como lista
        list_bit_of_watermark = watermark_array.reshape(
            (1, len_of_watermark))[0]

        # Utilizar Bloques segun key
        dic = {'semilla': 0.00325687, 'p': 0.22415897}
        valores = []
        cantidad = bt_of_cover.max_blocks()
        for i in range(cantidad):
            valores.append(i)
        v = mypwlcm_limit(dic, valores, len_of_watermark)

        # Marcar los self.len_of_watermark bloques
        for i in range(len_of_watermark):

            dqkt_block = dqkt.dqkt2(
                np.array(bt_of_cover.get_block(v[i] + 1), dtype=np.float32))

            negative = False
            if dqkt_block[get_indice(c[1])[0], get_indice(c[1])[1]] < 0:
                negative = True

            if list_bit_of_watermark[i % len_of_watermark] == 0:
                # Bit a insertar 0
                dqkt_block[get_indice(c[1])[0],
                           get_indice(c[1])[1]] = 2 * delta * round(
                               abs(dqkt_block[get_indice(c[1])[0],
                                              get_indice(c[1])[1]]) /
                               (2.0 * delta)) - delta / 2.0
            else:
                # Bit a insertar 1
                dqkt_block[get_indice(c[1])[0],
                           get_indice(c[1])[1]] = 2 * delta * round(
                               abs(dqkt_block[get_indice(c[1])[0],
                                              get_indice(c[1])[1]]) /
                               (2.0 * delta)) + delta / 2.0

            if negative:
                dqkt_block[get_indice(c[1])[0], get_indice(c[1])[1]] *= -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, v[i] + 1)

        cover_marked_ycbcr_array = cover_ycbcr_array

        image_rgb_array = itools.ycbcr2rgb(cover_marked_ycbcr_array)

    return misc.toimage(image_rgb_array)
コード例 #5
0
ファイル: Liu2018R.py プロジェクト: eadomenech/watermarking
    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)