Exemplo n.º 1
0
    def embed(self, image_file, watermark=None):
        if not os.path.exists(self.WATERMARKED_IMAGES_DIRECTORY):
            os.mkdir(self.WATERMARKED_IMAGES_DIRECTORY)

        array = self.open_image(image_file)

        if watermark != None:
            watermark = self.open_image(watermark)

        changed_image = self.embed_specific(array, image_file, watermark)

        # color values range from 0 and 255 and must be integer

        changed_image = changed_image.clip(0, 255)
        changed_image = changed_image.astype('uint8')

        img = Image.fromarray(changed_image)

        img.save(self.get_image_output_file(image_file))

        psnr = Metrics.psnr(numpy.array(Image.fromarray(changed_image).convert('RGB'), dtype=numpy.float),
                            numpy.array(Image.open(image_file).convert('RGB'), dtype=numpy.float))
        # such a damn workaround

        print "PSNR %s" % str(psnr)

        return changed_image, psnr
Exemplo n.º 2
0
 def benchmark_extract_step(self, path, image, attack_name, attacked, attacked_path, watermark_file):
     wmark, gamma = self.extract_specific(numpy.array(Image.open(image)),
                                                       attacked_path)
     wmark = wmark.clip(0,255)
     wmark = wmark.astype('uint8')
     gamma = Metrics.gamma(wmark.ravel(), numpy.array(Image.open(watermark_file)).ravel())
     wmark = Image.fromarray(wmark)
     wmark.save(os.path.join(path, attack_name + "-extracted-wm-" + os.path.split(image)[1]))
     return wmark, gamma
Exemplo n.º 3
0
    def extract_specific(self, image, watermark):
        f_dct = TwoDimensionalDCT.forward(image)
        w = self.load_watermark(watermark)

        xi = []
        xo = []

        for entry in w:
            xo.append( entry[self.INSERTED_WATERMARK_VALUE_KEY] )
            xi.append( (f_dct[tuple(entry[self.INDEX_KEY])] - entry[self.ORIGINAL_VALUE_KEY]) /\
                       (self.alpha))

        return None, Metrics.gamma(xi, xo)