dan-masek

Minimal corrections to fix authors code

Apr 8th, 2021
397
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from PIL import Image
  2. import numpy as np
  3. from cv2_41 import cv2
  4.  
  5.  
  6. def lz77Compress (image,sw,lab):
  7.     img = cv2.imread(image)
  8.     flat = np.array(img).flatten()
  9.     row = img.shape[0]
  10.     col = img.shape[1]
  11.     ch = img.shape[2]
  12.     tot = row * col * ch
  13.     slidingWindows = sw
  14.     lookAhead = lab
  15.     print("fase 1")
  16.     encodedTuple = []
  17.     encodedChar = []
  18.     # Lunghezza del Search Buffer
  19.     sbSize = slidingWindows - lookAhead
  20.     for it in range(sbSize):
  21.         encodedTuple.append(0)
  22.         encodedTuple.append(0)
  23.         encodedChar.append(flat[it])
  24.     # puntatore Search Buffer
  25.     sbPointer = 0
  26.     print("fase 2")
  27.     while sbPointer < tot :
  28.         max_match = 0
  29.         max_match_go_back = 0        
  30.         selChar = sbPointer + sbSize
  31.      # corrispondenza del carattere in Sb da lookAd
  32.         encodeCharacters = flat[selChar]
  33.     #sequenza vuota[]
  34.        
  35.         seqY = []
  36.         for i in range(sbPointer,sbPointer + sbSize):
  37.             if(flat[i] == encodeCharacters):
  38.                 seqY.append(i)
  39.        
  40.     #controllare se non vi e una corrispondenza
  41.         if(len(seqY) == 0 ):
  42.             encodedTuple.append(0)
  43.             encodedTuple.append(0)
  44.             encodedChar.append (encodeCharacters)
  45.         else:
  46.             for j in seqY:
  47.             #lunghezza della corrispodenza
  48.                 matchLenght= 0
  49.                 returnBack= selChar - j
  50.                 it = 0
  51.                 while selChar + it < tot :
  52.                     if flat[it + j] == flat[selChar + it]:
  53.                         matchLenght +=1
  54.                         it +=1
  55.                   # se non trova corrispondenze
  56.                     else:
  57.                         break
  58.                 if matchLenght>max_match:
  59.                    max_match = matchLenght
  60.                    returnBack= max_match_go_back
  61.  
  62.            
  63.             encodedTuple.append(max_match_go_back)
  64.             encodedTuple.append(max_match)
  65.             encodedChar.append(flat[selChar + max_match - 1])
  66.            
  67.            
  68.  
  69.         sbPointer= sbPointer+ 1 +max_match
  70.    
  71.        
  72.  
  73.    
  74.  
  75.     #print("Prova", encodedTuple, encodedChar)  
  76.     np.save("encodedTuple", encodedTuple)
  77.     np.save("encodedChar", encodedChar)  
  78.     print("File compresso in : Copressed.txt")
  79.     output = open("Compressed.txt","w+")
  80.     imgSize = open('imgSize.txt', "w")
  81.     imgSize.write(str(row) + '\n')  # write row dimension
  82.     imgSize.write(str(col) + '\n')  # write col dimension
  83.     imgSize.write(str(ch) + '\n')  # write col dimension
  84.     output.close()
  85.     imgSize.close()
  86.     cv2.waitKey(0)
  87.     cv2.destroyAllWindows()
  88. # fase di decodifica
  89. # fase di decodifica
  90. def lz77Decompressor():
  91.     imsize = open("imgSize.txt", "r")
  92.     row = int(imsize.readline())
  93.     col = int(imsize.readline())
  94.     ch = int (imsize.readline())
  95.     tot = row * col * ch
  96.  
  97.     # carico Tuple e caratteri
  98.     encodedTuples = np.load("encodedTuple.npy")
  99.     encodedChars = np.load("encodedChar.npy")
  100.     tupleI= 0
  101.     charJ = 0
  102.         #array di decodifica
  103.     decodeArray = []
  104.     while tupleI < encodedTuples.size:
  105.         pBack =  encodedTuples[tupleI]
  106.         charact = encodedChars[charJ]
  107.         #int usato per risolvere error:numoy.int32
  108.         lunghezza = int(encodedTuples[tupleI + 1])
  109.         charJ+=1
  110.         tupleI+=2
  111.         # se non vi e nessun prefisso codificato
  112.         if(pBack == 0):
  113.             decodeArray.append(charact)
  114.         else:
  115.             longT = len(decodeArray)
  116.             for j in range(lunghezza):
  117.                 distance = int(longT - pBack + j)
  118.             if(distance<len(decodeArray)):
  119.                 decodeArray.append(distance)
  120.                 if len(decodeArray) < tot:
  121.                     decodeArray.append( distance)
  122.  
  123.  
  124.     for i in range(len(decodeArray), tot):
  125.         decodeArray.append( i)
  126.     decodeArray = np.reshape(decodeArray,(row,col,ch))
  127.  
  128.    
  129.     cv2.imwrite("output.png", decodeArray)
  130.     print("FinalSize",decodeArray.shape)
  131.     cv2.waitKey(0)
  132.     cv2.destroyAllWindows()
  133.    
  134. path = 'im3.jpg'
  135.  
  136. sliding_window_size = 500
  137. lookahead_buffer_size = 500
  138.  
  139.  
  140. lz77Compress(path, sliding_window_size, lookahead_buffer_size)
  141.  
  142. lz77Decompressor()
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×