#show link: it => [#text(blue)[#underline[#it]]]

#set page(
  header: box(width: 1fr, stroke: (bottom: 1pt), outset: (bottom: 3pt), [
  #smallcaps[Bildverarbeitung]
  #h(1fr)
  _Gero Beckmann_
  ]),
  footer: [
  #h(1fr)
  #link("https://source.orangerot.dev/University/bildverarbeitung-etit-cheatsheet")
  ]
)
#set heading(numbering: "1.1")
#show heading: it => [
    Aufgabe #counter(heading).display(): #it.body
]

= Allgemeine Fragen #h(1fr) (20 P)

Wie viele Dimensionen hat eine Farbvalenz? Woher kommt die Repräsentation?
Was sind metamere Farbreize?
Welcher Farbraum eignet sich zur Farbabstandsmessung?

*Abtasttheorem nach Shannon*  
$f_max$ bandbegrenztes Signal aus einer Folge von äquidistanten Abtastwerten 
exakt rekonstruiert werden kann, wenn es mit einer Frequenz von größer gleich 
$2 dot f_max$  abgetastet wurde. 

== Lochkamera

#grid(
  columns: (1fr, 1fr),
  [
    #emph([Vorteile])
    - unendliche Schärfentiefe/dünnes Loch (theoretisch)
  ],
  [
    #emph([Nachteile])
    - wenig Licht zum Sensor; lange Belichtung
    - Loch nicht unendlich dünn $->$ Unschärfescheibchen
    - Beugung an Blende
  ]
)


#grid(
columns: 2,
[
Abbildungsformel $1 / f = 1 / g + 1 / b$

Vergrößerung 
$V = "Bildgröße" / "Objektivgröße" = - b / z_c = - b / g = - f / (g - f) = - 1 / (q / f - 1)$
],
image("res/lense-001.png")
)

#image("res/perspective-001.png")
#grid(
  columns: 3 * (1fr,),
  align: center,
  [entozentrische Perspektive],
  [telezentrische Perspektive],
  [hyperzentrische Perspektive]
)

*Chromatische Aberration*: unterschiedliche Wellenlängen werden unterschiedlich
gebrochen. 
- Linsensystem aus zwei/drei Linsen $->$ Brennpunkte der Wellenlängen stimmen überein
- Spiegeloptiken: Reflexionsgesetz gilt unabhängig der Wellenlänge
- Monochromatisches Licht

#pagebreak()

#grid(
  columns: 2, 
  column-gutter: 2cm,
  [
  *Photometrie*: objektive Größen, Physikalisch \
  *Radiometrie*: subjektive Größen; sichtbares Licht

  *photopisch* (Tag): am besten (MAX) bei 555nm \
  *skotopisch* (Nacht): am besten (MAX) bei 500nm
  ],
  [
  *Rezeptoren Auge*
  - L-Zapfen (Rot-Rezeptoren)
  - M-Zapfen (Grün-Rezeptoren)
  - S-Zapfen (Blau-Rezeptoren)
  - Stäbchen (Licht)
  ]
)

Warum keine Rot-Grün Valenz
Sinnesreize der Zapfen werden zu kombinierten Nervensignalen kombiniert
(Rot-Grün, Blau-Gelb verschmieren)
- R-G Chromanz
- Luminanz
- B-Y Chromanz

*Farbvalenz*: Beschreibung des Farbeindrucks mit 3 Dimensionen

*Metamer*: verschiedene Farbreize (Spektren) mit identischer Farbvalenz (Orange = Rot + Gelb)

#grid(
  columns: 2,
  [
    *Weißpunkt*: $x = y = 1 / 3$

    *Spektralfarbenkurve*: Rad

    *Purpurlinie*: untere Linie

    *additive Mischung*: alle Farben in der konvexen Hülle der zu mischenden Punkte

    *CIELAB* zur Farbabtastung \
    Helligkeit $L^* = root(3, Y)$ \
    $a^*$: Rot-Grün \
    $b^*$: Gelb-Blau
  ],
  image(height: 200pt, "res/color-001.jpg")
)

*CMOS vs CCD*
2 Vorteile + 2 Nachteile

#table(
  columns: (1fr, 1fr),
  table.header([*CMOS*], [*CCD*]),
  [
    Vorteile
    #set list(marker: [+])
    - frei Adressierbar (schnelle Teilbilder)
    - hoher Dynamikbereich
    - geringer Energiebedarf
    - geringe Herstellungskosten
    - hohe Dichte (geringe Baugröße)
  ],
  [
    Vorteile
    #set list(marker: [+])
    - lineare Charakteristik
    - Sättigung
  ], 
  [
    Nachteile
    #set list(marker: [-])
    - Empfindlichkeitsunterschiede in Pixeln (kalibrierbar)
    - Verstärkungsunterschiede in Pixeln (kalibrierbar)
    - hoher Dunkelstrom
  ],
  [
    Nachteile
    #set list(marker: [-])
    - *Blooming*: Überlaufen der Ladung in (vertikalen) Nachbarzellen
    - *Smear*: Belichtung während des Verschieben der Ladung
  ]
)
Dunkelstrom: falsches Bildsignal durch thermisches Rauschen; durch kühlen beheben

#pagebreak()

*Histogramm-Spreizung*

#align(center, image(
height: 80pt,
"res/histogramm-001.jpg"
))

Histogramm ausreichen, zeichnen

$ 
hat(P)_i = 1 / "MN" sum^(M-1)^(m=0) sum^(N-1)_(n=0) delta^(q_i)_(g_"mn"), 
i=0,...,K-1
"Kronecker-Delta: " delta^b_a := cases(1 "für" a = b, 0 "für" a != b)
$

Histogramm-Spreizung Formen 
$gamma(g) = (g - g_min) (q_(k-1) - q_0) / (g_max - g_min) + q_0$, 
$gamma(g_min) = q_0, gamma(g_max) = q_(K-1)$

*Radon-Transformation* (finde geradenhafte Strukturen; Winkel $phi$ = x, Distanz u = y)

#pad(bottom: 15pt, align(center,grid(
  columns: 2,
  rows: 100pt,
  column-gutter: 40pt,
  figure(image("res/hough-001.jpg"), caption: [Originalbild]),
  figure(image("res/hough-002.jpg"), caption: [Hough-Transformation])
)))

$ 
g(u, phi) = R{g(x)} := integral.double^inf_inf g(x) delta(x^T e_phi - u) dif x 
"         ,mit" phi in [0, pi), u in R, e_phi = vec(cos phi, sin phi)
$

Integrationsgerade $phi$-Gerade:
$delta(x^T e_phi - u) = cases(inf "für" x^T e_phi - u = 0, 0 "für" x^T e_phi - u != 0)$
sorgt dafür, dass Bildwerte längs Geraden mit Parametern u (Ursprungsabstand)
und $phi$ (Winkel) aufintegriert werden. 

Enthält $g(x)$ eine $delta$-Gerade $delta(v^T u_phi_0 - u_0)$, so zeigt $g(u,
phi)$ ein ausgeprägtes Maximum bei $phi = phi_0, u = u_0$

*Hough-Transformation* Radon-Transformation für Binärbilder

Für jeden gesetzten Bildpunkt $g(x) = 1$ wird die Geradengleichung $x^T e_phi - u = 0$
ausgewertet: \ $u = x^T e_phi = x cos phi + y sin phi$

#set box(inset: 4pt)

#grid(
  columns: 3 * (1fr,),
  grid(
    columns: 5,
    box[ ], box[2], rect[1], rect[0], rect[0],
    box[y], box[1], rect[0], rect[1], rect[0],
    box[ ], box[0], rect[0], rect[0], rect[1],
    box[ ], box[ ], box[0], box[1], box[2],
    box[ ], box[ ], box[ ], box[x], box[ ],
  ),
  table(
    columns: 5,
    table.header([$x$ \\ $phi$], $0$, $pi / 6$, $pi / 3$, $pi / 2$),
    $(2,0)^T$, $2$, $2$, $1$, $0$,
    $(1,1)^T$, $1$, $1$, $1$, $1$,
    $(0,2)^T$, $0$, $1$, $2$, $2$
    ),
  grid(
    columns: 6,
    box[ ], box[3], rect[0], rect[0], rect[0], rect[0],
    box[ ], box[2], rect[1], rect[1], rect[1], rect[1],
    box[y], box[1], rect[1], rect[2], rect[2], rect[1],
    box[ ], box[0], rect[0], rect[0], rect[0], rect[1],
    box[ ], box[ ], box[0], box[$pi/6$], box[$pi/3$], box[$pi/2$],
    box[ ], box[ ], box[ ], box[x], box[ ], box[ ]
  ),
)

