예제 #1
0
파일: dwt.py 프로젝트: diogopmonteiro/wm
    def embed_specific(self, image, image_file, watermark=None):
        i_width = image.shape[0]
        i_height = image.shape[1]

        wm = watermark
        wm_width = wm.shape[0]
        wm_height = wm.shape[1]

        if not (wm_width == i_width / 2 and wm_height == i_height / 2):
            raise WmError("Watermark size must be half of image size. For now.")

        ir, ig, ib = self.split_image(image)

        img = self.split_image(wm)
        dcts_wm = self.rgb_to_dct(*img)

        dwts_i = self.rgb_to_dwt(ir, ig, ib)

        for color in range(3):
            dct = dcts_wm[color]
            hh = TwoDimensionalDCT.forward(dwts_i[color][1][2])
            for j in range(len(dct)):
                for k in range(len(dct[0])):
                    hh[j][k] += dct[j][k] * self.alpha

            ihh = TwoDimensionalDCT.inverse(hh)
            hh = dwts_i[color][1][2]
            for j in range(len(dct)):
                for k in range(len(dct[0])):
                    hh[j][k] = ihh[j][k]

        rgb = self.dwt_to_rgb(*dwts_i)

        img = self.join_image(*rgb)
        return img
예제 #2
0
파일: cox.py 프로젝트: diogopmonteiro/wm
    def embed_specific(self, image, image_file, watermark=None):
        # Compute DCT
        f_dct = TwoDimensionalDCT.forward(image)

        # Sort DCT
        size_dct = int(f_dct.__len__()*self.watermark_size_percentage)
        sorted_dct_indexes = f_dct.ravel().argsort()[-size_dct:]
        sorted_dct_indexes = (numpy.unravel_index(indx, f_dct.shape) for indx in sorted_dct_indexes)
        sorted_unraveled = [(f_dct[indx], indx) for indx in sorted_dct_indexes]

        nbits = numpy.random.normal(self.mu, self.sigma, size_dct)

        # Construct the Watermark
        for i in range(len(nbits)):
            f_dct[sorted_unraveled[i][1]] += self.alpha * nbits[i]

        self.export_image(sorted_unraveled, image_file, nbits)
        inverse = TwoDimensionalDCT.inverse(f_dct)
        return inverse
예제 #3
0
 def test_idct_close_values(self):
     img = TwoDimensionalDCT.inverse(TwoDimensionalDCT.forward(self.close_values))
     self._test_inverse(img, self.close_values)
예제 #4
0
파일: dwt.py 프로젝트: diogopmonteiro/wm
 def dct_to_rgb(self, cr, cg, cb):
     return TwoDimensionalDCT.inverse(cr), TwoDimensionalDCT.inverse(cg), TwoDimensionalDCT.inverse(cb)
예제 #5
0
 def test_idct_solid_gray(self):
     img = TwoDimensionalDCT.inverse(TwoDimensionalDCT.forward(self.solid_gray))
     self._test_inverse(img, self.solid_gray)