FER, ZEMRIS
Autor: Matija Podravec e-mail: matija.podravec@fer.hr (MBR: 36369740) Dodatno: Instalacijska verzija programa (2,64 MB)| Izvorni kod programa (885 KB) (zahtjeva VB runtime) SADRŽAJ: I) UVOD II) SUSTAV VODENIH ŽIGOVA III) METODE UBACIVANJA VODENIH ŽIGOVA U SLIKU IV) PROGRAMSKA IMPLEMENTACIJA SUSTAVA VODENOG ŽIGA V) LITERATURA I UVOD: Digitalna prezentacija zaštićenih dokumenata poput filmova, pjesama ili fotografija ima mnogo prednosti. No, mogućnost trivijalnog stvaranja neograničenog broja savršenih kopija stvara probleme vlasnicima prava na te dokumenate. U posljednje vrijeme sa širenjem popularnosti Interneta ovaj problem postaje sve izražajniji. Jedini alat za zaštitu vlasničkih prava donedavno je bilo kriptiranje podataka. Kriptiranjem podataka mogu se zaštiti podaci samo za vrijeme transporta do primatelja, a nakon što primatelj dekriptira dokument, podaci postaju ponovno nezaštićeni. Kao rješenje je stvoren koncept vodenih žigova. Vodeni žigovi su dijelovi informacije umetnuti u originalni dokument, tako da promjene na originalnom dokumentu budu teško uočljive čovjeku, ali da se mogu lako detektirati računalom. Vodene žigove možemo iskoristiti u sljedećim primjenama:
Tehnologija vodenih žigova je relativno mlada. Prva
konferencija s tematikom vodenih žigova održana je 1996., a od tada
se broj znanstvenih članaka na temu vodenih žigova svake godine otprilike
udvostručava. Do trenutka potpune upotrebe vodenih žigova sigurno će
se pojaviti još neke primjene osim prije navedenih. Korištenje vodenih žigova se može promatrati kao proces
kombiniranja dviju informacija tako da se svaka informacija može detektirati
nezavisnim procesima. Prva informacija je digitalna prezentacija fotografije,
glazbe ili filma i ona je vidljiva ljudskom promatraču. Drugi dio informacije
je vodeni žig i on je vidljiv samo posebno oblikovanom detektoru. Model sustava vodenih žigova možemo promatrati kroz četiri procesa: ubacivanje žiga, distribucija označenog dokumenta, ekstrakcija žiga iz označenog dokumenta, odluka o valjanosti žiga. Ubacivanje žiga je postupak umetanja određene informacija (žiga) u originalni dokument. Tajna informacija može biti neka manja slika, tekstualna poruka ili pak niz pseudo-slučajnih brojeva. Tajna poruka se može zaštiti ključem tako da samo poznavatelji ključa mogu do nje pristupiti. Nakon označavanja dokumenta slijedi njegova distribucija - najčešće preko Interneta. Tijekom distribucije označeni dokument proživljava niz promjena. U slučaju slike promjene mogu biti kompresija slike, promjena veličine slike, promjena kontrasta ili osvjetljenja. Svaka od ovih manipulacija s dokumentom može se promatrati kao napad na vodeni žig. Geometrijske manipulacije slikom poput promjene veličine, rotacija ili odsijecanje dijelova slike pokazale su se iznimno opasnim napadima na umetnute žigove. U procesu ekstrakcije žiga potrebno je moći izdvojiti vodeni žig iz dokumenta koji je dožio niz transformacija. Ako je prilikom ekstrakcije žiga poznat originalni dokument ili ako je poznat ključ, tada je postupak ekstrakcije jednostavan. Postoje i sustavi vodenih žigova u kojima za ekstrakciju žiga nije potreban originalan dokument. U takvim se sustavima podaci o umetnutom žigu dobivaju na temlju podataka i svojstava samog dokumenta. Nakon ekstrakcije podataka o žigu iz označene slike potrebno je izvršiti analizu tih podataka i potvrditi da li je žig pronađen u dokumentu ili ne. Dobivene podatke iz označene slike potrebno je prema nekoj mjeri sličnosti usporediti s originalnim žigom. Ako mjera pokaže da odstupanje između ekstrakcijom dobivenog žiga i originalnog žiga manja od zadanog praga tada se tvrdi da je dokument zaštićen vodenim žigom. Često korištena mjera sličnosti (udaljenosti) između originalnog žiga (W - vektor vrijednosti originalnog žiga) i izdvojenog žiga (W* - vektor vrijednosti izdvojenog žiga) je:
Ubacivanje vodenih žigova u sliku može se obaviti u prostornoj i u transformacijskoj domeni. Pokazalo se da su sustavi koji koriste transformacijske domene otporniji na napade u odnosu na sustave u prostornoj domeni. Metode za ubacivanje žiga u prostornoj domeni Jedna od prvih metoda ubacivanja vodenog žiga u sliku je bilo iskorištavanje najmanje značajnog bita pixela. Ljudsko oko nije u stanju prepoznati razlike u slici nastale promjenom najmanje značajnog bita, pa se taj bit može iskoristiti za pohranu dodatne informacije. No, ubačeni žig ovom metodom se jednostavno uništi. Dovoljno je sliku zarotirati za 1 stupanj, promijeniti kontrast ili učiniti neku drugu transformaciju i žig će biti nemoguće ponovno izdvojiti iz slike. Bolji algoritam u prostornoj domeni koristi binarnu masku
i pixelima slike određenim binarnom maskom povećava intenzitet za neku
vrijednost (pretpostavlja se da se radi o crno-bijeloj slici). Vodeni
žig u ovom algoritmu je binarni uzorak iste velicine kao i slika u kojem
je broj nula jednak broju jedinica. Ubacivanje žiga se vrši povećanjem
intenziteta pixela slike označenog s jedinicom u binarnoj maski za faktor
k. Faktor k se odredi na temelju statističkih svojstava slike. Ekstrakcija
žiga se vrši usporedbom srednje vrijednosti intenziteta označenih i
neoznačenih pixela i pri tome nije potrebna originalna slika. Povećanje
robustnosti algoritma se postiže korištenjem varijabilnog faktora k
i korištenjem žiga po blokovima velicine 2x2 ili 3x3. U algoritmu koji predlažu Voyatzis et al. vodeni žig može biti i slika (logo) velicine S1 x S2. Prostornom transformacijom nazvanom toralni automorfizam logo se iterativno transformira u u vodeni žig velicine M1 x M2, koji predstavlja kaotični razmještaj binarnih pixela logo slike. Vodeni žig se ubacuje u sliku kombiniranjem pixela iz vodenog žiga i dijela originalne slike velicine S1 x S2. Detekcija vodenog žiga se vrši izdvajanjem dijela iz označene slike, odakle se procjenjuje kaotični vodeni žig. Izvršavanjem toralnog automorfizma na procjenjenom kaotičnom vodenom žigu se dobije binarni logo. Kutter et al. predlažu metodu za kolor slike koja je otporna na JPEG kompresiju, ali i na geometrijske transformacije zahvaljujući sinkronizacijskim referencama. Vodeni žig se dodaje u plavu komponentu pixela prema formuli: gdje je Bij vrijednost plave komponente pixela, Lij vrijednost luminancije za taj pixel, Bij* je nova vrijednost plave komponente pixela, s je bit vodenog žiga, a q je konstanta za jakost žiga. Za transformaciju je izabrana komponenta plave boje jer je u ljudskom oku manja gustoća osjetila za plavu boju, odnosno promjene u "plavom" dijelu spektra su slabije vidljive nego za druge boje. U detekciji žiga potrebna je procjena originalnih vrijednosti pixela. Procjena se vrši na temelju linearne kombinacije izmedu susjednih pixela i modificiranog pixela. Razlika izmedu procjenjene vrijednosti i vrijednosti modificiranog pixela se usporeduje s konstantnom vrijednošću (pragom) i na temelju toga se utvrduje da li je u taj pixel umetnuta vrijednost žiga "1" ili "0". Općenito su metode za umetanje žiga u prostornoj domeni slabe prema linearnim (afinim) transformacijama: rotacije, translacije i skaliranje. Metode za ubacivanje žigova u transformiranu domene Robustniji sustavi vodenih žigova koriste transformirane
domene. Postupak ubacivanja žiga započinje transformacijom originalne
slike iz prostorne domene u odgovarajuću transformiranu domenu. Na transformiranu
domenu se zahtijeva da što je moguće bolje aproksimira svojstva ljudskog
vizualnog sustava, jer se tada može u sliku umetnuti više informacije
uz manje vidljivih promjena. Za transformaciju se najćešće upotrebljavaju:
diskretna Fourierova transformacija (DFT), diskretna kosinusna transformacija
(DCT) ili transformacija u domenu valića (engl. wavelet). Osim navedenih
transformacija koriste se (ali rjeđe) i preklapajuća ortogonalna transformacija
(engl. lapped orthogonal transform), Fresnel transformacija, fraktalna
transformacija, kompleksna transformacija valića ili Fourier-Mellin
transformacija. Algoritmi za umetanje žigova u DCT domeni Diskretna kosinusna Fourierova transformacija je osnova JPEG algoritma sažimanja slike. Ubacivanjem vodenog žiga korištenjem DCT domene postiže se otpornost označene slike na JPEG kompresiju. Crno-bijela slika visine N1 i širine N2 može se promatrati kao matrica A velicine N1 x N2, čiji elementi A(i, j) sadrže intenzitet sive boje (0-255) za pixel (i, j). Diskretna kosinusna transformacija se vrši prema formuli: Rezultat je matrica B veličine N1 x N2, čiji su elementima B(k1, k2) DCT koeficijenti u redu k1 i stupcu k2. DCT koeficijenti su realni i mogu poprimiti vrijednosti od -1024 do 1023. DCT koeficijenti najveće vrijednosti poprimaju u gornjem lijevom uglu matrice B, odnosno DCT koeficijenti niskih frekvencija nose najviše informacije o slici. Bors et al. su predložili algoritam u kojem se najprije iz originalne slike odaberu blokovi velicine 8x8 pomoću Gaussovog mrežnog klasifikatora. Nakon toga se izvrši DCT nad tim blokovima i DCT koeficijenti u srednjem pojasu frekvencija je izmjene korištenjem vrijednosti žiga. Vodeni žig se sastoji od dva dijela: parametri za odabir blokova i parametri za modifikaciju DCT koeficijenata. Prilikom ekstrakcije vodenog žiga originalna slika nije potrebna. Swanson et al. u svom modelu koriste prostorno i frekvencijsko maskiranje. Originalna slika se dijeli na blokove na koje se zatim primjeni DCT. Za svaki blok se izračuna frekvencijska maska koja aproksimira frekvencijsko maskiranje ljudskog vizualnog sustava. Frekvencijska maska u kombinaciji s pseudo-šumom se primjenjuje za modifikaciju odgovarajucih DCT blokova. Cox et al. su uvidjeli potrebu za unošenjem vodenog žiga u frekvencijski značajno područje slike, odnosno u područje niskih frekvencija. Umetanjem žiga u područje niskih frekvencija postiže se veća otpornost žiga na napade, odnosno ako napadač napadne koeficijente niskih frekvencija prije će uništiti cijelu sliku nego sam vodeni žig u njoj. Kako bi se smanjila vidljivost promjena na slici, algoritam mijenja frekvencijske koeficijent za male vrijednosti, s tim da se žig umeće u široki raspon frekvencija. Vodeni žig u ovom algoritmu je niz s normalnom razdiobom
od 1000 pseudo-slučajnih realnih brojeva sa varijancom 1 i srednjom
vrijednošću 0. Pseudokod za generiranje ovakvog niza pseudo-slučajnih
brojeva glasi: double x1, x2, w; do{ x1 = 2.0 * randf() - 1.0; x2 = 2.0 * randf() - 1.0; w = x1*x1 + x2*x2; } while (w >= 1.0); w = sqrt ((-2 * log(w)) / w); double y1 = mean + x1 * w * deviation; double y2 = mean + x2 * w * deviation; Funkcija randf()je generator pseudo-slučajnih brojeva u intervalu [0,1). Izračunate vrijednosti y1 i y2 su dva elementa ovog niza pseudo-slučajnih brojeva. U procesu umetanja žiga originalna slika se cijela transformira u DCT područje. Ovaj postupak je procesorski vrlo zahtjevan i na većim slikama može potrajati duže vrijeme. Nakon transformacije vrši se odabir 1000 najvećih koeficijenata, s tim da se u obzir ne uzimaju istosmjerne komponente, odnosno koeficijenti oblika (0,j) i (i,0). Na tih 1000 koeficijenata umeće se vodeni žig prema formuli: gdje je wi i-ti element vodenog žiga, alfa je parametar, f(m,n) je originalna vrijednost DCT koeficijenta, a f'(m,n) je nova vrijednost DCT koeficijenta. Nakon ostvarenih promjena na DCT koeficijentima vrši se inverzna DCT transformacija i dobije se označena slika. Za izdvajanje žiga iz označene slike potrebna je originalna slika kao referenca. Transformacijom originalne i označene slike u DCT domenu može se uz poznati parametar alfa izdvojiti vodeni žig prema formuli: Pod f* se podrazumijeva slika u kojoj se vodeni žig pokušava detektirati. Rezultat je niz 1000 realnih brojeva. Sljedeći korak je usporedba izdvojenog žiga iz slike s originalnim žigom. Za nizove brojeva W i W* medusobna sličnost se može utvrditi sljedećom formulom: gdje delta može poprimiti vrijednosti od [-1,1]. Podudarnost izmedu žigova W i W* može se potvrditi, ako delta poprimi vrijednost veću od nekog praga, koji se može odrediti eksperimentalno ili analitički. Eksperimentalni rezultati dobiveni ovom metodom pokazuju da algoritam uspijeva izdvojiti pouzdanu kopiju vodenog žiga iz slike na kojoj je izvršeno nekoliko transformacija: skaliranje, JPEG kompresija, printanje, fotokopiranje, skaniranje. Ova metoda se koristi kao početni korak u razvoju većine novijih algoritama za sustave vodenih žigova. Koch et al. predlažu algoritam također namijenjen DCT domeni. Vodeni žig u ovom algoritmu je niz binarnih vrijednosti, wi {1,0}. Algoritam pseudo-slučajno odabire blokove veličine 8x8 i na njima izvrši DCT transformaciju. Nad svakim blokom se izvrši kvantizacija korištenjem JPEG kvantizacijske matrice i kvantizacijskog faktora Q. Unutar svakog bloka se pseudo-slučajno odabiru dva koeficijenta iz pojasa srednjih frekvencija. Ako se sa fb označi blok 8x8 DCT koeficijenata a sa fb(m1,n1) i fb(m2,n2) odabrani par koeficijenata unutar tog bloka tada je apsolutna udaljenost izmedu ova dva koeficijenta određena formulom: Da bi se stavio jedan bit informacije vodenog žiga wi u odabrani blok fb par koeficijenata fb(m1,n1) i fb(m2,n2) se modificira tako da udaljenost izmedu ta dva koeficijenta postane: gdje je q parametar za kontrolu snage umetanja. IV
PROGRAMSKA IMPLEMENTACIJA SUSTAVA VODENOG ŽIGA Programski je implementiran algoritam koji predlažu Cox et al. Pošto je algoritam zamišljen za rad s jednobojnim slikama, prije obavljanja DCT transformacije se slika prebacuje iz RGB u YCrCb sustav boja i cijeli se algoritam obavlja na Y komponenti. U algoritmu se vrši diskretna kosinusna transformacija nad cijelom slikom, što je procesorski vrlo zatjevno nad većim slikama. Sama upotreba programa je jednostavna i sastoji se od tri funkcije: generiranje žiga, umetanje žiga i testiranje žiga. Kod umetanja žiga potrebno je unijeti u dijalog ime datoteke u koju se spremaju podaci o žigu te parametre za generiranje. U dijelog su već unešene vrijednosti s kojima je izvršeno testiranje sustava. Druga funkcija je umetanje žiga i njenim odabirom potrebno je samo odabrati datoteku s žigom i umetanje žiga će biti obavljeno na trenutno otvorenoj slici. Označenu sliku moguće je pohraniti odabirom funkcije Spremi. Treća funkcija je testiranje žiga i njenim pokretanjem potrebno je odabrati tri parametra: datoteku s originalnom slikom, datoteku s žigom i označenu sliku. Rezultat funkcije je numerička vrijednost u intervalu od 0 do 1 i predstavlja sličnost između izvučenog žiga iz označene slike i originalnog žiga. Što je ta vrijednost bliža jedinici to je sličnost između žigova veća. Nadam se da ću imati dovoljno vremena i volje da program u budućnosti proširim s još nekoliko algoritama za ubacivanje vodenih žigova. Rezultati rada programa Sustav je testiran na poznatoj slici Lenna. Umetnuti žig može se vidjeti ovdje. Na označenoj slici su napravljene izmjene u Photoshopu i pokušano je izdvojiti žig iz modificirane označene slike. Rezultati su poprilično zanimljivi.
1. I.J. Cox, J. Kilian, F.T. Leighton, T. G. Shamoon, "Secure spread spectrum watermarking for multimedia", IEEE Transactions on image processing, vol 143, No. 4., 1996. 2. E. Koch, J. Zhao, "Towards Robust and Hidden Image Copyright Labeling", IEEE Workshop on NonLinear Signal and Image Processing, 1995. 3. M. Barni, F. Bartolini, V. Cappellini, A. Piva, "Copyright protection of digital images by embedded unperceivable marks" 4. Watermarking world: http://www.watermarkworld.org 4. Rest of the Lenna story: http://www-2.cs.cmv.edu/~chuck/lennapg/lenna.shtml © Zavod za Elektroniku,
Mikroelektroniku, Računalne i Inteligente Sustave
|