#v(-1cm)
*Karhunen-Loève-Transformation* \
(reduziere Korrelation zwischen Kanälen zu einem mit viel Information)
- Schätzung der Kovarianzmatrix $C_"gg"$ der Farbwerte
- Lösung des Eigenwertproblems
- zeilenweise Anordnung der Eigenvektoren in absteigender Reihenfolge der
  Eigenwerte $A$
- Subtraktion des mittleren Farbwertes und Transformation $k = A(g - mu_g)$


// #image(height: 5cm, "res/morphologie-001.png")
// Rand-Extraktion: $G without (G minus.circle S)$

#page(
  header: none,
  footer: none,
  margin: (y: 15pt)
)[
= Bilder zuordnen #h(1fr) (20 P)
#grid(
  columns: (1fr, 1fr),
  column-gutter: 40pt,
  table(
    image("res/images-001.png"),
    [Schwellenwert (Binarisierung)],
    [$ cases(1 "für" g(x) > gamma, 0 "sonst") $]
  ),
  table(
    image("res/images-002.png"),
    [Invertierung],
    [$ max(g(x)) - g(x)$]
  ),
  table(
    image("res/images-003.png"),
    [Betragsspektrum],
    [$abs(integral.double g(x) e^(-j 2 x f^T x) dif x )$]
  ),
  table(
    image("res/images-004.png"),
    [Verrauschung (additiv, normalverteilt)],
    [$ g(x) + e(x), e(x) ~ N(0, sigma^2)$]
  ),
  table(
    image("res/images-005.png"),
    [Radon-Transformation],
    [$integral.double g(x) delta(x^T e_phi - u) dif x$]
  ),
  table(
    image("res/images-006.png"),
    [Verschärfung],
    [$4 dot g(x) - 3 dot "TP"{g(x)}$]
  ),
  table(
    image("res/images-007.png"),
    [Laplacian-of-Gaussian],
    [$-Delta("TP"{g(x)})$]
  ),
  table(
    image("res/images-008.png"),
    [homomorphe Filterung],
    [$exp("HP"{ln(g(x))})$]
  ),
  table(
    image("res/images-009.png"),
    [Gradientenbetrag],
    [$sqrt(((partial g(x))/(partial x))^2 + ((partial g(x))/(partial y))^2)$]
  ),
  table(
    image("res/images-010.png"),
    [Fensterung (mit Hann-Fenster)],
    [$g(x) dot w_"Hann"(x)$]
  ),
  )
  ]

= Filterung #h(1fr) (10 P)

= Lichtschnittverfahren / Triangulation #h(1fr) (30 P)

Wie muss Oberfläche beschaffen sein, damit Triangulation berechnet werden kann?

#grid(
  columns: 2,
  [
*Spiegelnde Oberfläche*: Kein Licht gelangt auf den Sensor

*Teiltransparentes Objekt* (Volumenstreuung)
- Aufweitung des Lichtpunkts
- Messunsicherheit steigt

*Abschattung des Beobachtungsstrahls*: Kein Licht gelangt auf den Sensor

*Mehrfachreflexion bei teilspiegelndem Objekt*: Zusätzliche, falsche Messpunkte
  ],
  image(height: 7cm, "res/triangulation-001.jpg")
)


#grid(
  columns: 2,
  column-gutter: 1cm,
  pad(top: .5cm)[

*Hellfeld*: Gerichtetes Licht, das (bei fehlerfreiem Objekt) direkt in die Kamera gelenkt wird

*Dunkelfeld*: Gerichtetes Licht, das (bei fehlerfreiem Objekt) an der Kamera vorbei gelenkt wird

*Rotkanal*: koaxiale Hellfeldbeleuchtung, liefert Transmission

*Grünkanal*: streifende Beleuchtung in Dunkelfeldanordnung 
macht streuende Partikel auf der Oberfläche sichtbar

*Blaukanal*: Dunkelfeld, macht Kratzer, Fusseln und Blasensichtbar

],
  image(
  height: 6cm,
  "res/dunkelfeld-001.jpg"
  )
)

#grid(
  columns: 2,
  [
    $
      B_1 / b = (a / 2 - G) / g, - B_2 / b = (a / 2 + G) / g
    $
    Daraus erhält man die Disparität (Parallaxe): 
    $
      p := B_1 - B_2 = (a b) / g
    $
  ],
  image("res/stereo-001.png")
)

Zeichne Lichtschnittverfahren

Maßnahmen gegen Störlichtunterdrückung
- Abdunkeln
- Monochromatisches Licht
- Referenzaufnahme des Störlichts

