PCA RGB Images

I am trying to understand how to use PCA to decorate an RGB image in python. I use the code found in the O'Reilly Computer review book:

from PIL import Image
from numpy import *

def pca(X):
  # Principal Component Analysis
  # input: X, matrix with training data as flattened arrays in rows
  # return: projection matrix (with important dimensions first),
  # variance and mean

  #get dimensions
  num_data,dim = X.shape

  #center data
  mean_X = X.mean(axis=0)
  for i in range(num_data):
      X[i] -= mean_X

  if dim>100:
      print 'PCA - compact trick used'
      M = dot(X,X.T) #covariance matrix
      e,EV = linalg.eigh(M) #eigenvalues and eigenvectors
      tmp = dot(X.T,EV).T #this is the compact trick
      V = tmp[::-1] #reverse since last eigenvectors are the ones we want
      S = sqrt(e)[::-1] #reverse since eigenvalues are in increasing order
  else:
      print 'PCA - SVD used'
      U,S,V = linalg.svd(X)
      V = V[:num_data] #only makes sense to return the first num_data

   #return the projection matrix, the variance and the mean
   return V,S,mean_X

I know that I need to smooth the image, but the shape is 512x512x3. Will size 3 reset my result? How to crop it? How to find a quantitative amount of information about saving information?

+4
source share
1 answer

If there are three ranges (this applies to the RGB image), you need to change the image, for example

X = X.reshape(-1, 3)

512x512 X (262144, 3). 3 ; . X /, /.

np.sum(S), . , , , / . , / , , ,

f = S[0] / np.sum(S)
+5

Source: https://habr.com/ru/post/1532661/


All Articles