넘파이 튜토리얼 참고
특잇값 분해
-행렬을 특정한 구조로 분해하는 방식
-축 작업(operations on an axis)에 사용
이미지를 출력한 후, rgb값을 변경하여 회색으로 변환
from scipy import misc
import numpy as np
import matplotlib.pyplot as plt
img = misc.face()
plt.imshow(img)
plt.show()
red_array = img_array[:, :, 0]
green_array = img_array[:, :, 1]
blue_array = img_array[:, :, 2]
from numpy import linalg
img_gray = img_array @ [0.2126, 0.7152, 0.0722]
plt.imshow(img_gray, cmap="gray")
plt.show()
# 이미지를 분해한 후 다시 합침
U, s, Vt = linalg.svd(img_gray)
U.shape, s.shape, Vt.shape
Sigma = np.zeros((U.shape[1], Vt.shape[0])) # U.shape[1] -> 768, Vt.shape[0] -> 1024
np.fill_diagonal(Sigma, s) # 대각선 위치에 데이터를 채워줌
# k값 조정으로 화질 변환
linalg.norm(img_gray - U @ Sigma @ Vt)
k = 50
approx = U @ Sigma[:, :k] @ Vt[:k, :]
plt.imshow(approx, cmap="gray")
plt.show()
k = 10
approx = U @ Sigma[:, :k] @ Vt[:k, :]
plt.imshow(approx, cmap="gray")
plt.show()