CoreImage: Filter und Bildverarbeitung

Autor: IT Sectr Veröffentlicht: 2026-05-06 Lesezeit: 9 Min.

CoreImage ist ein Apple-Framework für Echtzeit-Bild- und Videoverarbeitung, das Dutzende integrierter CIFilter für Farbkorrektur, Unschärfe, Texturüberlagerungen und Erkennung bereitstellt. Laut Apple-Dokumentation verwendet CoreImage die GPU für hochleistungsfähige Pixelverarbeitung auf iOS-Geräten. Das Framework unterstützt CIImage als unveränderliches Bildobjekt und Filterketten zur Komposition von Effekten ohne Qualitätsverlust.

Wichtige Punkte

  • CoreImage — Apple-Framework für GPU-beschleunigte Bild- und Videoverarbeitung auf iOS und macOS
  • CIFilter — grundlegender Baustein mit über 200 integrierten Effekten und Unterstützung für benutzerdefinierte Metal-Shader
  • CIImage — unveränderliches Objekt, das ein Bild in der CoreImage-Pipeline ohne Bindung an ein bestimmtes Format darstellt
  • CIDetector — Komponente zur Erkennung von Gesichtern, Text, QR-Codes und Rechtecken in einem Bild
  • GPU-Verarbeitung — CoreImage verwendet automatisch Metal oder OpenGL für parallele Berechnungen auf der GPU

Was ist CoreImage

CoreImage ist ein Apple-Framework für Rasterbild- und Videoverarbeitung, erstmals eingeführt in macOS 10.4 Tiger und portiert auf iOS 5.0. Im Gegensatz zu Core Graphics oder UIKit arbeitet CoreImage auf Pixelshader-Ebene und nutzt die GPU für parallele Berechnungen. Dies ermöglicht die Anwendung komplexer Effekte — Unschärfe, Farbkorrektur, Morphing — auf Bilder mit Megapixel-Auflösung in Millisekunden.

Die Architektur von CoreImage basiert auf dem Konzept der verzögerten Auswertung (Lazy Evaluation): CIFilter führt keine Verarbeitung bis zum Rendern im CIContext durch. Der Entwickler baut eine Kette aus mehreren CIFiltern auf, verbindet die Ausgabe eines Filters mit der Eingabe eines anderen, und erst der render-Aufruf startet die vollständige GPU-Pipeline. Dies minimiert die Anzahl der Durchläufe durch die Grafikkarte und erhält die Leistung.

CoreImage unterstützt breiten Farbraum (P3, sRGB, lineares sRGB), HDR-Bilder und die Arbeit mit 16-Bit- und 32-Bit-Pixelformaten. Auf Geräten mit Neural Engine kann CoreImage GPU-Shader mit Core ML für intelligente Verarbeitung kombinieren — zum Beispiel automatische Farbkorrektur basierend auf maschinellem Lernen, wie in der Fotos-App auf iOS 17 implementiert.

CoreImage-Architektur: CIImage, CIFilter, CIContext

Drei Hauptklassen bilden den Kern von CoreImage: CIImage (Daten), CIFilter (Operation) und CIContext (Ausführungsumgebung). Jede Klasse ist für ihre eigene Pipeline-Phase verantwortlich und vermischt keine Zuständigkeiten.

CIImage — unveränderliche Quelle

CIImage ist ein leichtgewichtiges Objekt, das ein Bild beschreibt, aber nicht direkt Pixeldaten enthält. Es kann aus UIImage, CGImage, Metal-Textur, GL-Textur oder einer Datei auf der Festplatte erstellt werden. CIImage ist unveränderlich — jede Filteranwendung erzeugt ein neues CIImage, ohne das Original zu verändern. Dies ermöglicht den Aufbau von Transformationsketten ohne Datenkopien zwischen den Schritten.

Eine wichtige Eigenschaft: CIImage ist bis zum Rendern nicht an Bildschirmauflösung oder Farbraum gebunden. Dasselbe CIImage kann in ein UIImage für den Bildschirm und in eine TIFF-Datei für den Druck mit unterschiedlichen Parametern gerendert werden — CoreImage passt die Verarbeitung automatisch an den Zielkontext an.

CIFilter — Verarbeitungsoperation

CIFilter ist die Hauptklasse zum Anwenden von Effekten. Jeder CIFilter ist ein Shader-Programm mit Eingabeparametern (inputImage, inputIntensity, inputRadius, usw.) und einem Ausgabebild. Apple liefert über 200 integrierte CIFilter, gruppiert nach Kategorien: CICategoryColorEffect (Farbkorrektur), CICategoryBlur (Unschärfe), CICategoryStylize (Stilisierung), CICategoryGeometryAdjust (geometrische Transformationen).

Um einen benutzerdefinierten CIFilter zu erstellen, schreibt der Entwickler einen Metal-Shader (CIKernel) — einen Fragment-Shader in der Metal Shading Language, der jedes Pixel unabhängig verarbeitet. Nach der Kompilierung wird der Shader als Unterklasse von CIFilter registriert und kann in Ketten zusammen mit Apples integrierten Filtern verwendet werden.

KategorieBeispielfilterZweck
ColorEffectCIColorControlsHelligkeit, Kontrast, Sättigung
BlurCIGaussianBlurGaußsche Unschärfe mit einstellbarem Radius
StylizeCIPixellatePixelisierung mit festgelegtem Maßstab
GeometryAdjustCIAffineTransformDrehung, Skalierung, Verschiebung über affine Matrix
CompositeCISourceOverCompositingBildkomposition mit Alphakanal

CIContext — Rendering-Umgebung

CIContext ist ein schwergewichtiges Objekt, das die GPU-Ressourcenzuweisung, Shader-Kompilierung und Pufferung verwaltet. Das Erstellen eines CIContext ist eine teure Operation, daher empfiehlt Apple, ihn einmal pro Anwendungslebenszyklus zu erstellen und wiederzuverwenden. Der Kontext ist an eine bestimmte GPU (Metal, OpenGL) oder CPU gebunden und bestimmt den Farbraum des Ausgabebildes.

CIFilter: integrierte Filter und benutzerdefinierte Metal-Shader

Die CIFilter-Bibliothek erweitert sich ständig: iOS 17 fügte neue Filter für HDR-Verarbeitung und maschinelles Lernen hinzu. Alle integrierten Filter sind in der Apple Developer Documentation dokumentiert und können nach Kategorien oder Namen durchsucht werden. Um verfügbare Filter auf dem Gerät zu entdecken, verwenden Sie CIFilter.filterNames(inCategory:).

Kette mehrerer Filter

Die Hauptfähigkeit von CoreImage ist die Komposition mehrerer CIFilter zu einer Kette. Die Ausgabe eines Filters wird über den Parameter inputImage der Eingabe eines anderen zugeführt. CoreImage optimiert die Kette in der Rendering-Phase: benachbarte Filter, die im selben Farbraum arbeiten, werden zu einem einzigen GPU-Durchlauf (Kernel-Fusion) kombiniert. Dies bringt einen Leistungsgewinn ohne Eingriff des Entwicklers.

Benutzerdefinierte Filter über CIKernel

Um einen benutzerdefinierten Effekt zu erstellen, schreibt der Entwickler eine Metal-Funktion mit der [[kernel]]-Annotation. Die Funktion empfängt Pixelkoordinaten und gibt eine Farbe zurück. CoreImage übergibt den Shader an die GPU, wo er parallel für alle Pixel des Bildes ausgeführt wird. Benutzerdefinierte Filter sind besonders nützlich für einzigartige visuelle Effekte: Sepia mit nichtlinearer Kurve, Dispersionsunschärfe oder Filmkornsimulation.

metal
#include <CoreImage/CoreImage.h>

[[kernel]] float4 customFilter(sample_t s, float intensity) {
    float4 result;
    result.rgb = s.rgb * (1.0 - intensity) + s.r * intensity;
    result.a = s.a;
    return result;
}

Leistung und Caching

CoreImage verwaltet automatisch den Cache für Zwischenergebnisse. Wenn dieselbe Filterkette auf verschiedene Bilder angewendet wird, kann CoreImage kompilierte Shader wiederverwenden. Für maximale Leistung vermeiden Sie es, einen CIContext pro Frame zu erstellen — verwenden Sie einen Kontext und setzen Sie die Eingabeparameter des Filters zurück.

CIDetector: Gesichts-, Text- und Objekterkennung

CIDetector ist ein Subsystem von CoreImage zur Erkennung semantischer Objekte in einem Bild ohne Verwendung von Vision oder Core ML. CIDetector unterstützt vier Erkennungsarten: Gesichter (CIDetectorTypeFace), Text (CIDetectorTypeText), QR-Codes (CIDetectorTypeQRCode) und Rechtecke (CIDetectorTypeRectangle). Der Detektor arbeitet auf der CPU mit Optimierung für NEON-Instruktionen, was eine stabile Geschwindigkeit auf Geräten ohne leistungsstarke GPU gewährleistet.

Gesichtserkennung

Der Gesichtsdetektor CIDetectorTypeFace gibt ein Array von CIFaceFeature mit Gesichtsgrenzkoordinaten, Augen- und Mundpositionen zurück. Seit iOS 12 erkennt CIDetector auch Lächeln (hasSmile) und die Position des linken/rechten Auges (leftEyeClosed, rightEyeClosed). Die Erkennungsgenauigkeit ist für die meisten AR- und Fotoanwendungen ausreichend, aber für kritische Szenarien empfiehlt Apple Vision.framework.

Rechteckerkenung

CIDetectorTypeRectangle findet rechteckige Bereiche in einem Bild — Dokumente, Visitenkarten, Gerätebildschirme. Der Detektor gibt CIRectangleFeature mit vier Punkten zurück, die die Rechteckkontur bilden. Laut WWDC 2024 verwendet der Rechteckdetektor dieselbe neuronale Netzwerkarchitektur wie Vision, jedoch mit geringerem Speicherverbrauch. Dies macht ihn bevorzugt für die Echtzeit-Frame-Stream-Verarbeitung, zum Beispiel in Dokumentenscanner-Anwendungen.

Codebeispiele: Filter und Erkennung in Swift

Praktische Beispiele helfen, das Verständnis von CoreImage zu festigen. Betrachten wir zwei typische Szenarien: Anwenden eines Farbfilters auf ein Foto und Gesichtserkennung mit Zeichnen eines Begrenzungsrahmens.

Sepia auf ein Bild anwenden

Ein grundlegendes Beispiel des CISepiaTone-Filters, der ein Farbbild in Sepiatöne umwandelt. Der Filter akzeptiert den Parameter inputIntensity von 0 (Original) bis 1 (maximaler Effekt). Beachten Sie die verzögerte Auswertung: Das von filter.outputImage zurückgegebene CIImage enthält keine Pixel — das Rendering erfolgt nur, wenn context.createCGImage aufgerufen wird.

swift
import CoreImage

guard let inputImage = CIImage(image: uiImage) else { return }
let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(inputImage, forKey: kCIInputImageKey)
filter?.setValue(0.8, forKey: kCIInputIntensityKey)

let context = CIContext()
let outputImage = filter?.outputImage
let cgImage = context.createCGImage(outputImage!, from: inputImage.extent)
let resultImage = UIImage(cgImage: cgImage!)

Gesichtserkennung mit Begrenzungsrahmen

Das folgende Beispiel verwendet CIDetector, um Gesichter in einem Bild zu finden und ein Rechteck um jedes erkannte Gesicht zu zeichnen. CIFaceFeature enthält Koordinaten im Bildkoordinatensystem (Ursprung unten links). Beim Zeichnen auf UIKit ist daher eine Koordinatentransformation über affine Transformation erforderlich.

swift
let detector = CIDetector(
    ofType: CIDetectorTypeFace,
    context: context,
    options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]
)
let features = detector?.features(in: inputImage) as? [CIFaceFeature]

for face in features ?? [] {
    print("Face bounds: \(face.bounds)")
    if face.hasSmile {
        print("Die Person lächelt")
    }
}

