Frage

Ich suche Algorithmus das folgende Problem zu lösen:

Ich habe zwei Sätze von Vektoren, und ich möchte, um die Matrix zu finden, die am besten angenähert die Transformation von den Eingangsvektoren zu den Ausgangsvektoren.

Vektoren sind 3x1, 3x3 Matrix so ist.

Dies ist das allgemeine Problem. Mein besonderes Problem ist, ich eine Reihe von RGB-Farben haben, und eine andere Gruppe, die die gewünschte Farbe enthält. Ich versuche, eine RGB-zu-RGB-Transformation zu finden, die mir Farben näher an den gewünscht diejenigen geben würde.

Es besteht Übereinstimmung zwischen den Eingangs- und Ausgangsvektoren, so das Berechnen einer Fehlerfunktion, die minimiert werden sollte, ist der einfache Teil. Aber wie kann ich diese Funktion minimieren?

War es hilfreich?

Lösung

Sie nicht angeben, eine Sprache, aber hier sind, wie ich das Problem in Matlab nähern würde.

  • v1 ist ein 3XN Matrix, enthält Ihre Eingabefarben in vertikalen Vektoren
  • v2 ist auch eine 3XN Matrix enthält die Ausgabe Farben

Sie wollen das System lösen

M*v1 = v2
M = v2*inv(v1)

Allerdings ist v1 nicht direkt umkehrbar, da es nicht eine quadratische Matrix ist. Matlab wird diese Lösung automatisch mit dem mrdivide Betrieb (M = v2 / v1), wobei M die beste Lösung Lösung ist.

eg: 
>> v1 = rand(3,10);
>> M = rand(3,3);
>> v2 = M * v1;
>> v2/v1 - M

ans =

   1.0e-15 *

    0.4510    0.4441   -0.5551
    0.2220    0.1388   -0.3331
    0.4441    0.2220   -0.4441

>> (v2 + randn(size(v2))*0.1)/v1 - M
ans =

    0.0598   -0.1961    0.0931
   -0.1684    0.0509    0.1465
   -0.0931   -0.0009    0.0213

Diese gibt eine sprachunabhängig Lösung auf, wie das Problem zu lösen.

Andere Tipps

Dies ist ein klassisches lineares Algebra Problem, das Schlüsselwort „multiple lineare Regression“ zu suchen ist an.

Ich habe einige Variationen dieser oft im Laufe der Jahre Code hatte. Zum Beispiel, um Code ein Digitalisiertablett oder Stylus Touch-Screen verwendet die gleiche mathematische zu kalibrieren.


Hier ist die Mathematik:

Let p sein, ein Eingangsvektor und q die entsprechende Ausgangsvektor.

Die Transformation Sie wollen, ist eine 3x3-Matrix; nennen es A .

Für einen einzelnen Eingangs- und Ausgangsvektor p und q , gibt es einen Fehlervektor e

e = q - A x p

Das Quadrat der Größe des Fehlers ist ein Skalar-Wert:

e T x e = ( q - A x p ) T x ( q - A x p )

(wo der T-Operator ist transponieren).

Was Sie wirklich wollen, zu minimieren, ist die Summe von e Werte in den Sätzen:

E = sum ( e )

Dieses Minimum erfüllt die Matrizengleichung D = 0 wobei

D (i, j) = die partielle Ableitung von E mit Bezug auf A (i, j)

Angenommen, Sie haben N Eingangs- und Ausgangsvektoren.

Ihre Menge von Eingang 3-Vektoren ist eine 3xN Matrix; nennen diese Matrix P . Die i-te Spalte von P ist der i-te Eingangsvektor.

So ist der Satz von Ausgang 3-Vektoren; nennen diese Matrix F .

Wenn Sie durch alle der Algebra mahlen, ist die Lösung

A = Q x P T x ( P x P T ) ^ -1

(wobei ^ -1 ist der inverse Operator - traurig über keine Hoch- oder Tief)


Hier ist der Algorithmus:

Erstellen der 3xN Matrix P aus dem Satz von Eingangsvektoren.

Erstellen der 3xN Matrix Q aus dem Satz von Ausgangsvektoren.

Matrix Multiply R = P x transponiert ( P )

Berechnen Sie die inverseOf R

Matrix Multiply A = Q x Transponierte ( P ) x inverse ( R )

, um die Matrixmultiplikation und Matrixinvertierung Routinen Ihrer Bibliothek für lineare Algebra der Wahl.


Doch , ein 3x3-affine Matrix der Skalierung der Lage ist, zu transformieren und Drehen der Eingangsvektoren, aber nicht zu tun jede Übersetzung! Dies könnte nicht allgemein genug, um für das Problem sein. Es ist normalerweise eine gute Idee, eine „1“ am Ende jeder der 3-Vektoren machen dann einen 4-Vektor, und suchen nach den besten 3x4 anhängen Transformationsmatrix, dass minimiert den Fehler. Dies kann nicht schaden; es kann nur zu einer besseren Anpassung der Daten führen.

Einige linearen Algebra sollten genug sein, um:

Schreiben die durchschnittliche quadrierte Differenz zwischen Ein- und Ausgängen (die Summe der Quadrate der Differenz zwischen jedem Eingang und jedem Ausgangswert). Ich nehme an, dies als Definition des Begriffs „best ungefähre“

Dies ist eine quadratische Funktion Ihrer 9 unbekannten Matrix-Koeffizienten.

Um es zu minimieren, leiten sie in Bezug auf jeden von ihnen.

Sie werden ein lineares System von 9 Gleichungen erhalten Sie lösen müssen, um die Lösung (einmalige oder ein Raum Vielfalt in Abhängigkeit von dem Eingangssatz)

zu bekommen

Wenn die Differenzfunktion nicht quadratisch ist, können Sie das gleiche tun, aber Sie haben ein iteratives Verfahren verwenden, um das Gleichungssystem zu lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top