CoreImage: apa itu, filter dan bekerja dengan gambar

Penulis: IT Sectr Diterbitkan: 2026-05-06 Waktu membaca: 9 mnt

CoreImage adalah framework Apple untuk pemrosesan gambar dan video secara real-time, menyediakan puluhan CIFilter bawaan untuk koreksi warna, pengaburan, penempatan tekstur dan deteksi. Menurut Apple Documentation, CoreImage menggunakan GPU untuk pemrosesan piksel berkinerja tinggi pada perangkat iOS. Framework mendukung CIImage sebagai objek gambar yang tidak dapat diubah dan rantai filter untuk komposisi efek tanpa kehilangan kualitas.

Poin utama

  • CoreImage — framework Apple untuk pemrosesan gambar dan video dengan akselerasi GPU di iOS dan macOS
  • CIFilter — blok bangunan dasar dengan lebih dari 200 efek bawaan dan dukungan untuk shader Metal kustom
  • CIImage — objek tidak dapat diubah yang mewakili gambar dalam pipeline CoreImage tanpa terikat ke format tertentu
  • CIDetector — komponen untuk mendeteksi wajah, teks, kode QR dan persegi panjang pada gambar
  • Pemrosesan GPU — CoreImage secara otomatis menggunakan Metal atau OpenGL untuk komputasi paralel di GPU

Apa itu CoreImage

CoreImage adalah framework Apple untuk memproses gambar raster dan video, pertama kali diperkenalkan di macOS 10.4 Tiger dan diporting ke iOS 5.0. Berbeda dengan Core Graphics atau UIKit, CoreImage bekerja pada level shader piksel, menggunakan GPU untuk komputasi paralel. Ini memungkinkan penerapan efek kompleks — pengaburan, koreksi warna, morphing — ke gambar beresolusi megapiksel dalam milidetik.

Arsitektur CoreImage dibangun di atas konsep evaluasi malas (lazy evaluation): CIFilter tidak melakukan pemrosesan hingga saat rendering di CIContext. Pengembang membangun rantai dari beberapa CIFilter, menghubungkan output satu filter ke input filter lainnya, dan hanya panggilan render yang memulai pipeline GPU penuh. Ini meminimalkan jumlah lintasan melalui kartu grafis dan mempertahankan kinerja.

CoreImage mendukung gamut warna lebar (P3, sRGB, sRGB linear), gambar HDR dan bekerja dengan format piksel 16-bit dan 32-bit. Pada perangkat dengan Neural Engine, CoreImage dapat menggabungkan shader GPU dengan Core ML untuk pemrosesan cerdas — misalnya, koreksi warna otomatis berbasis pembelajaran mesin, seperti yang diimplementasikan di aplikasi Foto di iOS 17.

Arsitektur CoreImage: CIImage, CIFilter, CIContext

Tiga kelas utama membentuk inti CoreImage: CIImage (data), CIFilter (operasi) dan CIContext (lingkungan eksekusi). Setiap kelas bertanggung jawab atas fase pipelinenya sendiri dan tidak mencampuradukkan tanggung jawab.

CIImage — sumber yang tidak dapat diubah

CIImage adalah objek ringan yang mendeskripsikan gambar tetapi tidak secara langsung berisi data piksel. Ini dapat dibuat dari UIImage, CGImage, tekstur Metal, tekstur GL atau file di disk. CIImage tidak dapat diubah — setiap penerapan filter menciptakan CIImage baru tanpa mengubah aslinya. Ini memungkinkan pembangunan rantai transformasi tanpa menyalin data antar langkah.

Fitur penting: CIImage tidak terikat pada resolusi layar atau ruang warna hingga saat rendering. CIImage yang sama dapat dirender ke UIImage untuk layar dan ke file TIFF untuk pencetakan dengan parameter berbeda — CoreImage secara otomatis menyesuaikan pemrosesan dengan konteks target.

CIFilter — operasi pemrosesan

CIFilter adalah kelas utama untuk menerapkan efek. Setiap CIFilter mewakili program shader dengan parameter input (inputImage, inputIntensity, inputRadius dll.) dan satu gambar output. Apple menyediakan lebih dari 200 CIFilter bawaan, dikelompokkan ke dalam kategori: CICategoryColorEffect (koreksi warna), CICategoryBlur (pengaburan), CICategoryStylize (stilisasi), CICategoryGeometryAdjust (transformasi geometris).

Untuk membuat CIFilter kustom, pengembang menulis shader Metal (CIKernel) — shader fragmen dalam bahasa Metal Shading Language yang memproses setiap piksel secara independen. Setelah kompilasi, shader didaftarkan sebagai subkelas CIFilter dan dapat digunakan dalam rantai bersama filter bawaan Apple.

KategoriContoh filterTujuan
ColorEffectCIColorControlsKecerahan, kontras, saturasi
BlurCIGaussianBlurPengaburan Gaussian dengan radius yang dapat disesuaikan
StylizeCIPixellatePikselasi gambar dengan skala tertentu
GeometryAdjustCIAffineTransformRotasi, skala, pergeseran melalui matriks affine
CompositeCISourceOverCompositingMenumpuk gambar dengan saluran alfa

CIContext — lingkungan rendering

CIContext adalah objek berat yang mengelola alokasi sumber daya GPU, kompilasi shader dan buffering. Membuat CIContext adalah operasi yang mahal, oleh karena itu Apple merekomendasikan untuk membuatnya sekali untuk seluruh siklus hidup aplikasi dan menggunakannya kembali. Konteks terikat pada GPU tertentu (Metal, OpenGL) atau CPU dan menentukan ruang warna gambar output.

CIFilter: filter bawaan dan shader Metal kustom

Pustaka CIFilter terus berkembang: iOS 17 menambahkan filter baru untuk pemrosesan HDR dan pembelajaran mesin. Semua filter bawaan didokumentasikan di Apple Developer Documentation dan dapat dicari berdasarkan kategori atau nama. Untuk mendeteksi filter yang tersedia di perangkat, gunakan CIFilter.filterNames(inCategory:).

Rantai beberapa filter

Kemampuan utama CoreImage — komposisi beberapa CIFilter dalam rantai. Output satu filter diberikan ke input filter berikutnya melalui parameter inputImage. CoreImage mengoptimalkan rantai pada fase rendering: filter yang berdekatan yang bekerja di ruang warna yang sama digabungkan menjadi satu lintasan GPU (kernel fusion). Ini memberikan peningkatan kinerja tanpa campur tangan pengembang.

Filter kustom melalui CIKernel

Untuk membuat efek sendiri, pengembang menulis fungsi Metal dengan anotasi [[kernel]]. Fungsi menerima koordinat piksel dan mengembalikan warna. CoreImage mengirim shader ke GPU, di mana ia dijalankan secara paralel untuk semua piksel gambar. Filter kustom sangat berguna untuk efek visual unik: sepia dengan kurva non-linear, pengaburan dispersi atau imitasi butiran film.

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;
}

Kinerja dan caching

CoreImage secara otomatis mengelola cache hasil antara. Jika rantai filter yang sama diterapkan ke gambar yang berbeda, CoreImage dapat menggunakan kembali shader yang telah dikompilasi. Untuk kinerja maksimal, hindari membuat CIContext untuk setiap frame — gunakan satu konteks dan atur ulang parameter input filter.

CIDetector: deteksi wajah, teks dan objek

CIDetector adalah subsistem CoreImage untuk mendeteksi objek semantik pada gambar tanpa menggunakan Vision atau Core ML. CIDetector mendukung empat jenis deteksi: wajah (CIDetectorTypeFace), teks (CIDetectorTypeText), kode QR (CIDetectorTypeQRCode) dan persegi panjang (CIDetectorTypeRectangle). Detektor bekerja pada CPU dengan optimasi untuk instruksi NEON, yang memastikan kecepatan stabil pada perangkat tanpa GPU yang kuat.

Deteksi wajah

Detektor wajah CIDetectorTypeFace mengembalikan array CIFaceFeature dengan koordinat batas wajah, posisi mata dan mulut. Sejak iOS 12, CIDetector juga menentukan senyuman (hasSmile) dan posisi mata kiri/kanan (leftEyeClosed, rightEyeClosed). Akurasi deteksi cukup untuk sebagian besar aplikasi AR dan foto, tetapi untuk skenario kritis Apple merekomendasikan Vision.framework.

Deteksi persegi panjang

CIDetectorTypeRectangle menemukan area persegi panjang pada gambar — dokumen, kartu nama, layar perangkat. Detektor mengembalikan CIRectangleFeature dengan empat titik yang membentuk kontur persegi panjang. Menurut WWDC 2024, detektor persegi panjang menggunakan arsitektur jaringan saraf yang sama dengan Vision, tetapi dengan konsumsi memori lebih rendah. Ini membuatnya lebih disukai untuk pemrosesan aliran bingkai waktu nyata, misalnya di aplikasi pemindai dokumen.

Contoh kode: filter dan deteksi di Swift

Contoh praktis akan membantu memperkuat pemahaman CoreImage. Mari kita lihat dua skenario umum: menerapkan filter warna ke foto dan deteksi wajah dengan menggambar bingkai.

Menerapkan sepia ke gambar

Contoh dasar filter CISepiaTone, yang mengubah gambar berwarna menjadi nada sepia. Filter menerima parameter inputIntensity dari 0 (asli) hingga 1 (efek maksimal). Perhatikan evaluasi malas: CIImage yang dikembalikan oleh filter.outputImage tidak mengandung piksel — rendering hanya terjadi saat pemanggilan context.createCGImage.

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!)

Deteksi wajah dengan menggambar bingkai

Contoh berikut menggunakan CIDetector untuk menemukan wajah dalam gambar dan menggambar persegi panjang di sekitar setiap wajah yang ditemukan. CIFaceFeature berisi koordinat dalam sistem gambar (awal di sudut kiri bawah), oleh karena itu saat menggambar di UIKit diperlukan transformasi koordinat melalui affine transform.

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("Orang tersenyum")
    }
}

Komposisi beberapa efek

Contoh terakhir menunjukkan rantai tiga filter: koreksi warna, vignet dan penempatan tekstur. Perhatikan bahwa outputImage filter pertama diteruskan sebagai inputImage ke filter kedua — tanpa rendering perantara. Saat pemanggilan createCGImage, CoreImage menggabungkan ketiga operasi menjadi satu lintasan GPU.

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)

Pertanyaan yang sering diajukan

Apa perbedaan CoreImage dengan Core Graphics?

CoreImage bekerja di GPU dan dioptimalkan untuk operasi piksel (filter, koreksi warna), sedangkan Core Graphics adalah pustaka CPU untuk menggambar vektor dan konteks 2D. CoreImage lebih cepat untuk pemrosesan gambar massal, Core Graphics lebih akurat untuk menggambar antarmuka langkah demi langkah.

Bisakah CoreImage diterapkan ke video waktu nyata?

Ya — CoreImage mendukung pemrosesan bingkai video individual melalui AVPlayerItemVideoOutput atau AVCaptureOutput. Untuk pemrosesan streaming, gunakan AVVideoComposition with CIFilter, yang memungkinkan penerapan efek tanpa menyalin bingkai antara CPU dan GPU.

Profil warna apa yang digunakan CoreImage secara default?

CoreImage secara default bekerja di ruang warna sRGB (kCGColorSpaceSRGB). Saat membuat CIContext, Anda dapat menentukan ruang alternatif — extended linear sRGB untuk HDR atau Display P3 untuk layar dengan gamut lebar.

Berapa banyak filter CIFilter yang dapat digabungkan dalam satu rantai?

Tidak ada batasan jumlah filter dalam rantai, tetapi setiap 5–7 filter berurutan menciptakan lintasan GPU tambahan. Untuk lebih dari 10 filter, disarankan untuk membagi rantai menjadi beberapa grup dan merender hasil antara untuk menghindari melebihi batas register shader.

Apakah CIDetector bekerja pada perangkat tanpa Neural Engine?

Ya — CIDetector bekerja di CPU menggunakan instruksi NEON pada semua perangkat dengan iOS 5.0 dan lebih baru. Akurasi deteksi sama di semua perangkat, tetapi kecepatan lebih tinggi pada chip Apple A12+ karena percepatan perangkat keras jaringan saraf.

Kesimpulan

  • CoreImage — framework Apple dengan akselerasi GPU untuk pemrosesan gambar dan video di iOS dan macOS
  • CIImage, CIFilter dan CIContext membentuk arsitektur tiga lapis dengan evaluasi malas
  • Lebih dari 200 CIFilter bawaan mencakup sebagian besar tugas koreksi warna, pengaburan dan stilisasi
  • Filter kustom dibuat melalui Metal CIKernel dengan anotasi [[kernel]]
  • CIDetector menemukan wajah, teks, kode QR dan persegi panjang tanpa menghubungkan Vision.framework
  • Rantai filter secara otomatis dioptimalkan melalui kernel fusion menjadi satu lintasan GPU
  • Untuk pemrosesan video waktu nyata, gunakan AVVideoComposition dengan CIFilter

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga