Декомпозиция сжатого изображения с использованием SVD
(.env) boris@boris-All-Series:~/MATPLOTLIBSR/SVD$ cat testSVD1.py
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
img_eg = mpimg.imread("./car.jpg")
print(img_eg.shape) #Operation results: (400,640,3)
#Converting image data into two-dimensional matrix and singular value decomposition
img_temp = img_eg.reshape(400, 640 * 3)
U,Sigma,VT = np.linalg.svd(img_temp)
# Take the first 10 singular values
sval_nums = 10
img_restruct1 = (U[:,0:sval_nums]).dot(np.diag(Sigma[0:sval_nums])).dot(VT[0:sval_nums,:])
img_restruct1 = img_restruct1.reshape(400,640,3)
img_restruct1.tolist()
# Take the first 50 singular values
sval_nums = 50
img_restruct2 = (U[:,0:sval_nums]).dot(np.diag(Sigma[0:sval_nums])).dot(VT[0:sval_nums,:])
img_restruct2 = img_restruct2.reshape(400,640,3)
# Take the first 100 singular values
sval_nums = 100
img_restruct3 = (U[:,0:sval_nums]).dot(np.diag(Sigma[0:sval_nums])).dot(VT[0:sval_nums,:])
img_restruct3 = img_restruct3.reshape(400,640,3)
#Exhibition
fig, ax = plt.subplots(nrows=1, ncols=3)
ax[0].imshow(img_restruct1.astype(np.uint8))
ax[0].set(title = "10")
ax[1].imshow(img_restruct2.astype(np.uint8))
ax[1].set(title = "50")
ax[2].imshow(img_restruct3.astype(np.uint8))
ax[2].set(title = "100")
plt.show()
Видно, что первые 50 или 100 собственных значений могут быть использованы для восстановления изображения, что экономит много места по сравнению с исходным изображением (400 собственных значений).
Прямое сингулярное разложение матрицы
(.env) boris@boris-All-Series:~/MATPLOTLIBSR/SVD$ cat directSVD1.py
import numpy as np
#Create A
A = np.array([[1,5,7,6,1],[2,1,10,4,4],[3,6,7,5,2]])
#Direct singular value decomposition using np.linalg.svd() function
#The function has three return values: left singular matrix,
# all singular values and right singular matrix.
U,Sigma,VT = np.linalg.svd(A)
#Exhibition
print(U)
print("\n")
print(Sigma)
print("\n")
print(VT)
(.env) boris@boris-All-Series:~/MATPLOTLIBSR/SVD$ python3 directSVD1.py
[[-0.55572489 0.40548161 -0.72577856]
[-0.59283199 -0.80531618 0.00401031]
[-0.58285511 0.43249337 0.68791671]]
[18.53581747 5.0056557 1.83490648]
[[-0.18828164 -0.37055755 -0.74981208 -0.46504304 -0.22080294]
[ 0.01844501 0.76254787 -0.4369731 0.27450785 -0.38971845]
[ 0.73354812 0.27392013 -0.12258381 -0.48996859 0.36301365]
[ 0.36052404 -0.34595041 -0.43411102 0.6833004 0.30820273]
[-0.5441869 0.2940985 -0.20822387 -0.0375734 0.7567019 ]]
References
No comments:
Post a Comment