User:Carsten Milkau~enwiki/Martina

Faltungsoperator
Definition im Raum $$L_2(\mathbb R)$$:
 * $$(f \ast g)(t) = \int_{\mathbb R} f(t - \tau) \cdot g(\tau) \, d\tau$$

Gaußscher Weichzeichner ($$b_{i,j}$$ Einträge der gefalteten, $$a_{i,j}$$ Einträge der ursprünglichen Bildmatrix)
 * $$b_{ij} = \frac{1}{2 \pi \sigma^2} \sum_{k,\ell} e^{-\frac{(i-k)^2 + (j-\ell)^2}{2\sigma^2}} a_{k,\ell}$$

Matrixdarstellung des Faltungsoperators:
 * $$A_{\mathrm{nummer}(i,j), \mathrm{nummer}(k,\ell)} = \frac{1}{2 \pi \sigma^2} e^{-\frac{(i-k)^2 + (j-\ell)^2}{2\sigma^2}} $$

Spaltenschreibweise (Quasistandard)
$$ \begin{pmatrix} y_1 \\ \vdots \\ y_m \end{pmatrix} = \begin{pmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & & \vdots \\ a_{m1} & \cdots & a_{mn} \end{pmatrix} \begin{pmatrix} x_1 \\ \vdots \\ x_n \end{pmatrix} \text{ entspricht } \begin{matrix} y_1 &=& a_{11}x_1 & + \cdots + & a_{1n}x_n \\ \vdots & \vdots & \vdots && \vdots \\ y_m &=& a_{m1}x_1 & + \cdots + & a_{mn}x_n \end{matrix} $$

Zeilenschreibweise
$$ \begin{pmatrix} y_1 & \cdots & y_m \end{pmatrix} = \begin{pmatrix} x_1 & \cdots & x_n \end{pmatrix} \begin{pmatrix} a_{11} & \cdots & a_{m1} \\ \vdots & & \vdots \\ a_{1n} & \cdots & a_{mn} \end{pmatrix} \text{ entspricht } \begin{matrix} y_1 &=& a_{11}x_1 & + \cdots + & a_{1n}x_n \\ \vdots & \vdots & \vdots && \vdots \\ y_m &=& a_{m1}x_1 & + \cdots + & a_{mn}x_n \end{matrix} $$

(beides laut Definition Matrixmultiplikation)

Fall mit einem falschen Kanal (Würfelseitenflächen)
\begin{pmatrix} n_{11} & n_{12} & n_{13} \\ n_{21} & n_{22} & n_{23} \\ n_{31} & n_{32} & n_{33} \end{pmatrix} =_{def} M^{-\top} \cdot M^{-1} $$ \mathbf{n}_R =_{def} \begin{pmatrix} 1,& \frac{n_{12}}{n_{11}},& \frac{n_{13}}{n_{11}}\end{pmatrix} = \frac{1}{n_{11}} (n_{11}, n_{12} , n_{13}) $$ \mathbf{n}_G =_{def} \begin{pmatrix} \frac{n_{21}}{n_{22}},& 1,& \frac{n_{23}}{n_{22}}\end{pmatrix} = \frac{1}{n_{22}} (n_{21}, n_{22} , n_{23}) $$ \mathbf{n}_B =_{def} \begin{pmatrix} \frac{n_{31}}{n_{33}},& \frac{n_{32}}{n_{33}} ,& 1\end{pmatrix} = \frac{1}{n_{33}} (n_{31}, n_{32} , n_{33}) $$ $$\mathbf{n}_R,\mathbf{n}_G,\mathbf{n}_B$$ sind deine drei "Korrekturvektoren". In Pseudocode sind sie so anzuwenden: if R < 0: RGB -= R*n_R if R > 255: RGB -= (R-255)*n_R if G < 0: RGB -= G*n_G if G > 255: RGB -= (G-255)*n_G if B < 0: RGB -= B*n_B if B > 255: RGB -= (B-255)*n_B Die Reihenfolge ist zwar beliebig, aber es ist wichtig, das die Operationen nacheinander angewendet werden, weil jede Operationen alle drei Komponenten verändert. Es handelt sich dabei um eine "schiefe Projektion" auf die Seitenflächen (bzw. Kanten/Ecken) des RGB-Würfels, im Gegensatz zur senkrechten Projektion, die entsteht, wenn man jeweils nur die betroffene Komponente ändert (also n_R = (1,0,0) usw.). Diese "schiefe Projektion im RGB-Raum" entspricht aber einer senkrechten Projektion im LMS-Raum auf die Seitenflächen des „schiefen Quaders“ (Spates). Tatsächlich sind sie entstanden, in dem ich die Normalen des RGB-Würfels (also (1,0,0), (0,1,0) und (0,0,1), zusammen die Identitätsmatrix) so in den LMS-Raum transformiert habe, dass sie senkrecht auf den Würfelflächen bleiben (Multiplikation mit $$M^{-\top}$$ von rechts) und anschließend so in den RGB-Raum zurücktransformiert habe, dass sie sich wir Punktdifferenzen verhalten (Multiplikation mit $$M^{-1}$$ von rechts). Danach habe ich sie noch so normalisiert, dass sie in ihrer Stammkomponente jeweils eine 1 stehen haben, was die Korrektur erleichtert. So erhalte ich Vektoren, die zwar "schief" im RGB-Raum sind, aber Senkrechten im LMS-Raum entsprechen. Übrigens: wenn M Winkel erhalten würde, würden für $$\mathbf{n}_R,\mathbf{n}_G,\mathbf{n}_B$$ wieder die Einheitsvektoren (1,0,0), (0,1,0) und (0,0,1) herauskommen, und dann wäre Korrektur in RGB und LMS identisch. Ist aber leider nicht so (der Spat ist wirklich schief) =)

Allgemeiner Fall
Zunächst ermitteln wir wieder die RGB-Werte ganz normal aus den LMS-Werten durch Lösung des Gleichungssystems
 * $$(1) \qquad c_{LMS} = c_{RGB} \cdot M$$.

Jetzt ermitteln wir, welche Farbkanäle korrigiert werden müssen, d.h. wir sehen nach welche Farbkanäle nicht im Bereich 0..255 liegen. Wir betrachten nun das äquivalente Gleichungssystem
 * $$(2) \qquad c_{LMS} \cdot M^\top = c_{RGB} \cdot M \cdot M^\top$$.

Der Wesentliche Unterschied ist, dass hier die beiden verglichenen Vektoren nicht mehr im LMS-Raum liegen. Tatsächlich liegen sie im Dualraum des RGB-Raumes (RGB*), anders ausgedrückt entsprechen sie Koordinaten in der Basis $$\mathbf{n}_R,\mathbf{n}_G,\mathbf{n}_B$$ von oben. Der Vorteil: wenn wir bspw. die G-Koordinate korrigieren müssen, dann brauchen wir die $$\mathbf{n}_G$$-Koordinate nicht mehr einhalten (was wir auch im ersten Abschnitt nicht tun, da wir wie man sieht in dieser Richtung verschieben). Deshalb können wir die zweite Spalte aus dem Gleichungssystem $$(2)$$ durch die schlichte Gleichung G = 0 bzw. G = 255 ersetzen: d.h. der zweite Eintrag von $$c_{LMS} \cdot M^\top$$ wird durch 0 bzw. 255 und die zweite Spalte von $$M \cdot M^\top$$ wird durch $$\begin{pmatrix}0 \\ 1 \\ 0\end{pmatrix}$$ ersetzt. Wir erhalten ein neues Gleichungssystem
 * $$(3) \qquad c_{RGB^*} = c_{RGB} \cdot A$$,

dessen (eindeutige) Lösung $$c_{RGB}$$ den gesuchten korrigierten RGB-Werten entspricht. Für den Fall, dass nichts zu korrigieren ist, bleibt (3) identisch zu (2) und wir erhalten dieselbe Lösung wie in (1). Für den Fall, dass alle Farbkanäle zu korrigieren sind, wird $$A=I$$ und wir erhalten einfach die "in RGB" korrigierten Werte $$c_{RGB^*}$$ als Lösung (das sind die Ecken des Würfels, da ist das Ergebnis dasselbe, ob in LMS oder RGB korrigiert, weil man einfach den nächstgelegenen Eckpunkt nimmt). Für den Fall, dass genau ein Farbkanal zu korrigieren ist, ist die Lösung dieselbe wie im ersten Abschnitt, was aber wahrscheinlich nicht ganz offensichtlich ist ^^° Im Falle zweier zu korrigierenden Farbkanäle klappt es ebenfalls, hier werden zwei Spalten des Gleichungssystems ersetzt – geometrisch entspricht dass einer senkrechten Projektion auf eine Spat-Kante im LMS-Raum.