In [2]:
#keep
import numpy as np
import matplotlib.pyplot as pt
%matplotlib inline
In [6]:
#keep
from PIL import Image

with Image.open("siebel.jpg") as img:
    rgb_img = np.array(img)
rgb_img.shape
Out[6]:
(370, 552, 3)
In [7]:
#keep
img = np.sum(rgb_img, axis=-1)
In [8]:
#keep
pt.imshow(img, cmap="gray")
Out[8]:
<matplotlib.image.AxesImage at 0x112f4b668>
In [10]:
#keep
u, sigma, vt = np.linalg.svd(img)
sigma

pt.plot(sigma)
Out[10]:
[<matplotlib.lines.Line2D at 0x11438c320>]
In [12]:
#keep
i=0
compressed_img = sigma[0] * np.outer(u[:, 0], vt[0])

pt.imshow(compressed_img, cmap="gray")
Out[12]:
<matplotlib.image.AxesImage at 0x114814fd0>
In [19]:
#keep
i += 1
compressed_img += sigma[i] * np.outer(u[:, i], vt[i])

pt.imshow(compressed_img, cmap="gray")
Out[19]:
<matplotlib.image.AxesImage at 0x115f8f5c0>
In [ ]: