Zum Inhalt

Bildfilter

Bildbearbeitung ist die Veränderung von Fotos, Negativen, Dias oder digitalen Bildern. Sie ist zu unterscheiden von der Bildverarbeitung, mit deren Hilfe die Inhalte von Bildern verarbeitet werden. Oft wird die Bildbearbeitung dazu angewandt, um Fehler zu beseitigen, die beim Fotografieren oder anderen Bilderfassungen entstehen können. Dazu gehören beispielsweise Über- und Unterbelichtung, Unschärfe, Kontrastschwäche, Bildrauschen oder Rote-Augen-Effekt. Durch diese Fehler wirken Bilder oft zu dunkel, zu hell, zu unscharf oder anderweitig mangelhaft.

Digitale Bilder kann man als zweidimensionales Array von Farbinformationen speichern. Durch Manipulation der Farbinformation oder durch Änderung der Positionen im Array können verschiedene Bildbearbeitungsoperationen realisiert werden.

Digitale Bilder bestehen aus diskreten Pixeln, die Helligkeits- oder Farbwerte repräsentieren. Bildfilter sind algorithmische Verfahren, die diese Werte verändern, um gewünschte visuelle Effekte zu erzeugen.

  • Filteralgorithmen verarbeiten Pixelwerte nach bestimmten mathematischen Regeln:
    • Punktoperationen: Jedes Pixel wird unabhängig von seinen Nachbarn verändert (z. B. Kanaltausch)
    • Lokale Operationen: Benachbarte Pixel werden berücksichtigt (z. B. Weichzeichnen, Kantenfilter)
    • globale Operationen: ganzes Bild wird miteinbezogen

Farbbild zu Graustufen

Viele der Algorithmen zur digitalen Bildbearbeitung sind leichter an Graustufen-Bildern nachzuvollziehen. Daher sollte es möglich sein, aus einem Farbbild ein Graustufen-Bild zu berechnen.

Im RGB-Farbmodell muss man aus den drei Farbkomponenten einen Graustufenwert zwischen 0 und 255 ermitteln. Diesen weist man dann allen Farbkomponenten zu. Um den Graustufenwert zu ermitteln, kann man verschiedene Möglichkeiten verwenden, die zu unterschiedlichen Ergebnissen führen. Je nach Anwendungsbereich können aber alle sinnvoll sein.

  • Minimum oder Maximum der einzelnen Farbkomponenten.
  • Durchschnitt der Farbkomponenten:
  • Natürlicher Eindruck: Unser Auge beurteilt die Helligkeit der einzelnen Farben unterschiedlich, da die Empfindlichkeit der Sinneszellen für die drei Wellenlängen und die Anzahl der Sinneszellen für die einzelnen Farben (z. B. nur 2% erkennen Blau) unterschiedlich ist. Um diesem Rechnung zu tragen, kann man folgende Formel verwenden:

  • Grauwert = 0.299 × Rotanteil + 0.587 × Grünanteil + 0.114 × Blauanteil

Bilderbearbeitung mit Python

Wir kennen nun die passende Datenstruktur, um Bilder zu bearbeiten, nämlich ein Array von Pixeln. Um die räumliche Struktur von einem Bild zu behalten, eignet sich ein 2D-Array besonders gut. Wir wollen nun mit Python ein Bild bearbeiten. Dabei wandeln wir ein Farbbild in ein Graustufenbild um. Dafür verwenden wir eine Programmierbibliothek von Python zur Bildbearbeitung.

Beispiel 1: Bilder mit Python

Wenn wir z.B. drei verschiedene Farben nacheinander zum Zeichnen verwenden wollen:

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.
Question

Ändere ein paar weitere Pixel.

Beispiel 2: Alle Pixel ändern

Wenn wir nun alle Pixel ändern wollen, brauchen wir eine Schleife. Das folgende Programm addiert zu jedem Farbkanal den Wert 40. Was passiert? Ändere die Variable konstante zu positiven oder negativen Zahlen.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.

Graustufen mit Python

Nun wollen wir einmal versuchen das farbige Bild in ein Graustufenbild umzuwandeln. Dazu können wir die folgende Formel anwenden: - Grauwert = 0.299 × Rotanteil + 0.587 × Grünanteil + 0.114 × Blauanteil Wir geben allen Kanälen den gleichen Grauwert.

Question

Ändere das Farbige Bild in ein Graustufenbild um, mit der Formel: Grauwert = 0.299 × Rotanteil + 0.587 × Grünanteil + 0.114 × Blauanteil

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.

Farbanpassungen

Die Umwandlung der Bilder in Graustufen- oder Schwarz-Weiß-Bilder ist eine erste Form der Farbanpassung. In der Regel werden Farbanpassungen aber durchgeführt, um die Qualität der Bilder zu verbessern. Es gibt z. B. auch Bildfilter, welche direkt auf den Farbkanälen operieren.

Farbkanäle tauschen

Tauscht man die Intensitäten der einzelnen Farbkomponenten kann man auch schöne Effekte erreichen.

Question

Versuche einmal die ganzen Farbkanäle zu tauschen. Also dort wo ursprünglich z. B. Blau war, wird es jetzt Rot sein usw.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.

Allgemeine Farbanpassung

Um eine Verbesserung der Bildqualität im RGB-Farbraum nach optischer Einschätzung vornehmen zu können, können die einzelnen Farbkomponenten mit jeweils mit einem eigenen Faktor multipliziert werden, den der Benutzer wählt. Dies führt zu einer Verstärkung oder Abschwächung einzelner Komponenten.

Question
  • Reduziere den Blauanteil des Bilds in dem du den Blauenkanal mit 0.7 multiplizierst.
  • Beschreibe die Wirkung

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.

Weichzeichnen

Beim Weichzeichnen ist das Ziel, starke Schwankungen in der Intensität auszugleichen. Dadurch verschwimmen feine Strukturen

Question
  • Variiere den Parameter von BoxBlur.
  • Beschreibe die Wirkung.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.

Bonus

Question
  • Was macht dieses Programm?

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013öesuhftlv16gn[dbcpmoari=]/yzL,45 2050p0c0h0v0x0i0d0H0r0i0v0d0d0y010h0x0s010406050d0e0t0t0v0w0B040D0b0*0n0m050A0*0,0.0:0(0s0405110`140A110(0p0x0j0R0T0V0X0f0x0m0f0i1i0f0h0$050M0q0i0c1d0U0W011h1j1l1j0h1r1t1p0h0w120h0f0R0u0P0s0v0n0X0I011v1f010g0O0c0n0v0t0c1p0d1P0n1V1x1Y1t1#1%0$0a0H0=0@0m0d0j0u0w0d0r1k0v0_0{1+120A1K271H1J1I1q0p1-0X1l0n1!0u0d1p1a1c0S1w2h0x2j0n0u2o1p0s0w0c121*1Q272D0n2C1+2g012v0w0-0i0$0k0`2G272z2B0`2o2a0p1J2f2q1W0r2w1(122Y132A2I2E2S26052)0K2:1,2%1x0n0$0C0v1k1!2=2E0H0)2J2|0X0u0$0y342H362G2K0#040o3e2`2K0t0x0$0F3m371Q3i0$0E3m3g381e1x3p0$0G3t3h39013j3y25353u2{3C0X3E040l3H3B2r3K0$0z3m0(0A2^2W172/2X1b2Z2a2d280v1s3*2Y3%0K0M0O0d04.