Example #1
0
    def test_images_different_shape(self):
        cover_work = Mock(shape=(2, 2))
        # watermaked work (stego_work)
        ws_work = Mock(shape=(2, 3))

        with self.assertRaises(ValueError):
            metrics.psnr(cover_work, ws_work)
Example #2
0
def pnsr_ber_index(
        hider_factory, cover_work, data,
        index, step, *args, attacks=None, reference_psnr=44, **kwargs):

    def get_extractor(extractor, index):
        def wrapper(ws_work):
            return extractor(ws_work, index=index)

        return wrapper

    index = int(round(index))
    step = int(round(step))

    data = utils.char2bin(data)
    hider = hider_factory.build(step, *args, **kwargs)
    ws_work = hider.insert(cover_work, data, index=index)
    psnr = imperceptibility.psnr(cover_work, ws_work)

    watermark = hider.extract(ws_work, index=index)
    if attacks:
        extract = get_extractor(hider.extract, index)
        ber = ber_mean(extract, ws_work, watermark, attacks)
    else:
        ber = robustness.ber(watermark, data)

    return psnr, ber
Example #3
0
    def test_with_zero_mse(self, mock_mse):
        cover_work = np.array([[2.2, 3.3], [5.5, 6.6]])
        # watermaked work (stego_work)
        ws_work = np.array([[4.4, 7.7], [9.9, 10.0]])

        psnr = metrics.psnr(cover_work, ws_work)

        np.testing.assert_almost_equal(psnr, 54.151403522, 3)
Example #4
0
    def test_with_custom_max_value(self, mock_mse):
        '''
        Testing Peak Signal-to-Noise Ratio (PSNR)
        '''
        cover_work = Mock()
        ws_work = Mock()

        psnr = metrics.psnr(cover_work, ws_work, max=200)
        np.testing.assert_almost_equal(psnr, 26.020599913, 3)
Example #5
0
    def test_with_non_zero_mse(self, mock_mse):
        '''
        Testing Peak Signal-to-Noise Ratio (PSNR)
        '''
        cover_work = Mock()
        ws_work = Mock()

        psnr = metrics.psnr(cover_work, ws_work)
        np.testing.assert_almost_equal(psnr, 28.130, 3)
Example #6
0
def psnr(swarm, cover_work, data, get_ws_work):
    '''
    psnr(swarm, block, msg) => np.array: return swarm fitness

    fitness is related to PSNR metric between cover work an watermarked
    (stego) work wich is obtained with (get_ws_work) callback.
    This function recive a swarm particle, cover work and data
    '''
    fitness = np.empty(swarm.shape[0])
    for i, particle in enumerate(swarm):
        ws_work = (particle, cover_work, data)
        try:
            psnr = imperceptibility.psnr(cover_work, ws_work)
        except:
            psnr = 0
        finally:
            fitness[i] = -psnr
    return fitness