Sistema de watermarking emprant els bits menys significatius

Comento en aquest apunt un sistema de watermarking emprant una tècnica senzilla. Del que es tracta és “d’amagar” una imatge en una altra.

Aquesta és la imatge original:

tiger

 

 

 

 

 

 

 

I aquesta és la imatge que volem “amagar” en l’anterior:

marca

 

 

 

 

 

 

 

La idea del programa és obviar els 3 bits de menys pes de cada píxel de la imatge original i substituir-los pels 3 bits de més pes de la imatge que volem amagar.

Aquest és el codi en Python:

 

import Image
import os

im = Image.open(“tiger.jpg”)
marca = Image.open(“marca.jpg”)

pixels = im.load()
width, height = im.size

marcapixels = marca.load()

msb = Image.new(“L”, (width, height))
msbpixels = msb.load()

for x in range(width):
    for y in range(height):
        cpixel = pixels[x, y]
    mpixel = marcapixels[x, y]
    a = (mpixel & 224) >> 5
    msbpixels[x,y] = (cpixel & 248) + a

msb.save(“tigerwithmark.jpg”, “JPEG”, quality=100)

 

Executant aquest programa obtenim una imatge molt similar a l’original, però que ja conté la marca:

tigerwithmark

 

 

 

 

 

 

 

Ara, emprant aquest altre programa, podríem extreure la marca:

import Image
import os

im = Image.open(“tigerwithmark.jpg”)
pixels = im.load()
width, height = im.size

msb = Image.new(“L”, (width, height))
msbpixels = msb.load()

for x in range(width):
    for y in range(height):
        cpixel = pixels[x, y]
    a = (cpixel & 7) << 5
    msbpixels[x,y] = a

msb.save(“extractmark.jpg”, “JPEG”, quality=100)

extractmark

 

 

 

 

 

 

 

Aquesta darrera imatge ha perdut qualitat, però recordem que solament vàrem agafar els tres bits més significatius de la imatge original!

 

Gerard

Gerard Farràs i Ballabriga.