Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.13 KB | None | 0 0
  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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement