Advertisement
Guest User

arithmetic_encoder.py

a guest
Apr 7th, 2020
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. import numpy as np
  2. import cv2
  3. from collections import OrderedDict
  4. import time
  5.  
  6.  
  7. def arith_coding(fileVector, blockSize, probability):
  8.     cumulative_p = {}
  9.     cumulative_p_prev = {}
  10.     tags = []
  11.  
  12.     cum_sum = 0
  13.     for p in probability:
  14.         cumulative_p[p] = (probability[p] + cum_sum)
  15.         cumulative_p_prev[p] = cum_sum
  16.         cum_sum += probability[p]
  17.  
  18.     idx = 0
  19.     while(idx < len(fileVector)):
  20.         l = 0
  21.         u = 1
  22.         for blockNum in range(blockSize):
  23.             letter = fileVector[idx]
  24.             new_l = l + (u-l) * cumulative_p_prev[letter]
  25.             new_u = l + (u-l) * cumulative_p[letter]
  26.             u = new_u
  27.             l = new_l
  28.             idx += 1
  29.         tags.append((u+l)/2)
  30.  
  31.     return tags
  32.  
  33.  
  34. img = cv2.imread('forest.jpg', cv2.IMREAD_GRAYSCALE)
  35.  
  36. dimensions = np.array([img.shape[0], img.shape[1]])  # height x width
  37.  
  38. img = img.flatten()
  39. blockSize = 4
  40.  
  41. extraPixels = blockSize - (img.size % blockSize)
  42. img = np.pad(img, (0, extraPixels), 'constant', constant_values=(0))
  43.  
  44. probability = {}
  45.  
  46. for pix in img:
  47.     if pix in probability.keys():
  48.         probability[pix] += 1
  49.     else:
  50.         probability[pix] = 1
  51.  
  52. sortedProbability = {}
  53. for shade in range(256):
  54.     if shade in probability.keys():
  55.         sortedProbability[shade] = probability[shade]
  56.  
  57. probability = sortedProbability
  58.  
  59. for p in probability:
  60.     probability[p] /= len(img)
  61.  
  62.  
  63. probabilityVector = []
  64.  
  65. for shade in range(256):
  66.     if shade in probability.keys():
  67.         probabilityVector.append(probability[shade])
  68.     else:
  69.         probabilityVector.append(0)
  70.  
  71. probabilityVector = np.array(probabilityVector)
  72. tags = np.array(arith_coding(img, blockSize, probability))
  73.  
  74. tags.tofile('tags.dat')
  75. probabilityVector.tofile('probabilities.dat')
  76. dimensions.tofile('dimensions.dat')
  77. np.array([blockSize]).tofile('blocksize.dat')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement