SHARE
TWEET

Untitled

a guest Nov 13th, 2019 95 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from scipy import *
  2. from pylab import *
  3. import scipy.misc
  4. '''
  5. Prosta funkcja do wyswietlania obrazu.
  6. img - obraz do wyswietlenia, monochromatyczny, z wartosciami pikseli z przedzialu [0.0, 1.0]
  7. lub calkowitymi z przedzialu [0, 255]
  8. imgTitle - tytul obrazu; opcjonalny, wartosc domyslna: '' (tekst pusty)
  9. '''
  10. def showImg(img, imgTitle = ''):
  11.  figure()
  12.  axis("off")
  13.  title(imgTitle)
  14.  vmax = 1.0 #domyslnie - obrazy float
  15.  if "int" in str(img.dtype): #ale jesli obrazy int, to zakres do 255
  16.   vmax = 255.
  17.  imshow(img, cmap=cm.gray, vmin=0, vmax=vmax)
  18. ''' wczytanie obrazu i przeskalowanie wartosci '''
  19. imgF = imread('samolot_mono.png') #obraz z wartosciami z przedzialu [0.0, 1.0]
  20. imgI = (imgF*255).astype('uint8') #obraz z wartosciami calkowitymi z przedzialu [0, 255]
  21. ''' wczytanie obrazu funkcja scipy.misc.imread '''
  22. img = scipy.misc.imread('samolot_mono.png') #obraz z wartosciami calkowitymi zprzedzialu [0, 255]
  23. img2 = scipy.misc.imread('znak7.png')
  24. imgtemp = scipy.misc.imread('znak7.png') #pomocnicza kopia znaku wodnego
  25. showImg(img2, 'znak wodny')
  26. '''funkcja ktora wpisuje znaki wodne na najmniej znaczacych bitach obrazu hosta'''
  27. j=0 # pomocnicza zmienna ktora przechowuje numer rzedu znaku wodnego
  28. showImg(img, 'obraz podstawowy')
  29. for x in range(0,img.shape[0],1): # x oznaczac bedzie numer rzedu obrazu hosta krok jest 2 poniewaz w nastepnej petli pokrywamy wartosci z rzedu x+1
  30.  i=0 #pomocnicza zmienna ktora przechowuje numer kolumny znaku wodnego
  31.  if j==len(img2): #jesli j osiagnie wartosc 64 to ja zerujemy bo maksymalna dla naszego znaku do 63 (ma 64 rozdzielczosc ale liczymy od 0)
  32.   j=0
  33.  for y in range(0,img.shape[1],8): # y przechowuje numer kolumny obrazu hosta krok jest 2 poniewaz w nastepnej petli pokrywamy wartosci dla y+1
  34.   if i==len(img2): # zerujemy gdy wartosc przekroczy rozdzielczosc znaku wodnego
  35.    i=0;
  36.    ''' tu wpisujemy wartosc piksela znaku wodnego na najmniej znaczace bity 8 pikseli
  37. obrazu hosta w odpowienich miejscach
  38. np pierwszy piksel znaku wodnego [0,0] na piksele [0,0], [0,1] , [1,0] , [0,1] obrazu
  39. hosta'''
  40.   if img2[j,i] !=0: #jesli wartosc piksela obrazu wodnego jest rowna 255
  41.    img[x,y] |=0x01 #to zmieniamy najmniej znaczacy bit na 1
  42.    img[x,y+1] |=0x01
  43.    img[x,y+2] |=0x01
  44.    img[x,y+3] |=0x01
  45.    img[x,y+4] |=0x01
  46.    img[x,y+5] |=0x01
  47.    img[x,y+6] |=0x01
  48.    img[x,y+7] |=0x01
  49.   else: #jesli ma wartosc 0
  50.    img[x,y]&=0xfe #to zmieniamy najmniejszy bit na 0
  51.    img[x,y+1]&=0xfe
  52.    img[x,y+2]&=0xfe
  53.    img[x,y+3]&=0xfe
  54.    img[x,y+4]&=0xfe
  55.    img[x,y+5]&=0xfe
  56.    img[x,y+6]&=0xfe
  57.    img[x,y+7]&=0xfe
  58.   i+=1 #przechodzimy do nastepnej kolumny
  59.  j+=1 #przechodzimy do nastepnego wiersza
  60. j=0
  61. ''' robimy tablice zer 64x64 ze znaku wodnego pomocniczego'''
  62. for x in range(0, imgtemp.shape[0],1):
  63.  for y in range(0, imgtemp.shape[1],1):
  64.   imgtemp[x,y]=0
  65.  
  66.  
  67.  '''odbicie lustrzane obrazu hosta. odbicie lewej strony obrazy na prawej'''
  68. '''
  69. for x in range(0, img.shape[0],1):
  70.  for y in range(0,img.shape[1]/2,1):
  71.   img[x,img.shape[1]-1-y]=img[x,y];
  72.   '''
  73.    
  74. ''' dodanie szumu impulsowego '''
  75.  
  76.  
  77. threshold = 0.2 #prog okreslajacy jaki procent pikseli ma zostac zaszumiony
  78. value = 1 #poczatkowa wartosc szumu (na zmiane wpisywana bedzie wartosc maksymalna i minimalna)
  79. inoisedimg = zeros(img.shape) #utworzenie tablicy na obraz zaszumiony
  80. for h in range(0, img.shape[0]): #dla kazdego wiersza
  81.  for w in range(0, img.shape[1]): #dla kazdej kolumny
  82.   n = rand() #losowanie liczby z przedzialu [0, 1]
  83.   if n < threshold:
  84.    inoisedimg[h][w] = value #wpisanie 'szumu'
  85.    if value == 1: # \
  86.     value = 0 # >zmiana wartosci 'szumu' - na zmiane wpisywana jest wartosc maksymalna i minimalna
  87.    else: # |
  88.     value = 1 # /
  89.   else:
  90.    inoisedimg[h][w] = img[h][w] #przepisanie wartosci piksela (brak szumu)
  91. img = inoisedimg
  92. #img = img*1.1 #zmiana kontrasu obrazu hosta
  93. ''' ponizej negatyw'''
  94. '''
  95. xp = [0, 255]
  96. yp = [255, 0]
  97. negimg = interp(img.flatten(), xp, yp)
  98. img = negimg.reshape(img.shape)'''
  99. img = img.astype('uint8') #po zmianie wartosci trzeba zmienic typ(kontrast)
  100. #img = img +1 # rozjasniamy obraz
  101. showImg(img, 'szum impulsowy')
  102. j=0 #zmienna pomocnicza okreslajaca numer wiersza
  103. ''' w tej funkcji wyciagamy znak wodny z obrazu hosta '''
  104. for x in range(0,img.shape[0],1):
  105.  i=0 #zmienna pomocnicza okreslajaca numer komorki
  106.  if j==len(img2):
  107.   j=0
  108.  for y in range(0,img.shape[1],8):
  109.   if i==len(img2):
  110.    i=0;
  111. #ustawienie LSB dla 8 pikseli (po 1 piksel znaku wodnego na 8 obrazu hosta)
  112.   if img[x,y] & 0x01:
  113.    bit1 = 1.0 #ustawienie LSB na1
  114.   else:
  115.    bit1 = 0.0 #ustawienie LSB na 0
  116.   if img[x,y+1] & 0x01:
  117.    bit2 = 1.0
  118.   else:
  119.    bit2 = 0.0
  120.   if img[x,y+2] & 0x01:
  121.    bit3 = 1.0
  122.   else:
  123.    bit3 = 0.0
  124.   if img[x,y+3] & 0x01:
  125.    bit4 = 1.0
  126.   else:
  127.    bit4 = 0.0
  128.   if img[x,y+4] & 0x01:
  129.    bit5 = 1.0
  130.   else:
  131.    bit5 = 0.0
  132.   if img[x,y+5] & 0x01:
  133.    bit6 = 1.0
  134.   else:
  135.    bit6 = 0.0
  136.   if img[x,y+6] & 0x01:
  137.    bit7 = 1.0
  138.   else:
  139.    bit7 = 0.0
  140.   if img[x,y+7] & 0x01:
  141.    bit8 = 1.0
  142.   else:
  143.    bit8 = 0.0
  144.   varbits = bit1 +bit2 + bit3 + bit4 + bit5 + bit6 + bit7 + bit8 # sumujemy
  145.   imgtemp[j,i] += varbits # zwiekszamy wartosc o uzyskana sume np za kazdym razem jak trafimy na imgtemp[0,0] to te
  146. #wartosci wszystkie nam sie zsumuja z kazdego wpisanego w obraz znaku wodnego( wyszlo ich 24)
  147.   i+=1 #nastepny numer kolumny
  148.  j+=1 #nastepny numer wiersza
  149. '''konwertujemy uzyskane wartosci na jeden znak wodny'''
  150. for x in range(0,imgtemp.shape[0],1):
  151.  for y in range(0,imgtemp.shape[1],1):
  152.   if imgtemp[x,y]<24/2*4:
  153.    '''#jesli wartosci 1 bylo mniej niz wartosci 0 to ustawiamy wartosc na 0. 24 znaki
  154. wodne mamy obrazie hosta mnozymy razy 4
  155. bo 1 piksel znaku wodnego ->4 na obrazie hosta. jesli wartosci bylo po rowno
  156. to ustawiamy na 255. dla odbicia lustrzanego sprawdzilam
  157. rowniez co sie stanie jesli gdy wartosci 0 i 1 jest po rowno to ustawimy
  158. wartosc na 0. (ustawimy w warunku znak <=)'''
  159.    imgtemp[x,y]=0
  160.   else:
  161.    imgtemp[x,y]=255
  162. showImg(imgtemp, 'znak wodny wyciagniety z obrazu hosta z szumem')
  163. show()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top