5.1 MiB
5.1 MiB
In [1]:
%matplotlib inline
from matplotlib.image import imread
import matplotlib.pyplot as plt
import scipy.linalg as ln
import numpy as np
import os
from PIL import Image
from math import log10, sqrt
plt.rcParams['figure.figsize'] = [16, 8]
# Import image
A = imread(os.path.join("figslides/photo1.jpg"))
X = A.dot([0.299, 0.5870, 0.114]) # Convert RGB to grayscale
img = plt.imshow(X)
# convert to gray
img.set_cmap('gray')
plt.axis('off')
plt.show()
# Call image size
print(': %s'%str(X.shape))
# split the matrix into U, S, VT
U, S, VT = np.linalg.svd(X,full_matrices=False)
S = np.diag(S)
m = 800 # Image's width
n = 1200 # Image's height
j = 0
# Try compression with different k vectors (these represent projections):
for k in (5,10, 20, 100,200,400,500):
# Original size of the image
originalSize = m * n
# Size after compressed
compressedSize = k * (1 + m + n)
# The projection of the original image
Xapprox = U[:,:k] @ S[0:k,:k] @ VT[:k,:]
plt.figure(j+1)
j += 1
img = plt.imshow(Xapprox)
img.set_cmap('gray')
plt.axis('off')
plt.title('k = ' + str(k))
plt.show()
print('Original size of image:')
print(originalSize)
print('Compression rate as Compressed image / Original size:')
ratio = compressedSize * 1.0 / originalSize
print(ratio)
print('Compression rate is ' + str( round(ratio * 100 ,2)) + '%' )
# Estimate MQA
x= X.astype("float")
y=Xapprox.astype("float")
err = np.sum((x - y) ** 2)
err /= float(X.shape[0] * Xapprox.shape[1])
print('The mean-square deviation '+ str(round( err)))
max_pixel = 255.0
# Estimate Signal Noise Ratio
srv = 20 * (log10(max_pixel / sqrt(err)))
print('Signa to noise ratio '+ str(round(srv)) +'dB'): (2128, 3636)
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.010421875 Compression rate is 1.04% The mean-square deviation 993 Signa to noise ratio 18dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.02084375 Compression rate is 2.08% The mean-square deviation 590 Signa to noise ratio 20dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.0416875 Compression rate is 4.17% The mean-square deviation 341 Signa to noise ratio 23dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.2084375 Compression rate is 20.84% The mean-square deviation 70 Signa to noise ratio 30dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.416875 Compression rate is 41.69% The mean-square deviation 26 Signa to noise ratio 34dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 0.83375 Compression rate is 83.38% The mean-square deviation 6 Signa to noise ratio 41dB
Original size of image: 960000 Compression rate as Compressed image / Original size: 1.0421875 Compression rate is 104.22% The mean-square deviation 3 Signa to noise ratio 43dB
Warning:
Output truncated. This notebook contains too many cells to display efficiently.


