.Wie berechne ich eine abgeschnittene Summe Approximation?
Ich bin ein Bild zu machen, konvertieren Sie es in einen Satz von 3 Matrizen mit imread()
, dann berechnen Sie eine abgeschnittene Summe Annäherung an jede Matrix mit N=1,2,3,4,8,16,32,64,128
Begriffe. Ich habe die Matrizen, aber ich bin nicht wirklich sicher über diesen letzten Teil und das Lesen ist ein bisschen vage. Was meinen sie mit einer abgeschnittenen Summenapproximation?
aktualisieren basierend auf einer gegebenen Antwort:
Ich habe versucht, die folgenden:
A = double(imread("image.jpg"))/255;
[U1, S1, V1] = svd(A(:,:,1));
[U2, S2, V2] = svd(A(:,:,2));
[U3, S3, V3] = svd(A(:,:,3));
N = 128;
trunc_image = (U1(1:763,1:N)*S1(1:N,1:N)*V1(1:N,1:691))*255;
imwrite(trunc_image, "truncimg.jpg", "jpg");
... aber das resultierende Bild sieht wie folgt aus:
Statt alle singulären Werte aus dem [ 'svd'] verwenden (http://www.mathworks.com/help/ matlab/ref/svd.html) des Bildes verwenden Sie nur die größten (ich nehme in absoluten Werten an) die von * der * größten zu der (laut Ihrer Liste) 128 größten Werte. – TroyHaskin
@TroyHaskin was meinst du? Was kann ich diese Werte * für * – whatwhatwhat
Das Bild, das alle Informationen hat: die Matrix Form des Bildes 'A' über eine SVD zerlegt werden kann, und die Summe' sigma_k * u_k * v_k.'' ist genau das 'A '. Aber Sie können "A" approximieren, indem Sie nur die größten Einzelwerte addieren, anstatt alle. Und wenn "N" (die Anzahl der Terme in der Approximation) kleiner ist als "R" (die Gesamtzahl der singulären Werte), können Sie eine gute Annäherung mit viel weniger Berechnung erhalten. – TroyHaskin