Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ps:laboratoare:10_2 [2018/12/05 11:39]
andrei.nicolicioiu
ps:laboratoare:10_2 [2020/10/07 18:33] (current)
ionut.gorgos
Line 17: Line 17:
  
 Pentru aceasta: Pentru aceasta:
-  - citim o imagine RGB cu 3 canale pentru fiecare culoare, folosind funcția '​imread'​ din MATLAB și pentru simplitate o convertim într-o imagine cu un canal cu nivele de gri (folosim funcția '​rgb2gray'​). Pentru a fi totul mai simplu vom converti valorile în tipul '​double'​ și vom scala imaginea din valorile [0,255] în [0,​1]. ​ +  - citim o imagine RGB cu 3 canale pentru fiecare culoare, folosind funcția '​imread'​ din MATLAB și pentru simplitate o convertim într-o imagine cu un canal cu nivele de gri (folosim funcția '​rgb2gray'​). Pentru a fi totul mai simplu vom converti valorile în tipul '​double'​ și vom scala imaginea din valorile [0,255] în [0,​1]. ​Afisați imaginea folosind functia '​imagesc'​. ​
   - luăm o imagine și încercăm să îi aflăm spectrul folosind Transformata Fourier Discretă implementată în MATLAB, cu ajutorul funcției '​fft2'​.   - luăm o imagine și încercăm să îi aflăm spectrul folosind Transformata Fourier Discretă implementată în MATLAB, cu ajutorul funcției '​fft2'​.
   - păstrăm doar modulul coeficienților $|s|$ și vom reface imaginea inițială cu Trasnformata Fourier Inversă, implementată în funcția '​ifft2'​.   - păstrăm doar modulul coeficienților $|s|$ și vom reface imaginea inițială cu Trasnformata Fourier Inversă, implementată în funcția '​ifft2'​.
Line 27: Line 27:
  
 Vom observa că informația este păstrată în principal în una dintre cele 2, așa că putem să schimbăm cealaltă variantă înlocuind-o cu valorile imaginii pe care vrem să o ascundem. ​ Vom observa că informația este păstrată în principal în una dintre cele 2, așa că putem să schimbăm cealaltă variantă înlocuind-o cu valorile imaginii pe care vrem să o ascundem. ​
- 
- <​hidden> ​ 
-<​note>​ 
-O posibilă soluție: 
-<code matlab lab10_ex1_modul_vs_faza.m>​ 
-close all 
-clear all 
- 
-height ​ = 240; 
-width   = 320; 
- 
-% citim imaginile, le convertim in gri si le normalizam 
-img = imread('​peppers.png'​);​ 
-img = double(rgb2gray(img)) / 255; 
- 
-h = figure, imshow(img);​impixelinfo 
-title('​imagine originala'​) 
- 
-% aflam spectrul S(k) al imaginii 
-S = fft2(img); 
- 
-% investigam diferente dintre reconstructia din tot spectrul, reconstructia 
-% doar din modulul spectrului si reconstructia din faza spectrului 
-img_res = ifft2(S); 
-h = figure, imshow(normalise(img_res));​impixelinfo 
-title('​imagine restituita din spectrul complet'​) 
- 
-img_res_abs = ifft2(abs(S));​ 
-h = figure, imshow(normalise(img_res_abs));​impixelinfo 
-title('​imagine restituita din modulul spectrului fourier'​) 
- 
-phase_S = S ./ abs(S); 
-img_res_ph = ifft2(phase_S);​ 
-h = figure, imshow(normalise(img_res_ph));​impixelinfo 
-title('​imagine restituita din faza spectrului fourier'​) 
-</​code>​ 
-</​note>​ 
-</​hidden> ​ 
  
 === Exercițiul 2 -- Decodificarea unei imagini ascunse [2p] === === Exercițiul 2 -- Decodificarea unei imagini ascunse [2p] ===
Line 74: Line 36:
   - normalizați spectrul prin scăderea minimului și împărțirea la valoarea diferenței dintre maxim și minim astfel încât valorile finale să fie în intervalul [0,1].   - normalizați spectrul prin scăderea minimului și împărțirea la valoarea diferenței dintre maxim și minim astfel încât valorile finale să fie în intervalul [0,1].
   - selectați doar imaginea observată în spectru. Vizualizați imaginea folosind '​imshow'​. ​   - selectați doar imaginea observată în spectru. Vizualizați imaginea folosind '​imshow'​. ​