Komposition mehrerer Effekte

Das letzte Beispiel demonstriert eine Kette von drei Filtern: Farbkorrektur, Vignettierung und Texturüberlagerung. Beachten Sie, dass das outputImage des ersten Filters als inputImage an den zweiten übergeben wird — ohne Zwischenrendering. Wenn createCGImage aufgerufen wird, kombiniert CoreImage alle drei Operationen in einem einzigen GPU-Durchlauf.

swift
let colorFilter = CIFilter(name: "CIColorControls")
colorFilter?.setValue(inputImage, forKey: kCIInputImageKey)
colorFilter?.setValues([
    kCIInputBrightnessKey: 0.1,
    kCIInputContrastKey: 1.2
])

let vignetteFilter = CIFilter(name: "CIVignette")
vignetteFilter?.setValue(colorFilter?.outputImage, forKey: kCIInputImageKey)
vignetteFilter?.setValue(2.0, forKey: "inputRadius")

let finalImage = vignetteFilter?.outputImage
let result = context.createCGImage(finalImage!, from: inputImage.extent)

Häufig gestellte Fragen

Wie unterscheidet sich CoreImage von Core Graphics

CoreImage läuft auf der GPU und ist für Pixeloperationen (Filter, Farbkorrektur) optimiert, während Core Graphics eine CPU-Bibliothek für Vektorzeichnungen und 2D-Kontexte ist. CoreImage ist schneller für die Stapelbildverarbeitung, Core Graphics genauer für die schrittweise Schnittstellenzeichnung.

Kann CoreImage auf Echtzeit-Video angewendet werden

Ja — CoreImage unterstützt die Verarbeitung einzelner Videoframes über AVPlayerItemVideoOutput oder AVCaptureOutput. Für die Streaming-Verarbeitung verwenden Sie AVVideoComposition mit CIFilter, was das Anwenden von Effekten ohne Kopieren von Frames zwischen CPU und GPU ermöglicht.

Welches Farbprofil verwendet CoreImage standardmäßig

CoreImage arbeitet standardmäßig im sRGB-Arbeitsfarbraum (kCGColorSpaceSRGB). Beim Erstellen eines CIContext kann ein alternativer Raum angegeben werden — erweitertes lineares sRGB für HDR oder Display P3 für Wide-Gamut-Displays.

Wie viele CIFilter können in einer Kette kombiniert werden

Es gibt keine Begrenzung der Anzahl der Filter in einer Kette, aber alle 5–7 aufeinanderfolgende Filter erzeugen einen zusätzlichen GPU-Durchlauf. Bei mehr als 10 Filtern wird empfohlen, die Kette in Gruppen aufzuteilen und Zwischenergebnisse zu rendern, um die Shader-Registergrenze nicht zu überschreiten.

Funktioniert CIDetector auf Geräten ohne Neural Engine

Ja — CIDetector arbeitet auf der CPU mit NEON-Instruktionen auf allen Geräten mit iOS 5.0 und höher. Die Erkennungsgenauigkeit ist auf allen Geräten gleich, aber die Geschwindigkeit ist auf Apple A12+-Chips aufgrund der hardwarebeschleunigten neuronalen Netze höher.

Zusammenfassung

  • CoreImage — GPU-beschleunigtes Apple-Framework für Bild- und Videoverarbeitung auf iOS und macOS
  • CIImage, CIFilter und CIContext bilden eine Dreischicht-Architektur mit verzögerter Auswertung
  • Über 200 integrierte CIFilter decken die meisten Farbkorrektur-, Unschärfe- und Stilisierungsaufgaben ab
  • Benutzerdefinierte Filter werden über Metal CIKernel mit der [[kernel]]-Annotation erstellt
  • CIDetector findet Gesichter, Text, QR-Codes und Rechtecke ohne Vision.framework
  • Filterketten werden automatisch durch Kernel-Fusion zu einem einzigen GPU-Durchlauf optimiert
  • Für Echtzeit-Videoverarbeitung verwenden Sie AVVideoComposition mit CIFilter

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch