PCA-RGB-Bild
Ich versuche, herauszufinden, wie man die PCA auf decorrelate ein RGB-Bild in python.
Ich bin mit dem code, der sich in der O ' Reilly Computer vision Buch:
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
Ich weiß, ich benötigen Sie zu glätten mein Bild, aber die Form ist 512x512x3. Wird die dimension 3 zu werfen ab mein Ergebnis? Wie kann ich die kürzen das?
Wie finde ich eine quantitative Zahl, wie viel Informationen erhalten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es drei bands (das ist der Fall bei einem RGB-Bild), die Sie benötigen, um umzugestalten Ihr Bild wie
In Ihrem Fall von einem 512x512-Bild, die neue
X
haben Form(262144, 3)
. Die dimension von 3 wird nicht werfen Sie aus Ihrem Ergebnis, dass dimension stellt die features in den Bilddaten Platz. Jede Zeile derX
ist ein Beispiel/Beobachtung und jede Spalte stellt eine variable/Funktion.Den gesamten Betrag der Abweichung in dem Bild ist gleich
np.sum(S)
, das ist die Summe der Eigenwerte. Die Höhe der Abweichung, die Sie beibehalten wird, hängt davon ab, welche Eigenwerte/Eigenvektoren, die Sie behalten. Also, wenn Sie nur die ersten Eigenwert - /Eigenvektor, dann ist der Anteil der Bild Varianz behalten Sie gleich