- 
-<​hidden> ​ 
- 
-<​note>​ 
-O posibilă soluție: 
- 
-<code matlab decode_stegano_image.m>​ 
-function hidden_img = decode_stegano_image(stego_image) 
- 
-top     = 100; 
-left    = 100; 
-height ​ = 240; 
-width   = 320; 
- 
-fft_steno_double = fft2(stego_image);​ 
-fft_steno_double = normalise(fft_steno_double);​ 
-hidden_img = abs(fft_steno_double(top+1:​ top + height, left + 1 : left + width )); 
-hidden_img = normalise(hidden_img);​ 
-</​code>​ 
- 
- 
-</​note>​ 
-</​hidden>​ 
- 
- 
-<​hidden> ​ 
-<​note>​ 
-Doar pentru asistenți. Formam imagine steno. 
-<code matlab lab10_ex2.m>​ 
-clear all 
-close all 
- 
-height0 ​ = 240; 
-width0 ​  = 320; 
- 
-height ​ = 1 * height0; 
-width   = 1 * width0; 
-%% pregatirea datelor 
-img = imread('​sky.jpg'​);​ 
-img = imresize(img,​ [4 * height0 + 1, 4 * width0 + 1]); 
-h = figure , image(img) 
-title('​imagine originala'​) 
-print(h, '​-dpng',​ '​steganography_imagine_originala.png'​);​ 
- 
-img_gray = double(rgb2gray(img)) / 255; 
-h = figure , imshow(img_gray) 
-title('​imagine originala in gri') 
- 
-%citim imaginea secreta si o convertim in gri 
-hid_img = imread('​dog.jpeg'​);​ 
-hid_img = imresize(hid_img,​ [height,​width]);​ 
-hid_img = double(rgb2gray(hid_img)) / 255; 
- 
-stego = encode_hidden_image(img_gray,​ hid_img); 
-figure, imshow(stego) 
-filename = '​stego_img.bmp'​ 
-% salvam ca bmp, lossless astfel incât sa nu avem zgomot care ne-ar 
-% ingreuna recuperarea imaginii ascunse. Astfel avem agomot doar de 
-% cuantizare a valorilor pixelilor dar nu si de la algoritmul de compresie 
-imwrite(stego,​filename,'​bmp'​);​ 
-%% decodificarea 
- 
-stego_bmp = imread(filename);​ 
-hid = decode_stegano_image(stego_bmp);​ 
- 
- 
-figure, imshow(hid);​impixelinfo 
-title('​imagine ascunsă recuperată din imaginea bmp stego ') 
- 
-</​code>​ 
-</​note>​ 
- 
-<​note>​ 
-<code matlab normalise.m>​ 
-function img = normalise(img) 
-img = (img - min(img(:)) ) ./ (max(img(:​)) - min(img(:​))) ; 
-</​code>​ 
-</​note>​ 
-</​hidden> ​ 
- 
  
  
Line 174: Line 56:
 {{:​ps:​laboratoare:​lab10_ps_stego_spectru.png?​300|}} {{:​ps:​laboratoare:​lab10_ps_stego_spectru.png?​300|}}
  
- <​hidden>​ 
- 
-<​note>​ 
-<code matlab encode_hidden_image.m>​ 
-    ​ 
-function steno_img = encode_hidden_image(carrier_img,​ hidden_img) 
-% punem in modului spectrului imaginea ascunsa 
-% imaginea secreta o ascundem in frecventele inalte ale imaginii 
- 
- 
-top     = 100; 
-left    = 100; 
-[height, width] = size(hidden_img);​ 
- 
-S = fft2(carrier_img);​ 
-phase_S = S ./ abs(S); 
- 
-abs_S = abs(S); 
-% calculam media spectrului pe zona pe care o vom inlocui, 
-% astfel incat media pe acea zona sa ramana aproximativ constanta 
-patch = abs_S(top+1:​ top + height, left + 1 : left + width); 
-max_S = 5 * mean(patch(:​));​ 
- 
-[st_h, st_w] = size(abs_S) ; 
- 
-abs_S(top+1:​ top + height, left + 1 : left + width  ) = max_S * hidden_img; 
-abs_S(top+1:​ top + height, st_w - left + 2 - width: st_w - left + 1  ) = max_S * hidden_img(:,​end:​-1:​1);​ 
- 
-abs_S(st_h - top + 2 - height : st_h - top + 1, left + 1 : left + width) = max_S * hidden_img(end:​-1:​1,:​);​ 
-abs_S(st_h - top + 2 - height : st_h - top + 1, st_w - left + 2 - width: st_w - left + 1) = max_S * hidden_img(end:​-1:​1,​end:​-1:​1);​ 
- 
-% figure, imagesc(log(abs_S));​impixelinfo 
-% title('​spectru imagini stego'​) 
- 
-steno_img = ifft2(abs_S .* phase_S); 
- 
-</​code>​ 
-</​note>​ 
- 
-</​hidden> ​ 
  
 === Exercițiul 4 -- Codificarea unei imagini secrete, gri în spectrul unui imagini color [1p] === === Exercițiul 4 -- Codificarea unei imagini secrete, gri în spectrul unui imagini color [1p] ===
Line 295: Line 137:
   * Responsabil:​ [[andrei.nicolicioiu@gmail.com|Andrei Nicolicioiu]]   * Responsabil:​ [[andrei.nicolicioiu@gmail.com|Andrei Nicolicioiu]]
  
-  * Data publicării:​ 02.12.2018+  * Data publicării:​ 02.12.2019
    
 /* </​hidden>​ */ /* </​hidden>​ */
  
ps/laboratoare/10_2.1544002787.txt.gz · Last modified: 2018/12/05 11:39 by andrei.nicolicioiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0