⚠️ Ini adalah situs terjemahan tidak resmi dan tidak berafiliasi dengan ImageMagick Studio LLC. Untuk informasi resmi, lihat halaman asli (https://usage.imagemagick.org/photos/index.html).

Contoh penggunaan ImageMagick -- penanganan foto digital

Kata pengantar dan indeks contoh penggunaan ImageMagick
Meta-data kamera digital, profil EXIF
Orientasi foto digital
Perbaikan warna

Salah satu kegunaan utama ImageMagick adalah menangani dan memodifikasi foto yang diambil dengan kamera digital modern. Kamera semacam ini umumnya menghasilkan foto yang cukup besar dan beresolusi tinggi, lengkap dengan meta-data tentang waktu, skala, zoom, kamera, orientasi, dan seterusnya. Bahkan ada rencana untuk menghubungkan kamera dengan telepon seluler, sehingga kamera dapat menebak di mana Anda berada saat foto diambil dan siapa saja yang mungkin ada dalam foto itu (dari telepon seluler apa saja yang ada di depannya). Di sini kita akan melihat dasar-dasar penanganan foto digital, bahkan mengonversinya untuk keperluan lain, misalnya rendering artistik. Terima kasih khusus kepada Walter Dnes, seorang pengguna kamera digital, atas bantuannya dalam penyempurnaan foto digital.


Meta-data kamera digital, profil EXIF

Saat kamera digital mengambil foto, banyak informasi tambahan ikut disertakan ke dalam file simpanan JPEG. Meta-data ini dikenal sebagai profil EXIF, dan disediakan khusus untuk laboratorium foto dan proses pencuciannya. Perintah ImageMagick "magick identify" dengan pengaturan "-verbose" akan menampilkan informasi Exif tersebut. Berikut data EXIF dari sebuah foto yang saya ambil di Pagoda, Kebun Binatang Kunming, Tiongkok Selatan.

  magick identify -format "%[EXIF:*]" pagoda_sm.jpg |\
      sed 's/\(.\{46\}\).*/\1/' | column -c 110

[IM Text]

| Data EXIF, atau keluaran identify apa pun, sebaiknya diproses tanpa membedakan huruf besar-kecil. Misalnya, banyak versi IM yang lebih lama mengeluarkan "EXIF:" (huruf besar) alih-alih "exif:" (huruf kecil).
Berikut contoh serupa, tetapi memakai ekspresi 'globbing' (mirip shell) untuk membatasi keluaran pada field EXIF yang berkaitan dengan waktu...

  magick identify -format "%[exif:*time*]" pagoda_sm.jpg

[IM Text]

Ada banyak informasi tentang foto ini di dalam profil EXIF. Sebagai contoh

  • Kamera saya adalah Panasonic ('Make'), DMC-LZ1 ('Model')
  • Kameranya diputar ('Orientation'). Tetapi rupanya saya sudah mengoreksi rotasi itu tanpa menyesuaikan data EXIF-nya. Kamera juga sedikit dimiringkan ke atas, tetapi info itu tidak terekam.
  • 'FocalLength' sebesar '37mm menunjukkan bahwa saya tidak memakai fitur 'Optical Zoom' kamera saya. Kamera saya sanggup sampai zoom optik 6X dengan 'FocalLength' '366/10' atau '222mm'.
  • Dan 'DigitalZoomRatio' menunjukkan saya juga tidak melakukan zoom digital.
  • Kamera juga memakai 'ExposureTime' cepat 1/8 detik, dan bukaan 'MaxApertureValue' 3mm, atau 'FNumber' '5.6' dengan 'ISOSpeedRating' '64'.
  • Lampu kilat ('LightSource') tidak dipakai.
  • Gambar aslinya berukuran 1728 kali 2304 piksel ('ExifImageLength' dan 'ExifImageWidth'). Meski gambar yang sebenarnya, kalau mau diperiksa, lebih kecil, jadi rupanya saya sudah memangkas dan/atau mengubah ukurannya.
  • Dan yang mungkin paling penting, foto itu diambil sekitar pukul 14:05 pada 9 Juli 2005, menurut string 'DateTime'. Itu dengan asumsi waktu kamera saya sudah disetel dengan benar (dan memang begitu).
  • Kamera yang lebih modern bahkan mungkin punya lokasi GPS dan barangkali arah kompas dari pemandangannya!

Ikut disertakan tetapi tidak tercantum di atas adalah gambar pratinjau 'thumbnail' kecil yang dipakai kamera pada layarnya sendiri. Ada pula fitur untuk menandai foto yang ingin 'dicuci' atau dicetak lewat printer foto, serta untuk menyetel parameter pencetakan lainnya. Namun ini jarang dipakai kebanyakan orang. Banyak dari pengaturan (setting) ini bisa sangat berguna bagi pengguna, tetapi yang paling berguna bagi orang umumnya adalah tanggal dan waktu foto. Tentu saja ini mengandaikan tanggal dan waktu pada kamera sudah disetel benar sebelum foto diambil. Banyak orang juga tertarik pada orientasi gambar agar bisa diputar dengan benar saat ditampilkan, dan itulah yang akan kita lihat berikutnya. Semua data ini, terutama gambar pratinjaunya, bisa memakan cukup banyak ruang di dalam gambar. Dan bisa jadi saya sebenarnya tidak ingin seluruh dunia tahu bahwa saya berada di Kunming, Tiongkok pada Juli 2005. Karena itu Anda mungkin ingin membuang data EXIF dari gambar sebelum benar-benar menerbitkannya di World Wide Web. Selain itu ukuran gambar dari kamera digital biasanya sangat besar (dan makin besar), yang memungkinkan pencetakan pada kualitas foto, tetapi jauh terlalu besar untuk dipakai di WWW, apalagi untuk thumbnail. Jadi kecuali Anda memang ingin pengguna bisa mencetak gambar berkualitas foto, saya tidak akan menerbitkan gambar aslinya secara langsung. Gambar di atas misalnya sudah dipangkas dan diubah ukurannya untuk keperluan contoh IM, tetapi data EXIF-nya sengaja saya biarkan utuh demi contoh ini. Biasanya saya akan membuang informasi tersebut.


Orientasi foto digital

Saya diberi tahu bahwa Photoshop akan otomatis memutar gambar digital berdasarkan pengaturan EXIF 'Orientation', dan IM juga bisa melakukannya dengan menyertakan operator "-auto-orient" setelah gambarnya dibaca. Namun, dan ini penting

Format JPEG bersifat lossy

Artinya, setiap kali format file JPEG didekode lalu disimpan lagi, gambarnya akan sedikit menurun kualitasnya. Sebagai pemroses gambar umum, IM selalu mendekode dan meng-encode ulang formatnya secara lengkap, sehingga ia selalu menurunkan kualitas gambar JPEG ketika menyimpannya kembali. Untuk keterangan lebih lanjut tentang sifat format JPEG lihat Format file gambar JPEG. Intinya, pakailah IM untuk mengoreksi orientasi foto digital (dengan "-auto-orient") hanya bila Anda sekaligus melakukan operasi pengubahan gambar lain, seperti Pembuatan thumbnail, Anotasi gambar, Pemberian watermark atau bahkan Penyetelan eksposur. IM dapat mengekstrak orientasi saat ini (sebagai angka) dari foto dengan Image Property Escape... | |

  magick identify -format '%[exif:orientation]' pagoda_sm.jpg

[IM Text]
IM menyediakan operator khusus "-orient" (pakai "-list orientation" untuk melihat nilai yang mungkin). | |

  magick pagoda_sm.jpg -orient bottom-right \
                 -format '%[exif:orientation]'   info:

[IM Text]
Metode penyetelan meta-data ini memungkinkan penyesuaian orientasi foto yang sudah dimodifikasi, terutama yang sudah diputar. Perhatikan bahwa foto dengan orientasi yang benar memiliki orientasi 'Top-Left' atau 1. Tentu saja meta-data EXIF jangan dibuang (baik dengan "-strip" maupun "-thumbnail") bila Anda berencana memakai "-auto-orient" di tahap berikutnya. Pakailah sebelum meta-data gambarnya dibuang. Kalau Anda memang ingin mengoreksi orientasi foto tanpa menurunkan kualitas atau mengubah gambarnya, saya sarankan memakai program JHead. Sebagai contoh, di sini saya mengoreksi orientasi foto dan menghapus thumbnail pratinjau bawaan dari semua foto digital dalam sebuah direktori.

  jhead -autorot  *.jpg

| _Rotasi lossless JPEG hanya bekerja benar untuk gambar yang ukurannya habis dibagi 8 atau 16. Ini berlaku untuk sebagian besar (tetapi tidak semua) foto kamera digital. Kalau ini dicoba pada gambar berukuran ganjil, blok tepi kanan atau bawah (yang berisi ukuran parsial) tidak akan diposisikan dengan benar pada gambar akhir, karena blok semacam itu hanya boleh berada di tepi kanan atau bawah.

Untuk contohnya lihat diskusi khusus ini_
Program JHead juga memungkinkan penyetelan tanggal foto (kalau waktu kamera Anda salah setel, atau Anda bepergian ke zona waktu lain), mengekstrak/membuang/mengganti thumbnail pratinjau, mengisi field komentar gambar, membuang profil photoshop, dan memangkas gambar secara sederhana (untuk menyingkirkan orang asing yang memamerkan dirinya ;-) dan seterusnya, tanpa menurunkan kualitas data gambar JPEG. Saya menganjurkan program ini, atau program lain sejenisnya (lihat Program pemroses JPEG lainnya), untuk membetulkan informasi ini. Pastikan saja ia tidak benar-benar mendekode/meng-encode ulang data gambar JPEG-nya. Satu catatan terakhir soal orientasi. Kalau kamera Anda diarahkan nyaris lurus ke atas atau ke bawah, pengaturan orientasi EXIF mungkin tidak terbaca dengan benar. Hal yang sama berlaku untuk bidikan menyudut atau miring. Orientasi (dan kamera) memang tidak punya indra untuk situasi semacam itu. Satu-satunya pilihan Anda untuk foto seperti itu adalah memutarnya sendiri dengan "jpegtrans" non-lossy yang lebih rendah tingkatannya, atau "-rotate" milik IM, lalu menyetel ulang pengaturan orientasi EXIF (dengan JHead atau operator IM "-orient"), atau sekalian membuang profil EXIF-nya.

Modifikasi lossy IM lainnya...
  Kalau Anda juga mengubah ukuran atau memodifikasi gambar dengan cara lain, misalnya
  menurunkan kualitas dan ukurannya untuk dipakai di web, kehilangan data sudah pasti terjadi.
  Karena itu, dalam operasi tersebut IM bisa melakukan hal serupa, sehingga semua
  operasi yang diperlukan dapat dilakukan dalam satu siklus 'load-save'.

  Putar SEMUA gambar ke landscape   -rotate 90\<
                         portrait   -rotate -90\>

Perbaikan warna

Sebelum melanjutkan, sebaiknya lebih dulu lihat Modifikasi warna sebagai pengantar teknik modifikasi warna umum yang akan dipakai. Normalisasi (dengan "-normalize") pada line art dan grafik berkontras tinggi bisa memberi hasil bagus. Tetapi foto yang dinormalisasi bisa tampak tidak nyata, dan, seperti sudah disebut sebelumnya, mungkin juga tidak tercetak dengan baik. Operator "-contrast-stretch" dapat membatasi "batas-batas" normalisasinya, sedangkan operator "-levels" dan/atau "-sigmoidal-contrast" dapat memberi penyesuaian yang "lebih mulus" (lihat Penyesuaian histogram untuk pembahasan tingkat rendah tentang apa yang dilakukan operator-operator ini). Masukan di atas berkat kebaikan hati "Tong" dari Milis IM.

Mencerahkan foto yang kurang pencahayaan, kontribusi dari Walter Dnes

Kadang cahaya yang tersedia memang tidak cukup untuk eksposur yang pas. Di lain waktu, Anda mungkin harus memakai waktu eksposur yang lebih pendek dari yang optimal demi menghilangkan motion-blur. Pada foto digital yang kurang pencahayaan, area yang lebih gelap dapat dicerahkan secara selektif tanpa membakar highlight, yaitu dengan operator "-sigmoidal-contrast" pada level ambang batas (threshold) '0%'. Lihat Kontras non-linear sigmoidal untuk detailnya. Berikut contoh kekurangan pencahayaan ringan, yang diambil di sebuah konser gratis setelah matahari terbenam. Foto ini punya banyak area yang terang benderang dan jelas, tetapi juga area gelap yang ingin saya buat lebih terlihat.

  magick night_club_orig.jpg  -sigmoidal-contrast 4,0%  night_club_fixed.jpg

[IM Output] [IM Output]

| _Seperti biasa, pakailah format non-lossy seperti TIFF atau PNG untuk kerja antara. Format JPEG dipakai di sini semata untuk menghemat ruang disk dan bandwidth unduhan demi penerbitan web.

Pilih gambar untuk melihat versi besar yang sebenarnya dipakai contoh-contoh ini, bukan thumbnail kecil yang ditampilkan._
Dan berikut contoh kekurangan pencahayaan yang parah, sebuah bidikan malam hari dari balkon saya menghadap ke selatan ke arah kota Toronto.

  magick night_scape_orig.jpg -sigmoidal-contrast 10,0%  night_scape_fixed.jpg

[IM Output] [IM Output]

Parameter utamanya mengatur seberapa besar pencerahannya. Makin besar pencerahan yang dibutuhkan, makin tinggi nilai yang dipakai. Dan makin berbintik pula tampilan gambar keluarannya, karena error piksel yang kecil ikut diperkuat. Pencerahan dengan kontras sigmoidal cenderung meredam ujung merah spektrum. Bisa jadi Anda akhirnya harus memilih parameter yang menghasilkan warna kulit paling alami, alih-alih tingkat kecerlangan yang sebenarnya diinginkan. Pada kasus kekurangan pencahayaan yang parah, hasil akhirnya adalah gambar hitam-putih berbintik yang sekadar dipoles. Ini batas fisik dari penyempurnaan gambar digital. Kalau data warnanya memang tidak ada, IM tidak akan mengarangkannya untuk Anda. Di dunia nyata, bata di sisi kanan balkon saya berwarna kemerahan, dan pepohonan di bawahnya hijau.

Binning -- mengurangi noise digital, kontribusi dari Walter Dnes

Banyak fotografer serius tidak senang dengan efek samping "lomba megapiksel" para produsen kamera digital. Produsen menjejalkan lebih banyak megapiksel ke sensor kamera digital dengan cara memperkecil pikselnya. Piksel yang lebih kecil menghasilkan gambar yang lebih ber-noise pada pengaturan ISO yang sama, sehingga orang terpaksa memakai pengaturan ISO yang lebih rendah. Memakai ISO rendah demi menghindari noise menuntut waktu eksposur yang lebih panjang. Ini pada gilirannya berarti sebagian besar kamera digital konsumen praktis tidak berguna di dalam ruangan, di luar jangkauan 10 kaki lampu kilat bawaannya, kecuali untuk foto benda diam dengan kamera di atas tripod. Banyak pengguna kamera digital dengan senang hati akan menukar sebagian piksel demi gambar yang tidak terlalu ber-noise pada pengaturan ISO tinggi, tetapi para pemasar yang mengendalikan perusahaan menolak mempertimbangkannya sebagai pilihan. Untungnya, tukar-tambah itu bisa dilakukan belakangan pada foto digital. Istilah teknisnya 'binning'. Teori sederhananya begini...

  • Ambil grid piksel n-kali-n, lalu rata-ratakan komponennya untuk memperoleh satu "super-piksel".
  • Sinyal sebanding dengan gabungan luas pikselnya, yang berarti jumlah sinyalnya naik dengan faktor n^2
  • Noise itu acak. Artinya ia sebanding dengan akar kuadrat gabungan luas pikselnya, yaitu faktor n. Hasil bersihnya, SNR (signal-to-noise ratio) naik dengan faktor n. Lihat Photo Glossary, Binning untuk detailnya.
Ketika foto digital 1600x1200 di-bin turun menjadi 800x600 (yakni grid 2x2), signal-to-noise ratio-nya berlipat dua. Begitu pula, gambar 2560x1920 yang di-bin 3x3 menjadi 853x640 piksel akan memperoleh perbaikan signal-to-noise ratio dengan faktor 3. Agar binning bisa dimanfaatkan, gambar fotonya harus merupakan kelipatan bilangan bulat dari ukuran akhir yang diinginkan.
Di ImageMagick, pengaturan (setting) khusus "-filter" bernilai 'box' akan merata-ratakan kelompok piksel menjadi satu piksel ketika Anda "-resize" sebuah gambar (Lihat Filter resampling untuk detailnya. Artinya, untuk melakukan 'binning' cukup mengubah ukuran gambarnya dengan benar.

Sedang dikerjakan

Walter Dnes juga menyediakan skrip asli binn untuk melakukan perhitungannya, memangkas gambar seminimal mungkin, lalu menjalankan 'binning'-nya. Contoh binning 3Contoh binning 4


Buku resep konversi foto

Koreksi rotasi kecil -- membuat foto lebih rata

Situasi yang khas. Anda sudah mengambil foto, tetapi gambarnya tidak rata, dan ingin membetulkannya. [IM Output] Sebagai contoh, ini foto yang saya ambil dengan kamera genggam di Beijing, 2008, dari bukit di Taman Jingshan, tepat di belakang Kota Terlarang. Bukan, ini bukan Kota Terlarang itu sendiri, melainkan sebuah kuil di sisi lain bukitnya. Klik thumbnail-nya untuk melihat gambar yang lebih besar. Ya, gambarnya kecil, dan solusinya sebaiknya diterapkan pada gambar asli, bukan pada thumbnail kecil, tetapi tekniknya sama untuk gambar apa pun. Dalam kasus ini gambarnya perlu diputar -1.8 derajat agar terkoreksi. Nah, kalau Anda sekadar memutar gambarnya, hasilnya adalah gambar yang sedikit lebih besar dengan area berwarna di pojok-pojoknya, sehingga koreksinya jadi kentara dan jelek. |

  magick beijing_tn.png -rotate -1.95  beijing_rotate.png

Bahkan kalau gambarnya dipangkas kembali ke ukuran asalnya, seperti diperagakan di Rotasi gambar sederhana, pojok-pojok berwarna itu tetap muncul. [IM Output]
Solusi paling sederhana adalah memangkas hasil itu untuk membuang tepi-tepi tersebut, tetapi ukuran gambarnya lalu jadi ganjil, yang lagi-lagi kentara bahwa ada sesuatu yang sudah dikerjakan. Rumus untuk pemangkasan itu memang tidak sederhana, tetapi diperagakan di Metode rotasi distorsi. Solusi yang lebih baik adalah tidak hanya memutar gambarnya, tetapi juga menskalakannya sedikit sehingga menghasilkan gambar terputar yang berukuran sama dengan aslinya. |

  angle=-1.95
  magick beijing_tn.png -distort SRT \
     "%[fx:aa=$angle*pi/180;(w*abs(sin(aa))+h*abs(cos(aa)))/min(w,h)], $angle" \
     beijing_rot_correction.png

[IM Output]
Dan gambarnya tampak bersih dengan dinding yang benar-benar rata. Perhitungan sudutnya cukup berupa trigonometri sederhana, memakai posisi piksel di kedua ujung sebuah garis lurus panjang di dalam gambar. Namun saya mendapati bahwa memutar gambar pada berbagai sudut kecil secara coba-coba pun akan menemukan sudut rotasi yang bagus relatif cepat. Ketika menilai sebagus apa suatu sudut, amati dari dekat dengan zoom penuh piksel-piksel di sepanjang garis atau tepi yang dipakai. Di foto ini, bagian atas dindingnya. Dan ingat, dalam rotasi gambar, putaran ke kiri atau berlawanan arah jarum jam bernilai negatif (karena sumbu Y mengarah ke bawah). Ingat juga, kalau memungkinkan, terapkan selalu operasinya pada gambar asli, hindari pemakaian gambar antara (apalagi gambar JPEG antara). Selalu lebih baik menerapkan modifikasi foto apa pun mulai dari sumber aslinya daripada dari salinan antara yang sudah tersimpan.

Efek tilt-shift -- membuat pemandangan tampak seperti model buatan

[IM Output]'Tilt-Shift' adalah teknik yang membuat gambar menjadi blur di bagian atas dan bawah, sementara bagian tengahnya dibiarkan tajam. Awalnya ini dilakukan pada kamera tipe bellow yang sangat tua, dengan lensa yang dimiringkan agar bagian atas dan bawah gambar keluar dari fokus. Berkat hadirnya Variable Blur Mapping, yang ditambahkan ke ImageMagick pada v6.5.4-0, sekarang ini mudah dilakukan. Kalau ditambah kontras yang sangat tinggi untuk memperkuat bayangan serta warna yang jenuh, hasil khasnya adalah gambar biasa yang bisa dibuat tampak artifisial. Nyaris seolah Anda sedang memotret sebuah model kecil yang sangat detail dan diterangi lampu terang.
Hal pertama yang perlu kita lakukan adalah memperkuat warna dalam gambar agar kontrasnya sangat tinggi, dan barangkali mencerahkannya sedikit supaya tampak seperti disorot lampu studio yang kuat. |

  magick beijing_md.jpg -sigmoidal-contrast 15x30% beijing_contrast.jpg

[IM Output]
Perhatikan bahwa saya memakai Operasi kontras sigmoidal yang kuat untuk mendapatkan efek warna ini. Saya tidak sekadar memakai kontras linear karena tidak ingin 'memotong' warna paling terang dan paling gelap gambarnya. Nilai kontras '15' itu kontras yang sangat sangat kuat. Saya juga mencerahkan gambarnya sedikit dengan menggeser titik tengah ambang batas kontrasnya ke nilai abu-abu '30%'. Kalau warna gambar hasil penguatan kontras belum cukup kartunis, coba naikkan saturasi warnanya dengan Operator modulate. Gambar ini tidak memerlukannya karena atap gentengnya dan pepohonan hijau terangnya sudah memberi cukup efek warna. Kalau Anda melihat pembesaran gambarnya (Klik thumbnail-nya), akan terlihat bahwa sekadar memperkuat warna saja sudah memberi kesan lampu buatan, meski belum tampak seperti model, karena mobil-mobil di latar belakang dan orang-orang di latar depan masih terlalu detail. Sekarang giliran tilt-shift-nya. Untuk itu kita siapkan gambar gradien yang putih di bagian atas dan bawah, serta hitam di tengah. Sebagian orang mungkin memakai gradien linear untuk ini, tetapi menurut saya gradien parabolik lebih baik. |

  magick beijing_contrast.jpg \
          -sparse-color Barycentric '0,0 black 0,%h white' \
          -function polynomial 4,-4,1   beijing_blurmap.jpg

[IM Output]
Perhatikan bahwa saya memakai gambar aslinya sendiri dengan Barycentric (gradien segitiga) dua titik untuk menghasilkan gradien linear di seluruh gambar. Gradien linear itu lalu dimodifikasi memakai Fungsi polinomial dasar sehingga menjadi gradien parabolik dengan bagian tengah hitam. Sekarang tinggal mem-blur gambarnya menurut blur map tersebut untuk menciptakan efek 'tilt-shift'. Hasilnya, gambar aslinya tampak lebih seperti model skala ketimbang jepretan cepat dari benda aslinya.

  magick beijing_contrast.jpg  beijing_blurmap.jpg \
          -compose Blur -set option:compose:args 10 -composite \
          beijing_model.jpg

[IM Output]

Seperti terlihat pada gambar akhir, pepohonan dan bangunannya tampak sangat artifisial karena warnanya yang kuat, sementara blur pada bagian dekat dan jauh memberi gambar itu kesan seperti model 'kecil'. Meski pastilah model yang sangat detail! Hasilnya bisa diperbaiki lebih jauh dengan melakukan Koreksi rotasi (lihat sebelumnya) sebagai bagian dari pemrosesan tilt shift. Orientasi kamera yang sempurna akan menambah kesan artifisialnya. Tentu saja semua operasi ini bisa dirangkai jadi satu perintah, sehingga terhindar dari file sementara atau kehilangan kualitas.

  magick beijing_md.jpg -sigmoidal-contrast 15x30% \
          \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
             -solarize 50% -level 50%,0 \) \
          -compose Blur -set option:compose:args 10 -composite \
          beijing_model.jpg

Pada contoh di atas saya mengganti gradien paraboliknya dengan gradien linear hitam-putih-abu yang lebih tradisional (dengan kemiringan yang sama) untuk blur map 'tilt-shift'-nya. Teknik Solarize & Level dipakai agar gradien linearnya memuncak secara horizontal kira-kira 1/3 dari bagian bawah gambar. Namun saya mendapati area fokus pada gradien linear terlalu sempit dan kurang praktis. Ada banyak cara lain untuk menghasilkan gradien yang cocok bagi efek tilt shift. Misalnya memakai Gradien hasil pengubahan ukuran (resize). Atau menskalakan secara horizontal Shepards (bercak warna) dari satu kolom piksel. Gradien kurva sinus juga bisa berguna.

Optimisasi kecepatan

Operasi Variable Blur Mapping pada dasarnya memakai metode blur 2 dimensi satu lintasan (setara dengan Gaussian Blur seragam). Namun percepatan umum bisa diperoleh dengan melakukan operasi blur itu dalam dua operasi variable blur 1 dimensi. Sebagai contoh, di sini saya mem-blur secara horizontal dulu, lalu vertikal...

  magick beijing_md.jpg -sigmoidal-contrast 15x30% \
          \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
             -solarize 50% -level 50%,0 -write mpr:blur_map \) \
          -compose Blur -set option:compose:args 10x0 -composite \
          mpr:blur_map \
          -compose Blur -set option:compose:args 0x10 -composite \
          beijing_model_2pass.jpg

Hasilnya praktis identik (walau memang sedikit berbeda), tetapi jauh lebih cepat diproses. SELINGAN: saya yakin menukar urutan operasinya (blur vertikal dulu, baru horizontal) akan memberi hasil yang lebih akurat untuk pemetaan blur semacam ini. Pada dasarnya karena blur horizontalnya konstan pada arah lintasan blur itu, jadi sebaiknya dikerjakan terakhir.

Masalah efek tilt-shift dibanding model sungguhan

Kalau foto hasilnya Anda amati baik-baik, akan ketahuan bahwa itu tilt-shift palsu, bukan foto model sungguhan. Ini terlihat dari atap bangunan yang lebih besar, yang terlalu blur dibanding bagian dasarnya, padahal jaraknya kira-kira sama dengan dasar itu. Begitu pula dasar 'dinding'-nya lebih blur daripada bagian atas dinding. Artinya, kepalsuannya kelihatan. Masalahnya, objek vertikal yang besar seharusnya di-blur dengan kadar yang sama di seluruh permukaannya, bukan di-blur berubah-ubah menurut ketinggian. Ingat, gradien blur-nya dimaksudkan mewakili kedalaman fokus, atau jarak berbagai objek dalam gambar, sehingga seluruh permukaan objek vertikal seharusnya berada pada 'jarak' yang sama dan karenanya di-blur dengan kadar yang sama. Untuk membetulkannya saya perlu menyetel gradien blur-nya agar area tersebut memiliki warna konstan (atau nyaris konstan) sesuai 'dasar' objek itu, relatif terhadap sisa gambarnya. Artinya, permukaan vertikal punya kadar blur yang konstan sedangkan seluruh permukaan horizontal punya gradien blur. Pada dasarnya gradien blur itu harus mewakili 'kedalaman' sesungguhnya dari setiap titik dalam gambar, yang untuk sebagian besar gambar merupakan gradien yang sangat rumit. Penyetelan ini bisa sulit dicapai, karena kemungkinan besar menuntut tafsiran manusia tentang mana yang dinding horizontal dan seberapa jauh objeknya dalam gambar. Rasanya juga sulit diotomatiskan. Apa yang bisa Anda lakukan dengan efek ini? Kirimkan gambar tilt-shift Anda ke saya! Akan saya rujuk di sini. Atau barangkali Anda bisa membetulkan cacat tilt-shift pada contoh di atas.

Gambar berlapis PNG-JPEG

Dengan memisahkan halaman koran atau majalah yang besar menjadi layer teks yang disimpan sebagai PNG dan layer gambar yang disimpan sebagai JPG, keduanya dengan latar belakang putih saja, ruang disk yang terpakai bisa jauh lebih kecil daripada kedua gambar itu digabung! Yang lebih penting, gambarnya bisa memakai kompresi lossy (JPEG) sementara komponen teksnya tetap tajam dan jelas (PNG). Kedengarannya konyol dan aneh, tetapi memang begitulah kenyataannya. Gambar yang dipisahkan bisa menghemat 3 sampai 4 kali ruang disk yang dipakai satu gambar gabungan. Biasanya kedua gambar itu dihasilkan sebagai layer terpisah selama proses penerbitan. Tetapi Anda juga bisa memisahkan gambar setelah jadi. Gambar-gambarnya tinggal ditimpakan saja...

  magick ny_family.jpg ny_family.png -composite   ny_family_merged.jpg

[IM Output] [IM Output] [IM Output]
Pilih gambar hasilnya untuk melihat salinan yang lebih besar.

Ini memakai Komposisi Over biasa, yang menuntut gambar PNG (overlay)-nya transparan. Transparansi ini datang dalam dua bentuk. Bisa berupa mask boolean (murni hidup/mati), seperti terlihat di atas. Contoh kode untuk pemisahan gambar sangat saya harapkan.

Foto yang bertumpang tindih -- tumpang tindih yang di-blur pada foto yang disambung

Membuat serangkaian foto yang bertumpang tindih (dan yang saya maksud bukan panorama) adalah tugas yang umum, terutama dalam pembuatan situs web. Tetapi ini bisa rumit dikerjakan kecuali Anda punya pengetahuan yang tepat tentang operator IM. Metode paling sederhana adalah memakai Komposisi bermask dari kedua gambar, plus sebuah mask untuk memilih gambar mana yang ditimpakan. Namun pertama-tama perlu sedikit hitung-hitungan. Untuk contoh ini saya memakai dua gambar thumbnail berukuran 120x90 piksel dan ingin menumpangtindihkannya secara horizontal sejauh 40 piksel. Artinya gambar hasilnya harus selebar 120 + 120 - 40 piksel, yakni gambar 200x90 piksel. Berikutnya kita perlu sebuah mask. Mask ini harus hitam di satu sisi, putih di sisi lain, dengan gradien 40 piksel di tengah, seukuran gambar keluaran akhirnya. Jadi, 120 piksel - 40 piksel memberi area 80 piksel untuk masing-masing dari kedua area yang tidak bertumpang tindih. Mari kita hasilkan gambar mask-nya... |

  magick -size 90x80 xc:white xc:black   -size 90x40 gradient: \
          +swap -append -rotate 90    overlap_mask.png

[IM Output]
Cara lain menghasilkan gambar mask-nya adalah memakai skrip pembangkit gradien horizontal "plmlut" karya Fred Weinhaus. Skrip ini punya kendali yang lebih halus atas kelengkungan gradiennya ketimbang gradien linear tajam yang saya hasilkan di atas. Setelah semua hitung-hitungannya beres, yang tersisa hanyalah melakukan komposisi bermask tiga gambar, memakai mask yang baru saja kita hasilkan. Namun kita juga perlu memperbesar gambar tujuan (kiri) agar tersedia cukup ruang untuk gambar kanan yang bertumpang tindih (warna apa saja), lalu memosisikan gambar keduanya dengan benar memakai gravity yang sesuai (kanan, atau 'East').

  magick holocaust_tn.gif -extent 200x90  spiral_stairs_tn.gif \
          overlap_mask.png  -gravity East -composite   overlap_photos.jpg

[IM Output] [IM Output] [IM Output] [IM Output]

Dan sekarang kita punya dua gambar yang bertumpang tindih memakai gradien linear. Tentu saja kedua perintahnya bisa digabung menjadi satu perintah, sehingga gambar antara 'mask'-nya tidak perlu disimpan. Ini saya tinggalkan sebagai latihan bagi pembaca. Perbaikan kecilnya adalah memakai gradien yang lebih melengkung pada area tumpang tindih yang lebih lebar. Ini mengurangi perubahan tajam yang terlihat di awal dan akhir area tumpang tindih pada gambar akhir. Terutama pada gambar yang memuat area luas dengan warna yang sangat berbeda. Sebagai contoh, berikut memakai beberapa teknik Gradien terdistorsi tidak hanya untuk menghasilkan kurva gradien yang lebih mulus, tetapi juga untuk memutar gradien itu sehingga tumpang tindihnya sangat menyudut. |

  magick -page +0-15 -size 1x30 gradient: \
          -sigmoidal-contrast 5,50% -contrast-stretch 0 \
          -set option:distort:viewport 180x90-90-45 \
          +distort SRT 115 +repage \
          holocaust_tn.gif -extent 180x90 +swap \
          spiral_stairs_tn.gif +swap \
          -gravity East -composite   overlap_angled.jpg

[IM Output]
Ya, contoh di atas memang agak rumit, tetapi ia menunjukkan apa saja yang mungkin. Kalau Anda berencana menangani lebih dari dua gambar, metode yang lebih baik adalah memakai mask untuk langsung menetapkan transparansi gambar kedua dan seterusnya. Gambar yang banyak itu lalu bisa ditimpakan bersama memakai teknik yang terlihat di Contoh gambar berlapis. Sebagian teknik ini tidak menuntut penghitungan ukuran gambar akhirnya, karena IM bisa melakukannya untuk Anda. Cukup pastikan posisi gambarnya benar. Sebagai contoh, di sini saya menambahkan gradien 30 piksel ke gambar kedua dan ketiga, sehingga gambarnya harus ditempatkan setiap 90 piksel (lebar 120 dikurangi tumpang tindih 30 piksel) satu sama lain. Setelah semua gambar diberi transparansi dan posisi yang sesuai, layer-nya tinggal kita Mosaic jadi satu (semua offset positif), dan biarkan IM yang menentukan ukuran kanvas akhirnya.

  magick -size 90x90 xc:white -size 90x30 gradient: -append -rotate 90 \
          hatching_tn.gif \
          \( chinese_chess_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +90+0 \) \
          \( holocaust_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +180+0  \) \
          \( spiral_stairs_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +270+0 \) \
          -delete 0   -compose Over  -mosaic     overlap_series.jpg

[IM Output]

Alih-alih menghitung posisi gambar bermask yang bertumpang tindih di muka, Anda bisa memakai teknik yang ada di Menyambung dengan tumpang tindih, serta Posisi yang dihitung secara bertahap untuk rangkaian gambar yang lebih panjang. Catatan penutup: Menumpangtindihkan foto seperti ini paling cocok untuk gambar yang warna keseluruhannya cukup mirip. Anda mungkin juga akan menyadari bahwa pada gambar di kedua ujung rangkaian, subjek yang di tengah bisa tampak kurang di tengah karena tumpang tindihnya hanya ada di satu sisi gambar. Masalah ini bisa diperbaiki dengan memudarkan tepi luar gambar-gambar itu menjadi transparan, atau memotong sebagian tepi luarnya agar subjeknya kembali ke tengah. SELINGAN: Mungkin saja melakukan komposisinya di ruang warna lain akan memberi hasil yang lebih baik. Ada yang mau bereksperimen dan melaporkan hasilnya, bagus atau buruk?

Eksposur ganda -- mencampur beberapa foto dari pemandangan yang sama

Pada kamera film zaman dulu ada teknik memotret dua kali atau lebih tanpa 'menggulung' filmnya. Ini memungkinkan pembuatan apa yang dikenal sebagai eksposur ganda, yaitu dua gambar yang diambil pada waktu sedikit berbeda digabung jadi satu. Hasilnya sering berupa bayangan atau peredupan pada bagian gambar yang bergerak atau berubah. Namun dengan pengendalian yang cermat atas subjek dalam gambar, efek pencahayaan, bahkan proses pencuciannya, orang bisa membuat foto yang sangat aneh atau bahkan 'mustahil'. Dengan gambar digital ini jauh lebih mudah karena kendali atas gambarnya lebih baik lagi. Pada dasarnya... Melihat boleh jadi percaya, tetapi kamera berdusta! Misalnya saya ingin sebuah gambar yang di dalamnya saya muncul dua kali! Nah, itu mudah dilakukan. Berikut misalnya thumbnail dari dua foto cepat yang saya ambil khusus untuk contoh ini, dengan tripod dan timer, yang akan saya pakai langsung.

[IM Output] [IM Output]
Barangkali Anda bisa menyediakan set foto yang lebih bagus dan lebih menghibur?

Saya akan menerapkan teknik eksposur ganda ini langsung pada thumbnail-nya, meski biasanya saya melakukannya dengan file gambar asli sebagai masukan agar hasilnya berkualitas setinggi mungkin. Nah, kalau saya memakai 'eksposur ganda' ala film tradisional dengan kamera model lama, hasilnya adalah rata-rata dari kedua gambar ini, yang memunculkan 'hantu' tembus pandang diri saya sendiri. Berikut simulasi digital dari teknik itu... |

  magick anthony_1.jpg anthony_2.jpg -evaluate-sequence mean  anthony_ghosts.jpg

[IM Output]
Namun bagaimana kalau saya tidak mau hantu, melainkan gambar diri saya yang benar-benar utuh dan tidak tembus pandang? Kalau begitu Anda perlu memakai mask untuk memilih bagian mana yang diambil dari gambar mana. Mask ini bisa dihasilkan dengan dua cara. Mask itu bisa dibuat sendiri dengan membelah gambarnya di sepanjang bagian yang diam atau tidak berubah. Perkara yang cukup sederhana dalam kasus ini... |

  magick -size 100x90 xc: -draw 'rectangle 0,0 50,89' \
          -blur 0x3  anthony_mask.jpg

[IM Output]
Perhatikan bahwa mask-nya saya blur agar peralihan antara kedua gambar itu 'melembut'. Dan di sini saya memakai Komposisi bermask untuk menggabungkan gambarnya. |

  magick anthony_1.jpg anthony_2.jpg anthony_mask.jpg \
          -composite  anthony_doubled.jpg

[IM Output]
Bagaimana kalau Anda punya dua (atau lebih) foto keluarga, dengan beberapa orang yang matanya terpejam, sedang bicara, memasang wajah aneh, atau sekadar memalingkan muka. Anda bisa memilah dan memilih tiap 'kepala' dari gambar yang berbeda lalu menggabungkan gambar-gambar itu menjadi montase, sehingga diperoleh foto yang semua orangnya menghadap kamera dengan mata terbuka. Dengan menukar gambar masukannya, atau sekadar menegasikan mask-nya, Anda bisa menghapus saya sepenuhnya dari gambar, sehingga latar belakang yang diam terlihat tanpa terhalang. |

  magick anthony_2.jpg anthony_1.jpg anthony_mask.jpg \
          -composite  anthony_removed.jpg

[IM Output]
Ini bisa berguna saat memotret monumen publik, ketika Anda tidak sanggup menanggung biaya pengaturan kerumunan. Ambil saja foto sebanyak-banyaknya dari tripod, dan mudah-mudahan Anda bisa menggabungkannya untuk menyingkirkan semua orang dari pemandangan itu! Alternatif menghasilkan gambar latar belakang ketika Anda punya ratusan gambar (video) adalah sekadar membuat rata-rata dari semua gambarnya. Ini mengubah semua orang atau objek sementara lain menjadi kabut tipis berisi 'hantu'. Efek itu sendiri bisa menarik, tetapi tidak selalu yang diinginkan. Gambar rata-rata bisa menjadi langkah yang berguna, karena begitu tersedia, ia dapat dibandingkan dengan tiap gambar individual untuk me-mask orangnya (objek sementara) dari tiap frame, sebelum latar belakangnya digabung lagi menjadi gambar latar belakang yang bersih (tanpa kabut). Pembahasan besar tentang cara menghasilkan 'latar belakang bersih' dari gambar video secara otomatis ada di Forum Diskusi IM pada Creating a Referance Image dan Extracting change events.
Dengan foto latar belakang yang bersih, kita bisa men-threshold gambar selisihnya untuk me-mask bagian gambar yang berubah. Anda mungkin perlu blur dan threshold tambahan untuk memperluas mask itu secukupnya, agar mencakup bukan hanya objek di dalam gambar, tetapi juga bayangan atau pantulan yang mungkin ia jatuhkan ke pemandangan latar belakang. Sedikit coba-coba mungkin juga diperlukan agar pas. |

  magick anthony_removed.jpg anthony_2.jpg \
          -compose difference -composite \
          -threshold 5% -blur 0x3 -threshold 20% -blur 0x3 \
          anthony_automask.jpg

[IM Output]
Sekarang mari kita pakai mask ini untuk mencampur gambar 'hantu' saya dengan gambar aslinya, sehingga tampak seolah hati nurani saya sedang 'menghantui' saya karena membuat gambar 'mustahil' semacam itu. |

  magick anthony_1.jpg anthony_ghosts.jpg anthony_mask.jpg \
          -composite  anthony_haunted.jpg

[IM Output]
Sebagai catatan penutup, semua teknik di atas mengandaikan foto-fotonya diambil dari kamera yang terkunci kokoh pada tripod yang diam. Kalau bukan begitu, melainkan diambil sambil dipegang tangan, saya jamin gambarnya tidak akan cocok atau 'sejajar' dengan benar, sekeras apa pun usaha yang dikerahkan. Dalam kasus seperti itu Anda mungkin perlu distorsi Affine atau bahkan Perspective pada setidaknya salah satu dari kedua gambarnya agar latar belakangnya sejajar dengan benar. Makin rumit latar belakangnya, makin teliti penyejajaran ulang yang dibutuhkan. Kalau lampu kilat dipakai, atau harinya berawan dengan cahaya yang berubah-ubah, Anda mungkin juga perlu menyetel kecerlangan fotonya. Penyebabnya, sebagian besar kamera 'menyetel otomatis' kecerlangan gambarnya, dan lampu kilat atau cahaya yang berubah-ubah dapat mengubah cara kamera menangani penyetelan 'auto-level' untuk setiap gambar. Sebagai contoh terakhir, berikut gambar lain yang saya buat dari dua foto terpisah, tentang keponakan saya yang bermain anggar melawan dirinya sendiri, di depan dinding panjat. Karena kameranya saya pegang dan saya memakai lampu kilat, saya memang perlu melakukan sejumlah penyetelan distorsi affine, serta sedikit penyetelan kecerlangan, agar hasilnya mulus seperti yang Anda lihat.

[IM Output]
Jacob vs Jacob

Kalau Anda mencoba memutuskan apakah foto ini palsu atau bukan, yang diperiksa adalah pencahayaan, bayangan, dan pantulannya. Pada contoh di atas, pemeriksaan cermat atas lantainya akan menunjukkan bahwa 'Jacob' yang kanan tidak punya pantulan yang semestinya di lantai (terpotong oleh tepi fotonya). Tetapi Anda benar-benar harus mengamati fotonya dengan saksama untuk menyadarinya! Sekarang bayangkan berbagai kemungkinan pemakaian teknik 'eksposur ganda' ini. Misalnya bagaimana dengan Funny Mirrors. Kirimkan hasil Anda lewat email! Kalau ingin mendalaminya lebih jauh, makalah riset "Interactive Digital Photomontage" membahas pemakaian "Double Exposures" (atau, dengan istilah makalah itu, "photo montage"), tetapi memanfaatkan seleksi pengguna yang diperluas memakai "image segmentation" untuk memilih bagian gambar mana yang diambil dari mana. Satu contohnya, kalau Anda punya sejumlah foto dari kelompok orang yang besar, dan di tiap foto ada saja yang 'tidak terlihat bagus'. Anda bisa memakai teknik ini untuk memilih orang mana yang diambil dari gambar mana sehingga diperoleh foto kelompok yang sempurna, dengan semua orang: menghadap depan, mata terbuka, dan tersenyum!

Melindungi anonimitas seseorang -- mengaburkan sebagian foto

Teknik memakai mask komposit 3 gambar di atas juga bisa dipakai dengan cara lain. Misalnya sebuah gambar bisa 'dipikselkan', lalu dipakai mask untuk membatasi efeknya hanya pada wajah seseorang, demi "Melindungi Identitasnya".

  magick zelda_tn.gif -scale 25%  -scale 400%  zelda_pixelate.gif
  magick zelda_tn.gif -gamma 0 -fill white \
          -draw 'circle 65,53 50,40'   zelda_face_mask.gif
  magick zelda_tn.gif zelda_pixelate.gif zelda_face_mask.gif \
          -composite   zelda_anonymity.png

[IM Output] [IM Output] [IM Output] [IM Output]

Tentu saja ini semua bisa dilakukan sekaligus, bahkan dengan peralihan yang mulus dari terpikselkan ke normal. Sebagai contoh.. |

  magick zelda_tn.gif \( +clone -scale 25%  -scale 400% \) \
          \( +clone -gamma 0 -fill white \
             -draw 'circle 65,53 50,40' -blur  10x4 \) \
          -composite  zelda_anonymity.jpg

[IM Output]
Tentu saja alih-alih memikselkan bagian yang bermasalah, area itu juga bisa di-blur. Cukup ganti kedua operator "-scale" dengan satu "-blur" untuk mengaburkan detailnya. Teknik mengganti area ber-mask ini juga bisa dipakai untuk menghapus teks dan logo yang tak diinginkan dari gambar. Untuk detailnya lihat Pengisian lubang.

Menambahkan tekstur ke sebuah gambar

Metode komposit alpha Hardlight, atau bahkan berbagai Metode komposisi pencahayaan, menyediakan cara memberi pola tekstur pada gambar. Sebagai contoh, di sini saya menambahkan tekstur kain kasar ke foto pagoda yang saya ambil di Kebun Binatang Kunming, Tiongkok selatan.

  magick tile_fabric.gif -colorspace gray  -normalize \
          -fill gray50 +level 35%      texture_fabric.gif
  magick composite texture_fabric.gif  pagoda_sm.jpg \
            -tile   -compose Hardlight    photo_texture.jpg

[IM Output] [IM Output] [IM Output]

Perhatikan bahwa kalau Anda benar-benar ingin men-tile tekstur itu di atas gambarnya, perintah yang perlu dipakai adalah "magick composite" alih-alih perintah "magick" yang lebih serba guna, meski ada sejumlah cara lain untuk Tiling dengan gambar yang sudah ada di memori dengan convert. Perhatikan juga bahwa saat menambahkan tekstur seperti ini, detail yang lebih kecil pada foto aslinya bisa hilang tertelan noise berlebih dari tekstur yang ditimpakan; tekstur sebaiknya dijaga tetap sederhana, atau efeknya diredam secukupnya, misalnya dengan Penyetelan level pengurang kontras yang dipakai di atas. Agar sebuah pola gambar bisa dipakai sebagai tekstur, ia harus dimodifikasi sehingga warna abu-abu sempurna dipakai untuk area yang tidak berubah pada gambar asli. Artinya warna rata-rata gambarnya harus sekitar abu-abu 50%. Dalam contoh ini saya memperagakan satu cara melakukannya pada hampir semua gambar yang bisa di-tile, meski metode khusus ini tidak selalu berhasil dengan baik. Tekstur semacam itu bisa ditemukan di mana-mana di web, sebagai berbagai pola latar belakang halaman web. Bisa jadi ia bahkan tidak terlihat seperti tekstur, berwarna-warni, atau sangat terang maupun sangat gelap. Namun setelah disetel, ternyata efek yang sangat menarik bisa diperoleh. Sama seperti sebelumnya, bagian gambar mana yang benar-benar diberi tekstur bisa dibatasi dengan membuat mask yang sesuai. Sebagai contoh, mari kita buat mask hanya untuk langit yang nyaris 'putih' pada foto pagodanya.

  magick pagoda_sm.jpg -fuzz 10% -transparent white \
          -alpha extract -negate  pagoda_mask.png
  magick pagoda_sm.jpg  photo_texture.jpg  pagoda_mask.png \
          -composite  photo_texture_masked.jpg

[IM Output] [IM Output]

Sekarang bayangkan gambar seorang perempuan yang mengenakan gaun. Ambil pola apa saja, beri gradasi yang sesuai, lalu timpakan pada gambar asli sehingga gaunnya berganti dengan desain yang sama sekali berbeda. Tentu ada banyak variasi dari cara di atas untuk mencapai hasil akhirnya, dan teknik mana yang dipakai terserah Anda, tetapi gagasan dasarnya sama. Beri tekstur pada gambarnya, mask, lalu timpakan hasilnya. Sebagai selingan, saya juga menganjurkan Anda melihat metode komposit alpha Overlay, yang sebenarnya sama dengan komposisi Hard_Light, hanya saja kedua gambarnya ditukar. Ada pula banyak Metode komposisi shading lain yang bisa dipakai untuk memberi tekstur pada gambar dengan berbagai cara.
[IM Output]

Masking chroma key -- memodifikasi berdasarkan area berwarna tertentu

Foto di sebelah kiri diberikan oleh seorang pengguna dalam Diskusi Forum IM. Ia ingin mengubah warna kaus si gadis, yang warnanya 'pink' bagus. Masalahnya, warna itu bukan sekadar 'pink', melainkan seluruh rentang gradasi 'pink' yang berbeda-beda. Seperti sudah terlihat di atas, untuk mengubah sebuah gambar, langkah pertamanya biasanya menghasilkan mask yang sesuai atas area yang Anda minati. Di sini saya akan memakai teknik yang dikenal sebagai Chroma Key untuk menghasilkan mask atas warna tertentu itu. Teknik ini umumnya mencari warna tertentu di dalam gambar untuk dipakai sebagai mask. Ini juga teknik yang dipakai untuk efek layar 'biru' dan 'hijau' yang banyak dipakai di TV dan film.

Pada dasarnya ini melibatkan pengekstrakan 'Hue' lewat Memisahkan gambar kanal, lalu mencari 'gradasi hue' yang diinginkan. Sebagai contoh...
|

  magick shirt.jpg -colorspace HSL -channel Hue -separate shirt_hue.jpg

Namun gambar Hue ini punya beberapa masalah.

  • Pertama, warna 'pink' sangat dekat dengan 'merah', yang berada di batas tempat Hue 'berputar balik'. Untuk memastikan ini tidak jadi masalah, saya memakai Modulate guna menggeser rona-nya menjauh dari 'diskontinuitas' rona tersebut. Ini bukan masalah untuk mengekstrak 'chroma key' bagi layar 'hijau' atau 'biru'.
  • Warna 'pink' ini juga bukan warna yang sangat jenuh, melainkan bernilai saturasi sangat rendah. Artinya 'hue'-nya tidak sekuat yang seharusnya.
  • Masalah lainnya adalah latar belakang abu-abunya!!!!! Abu-abu nyaris tidak punya rona, jadi saya perlu membuang setiap area yang saturasinya sedikit atau nol dari mask akhir saya, kalau tidak saya akan mengubah benda-benda di latar belakang. Perhatikan bahwa secara teknis ini tidak perlu kalau perubahannya saya batasi pada putaran rona, yang tidak memengaruhi warna tak jenuh.

Singkatnya, gambar masukannya akan lebih cocok kalau warnanya lebih cerah dan lebih kuat, serta tidak semirip itu dengan warna kulit (atau rambut). Kaus biru atau hijau yang kuat, misalnya. Tetapi saya akan bekerja dengan apa yang diberikan kepada saya. [IM Output]
Jadi mari kita ekstrak dan gabungkan kedua mask kanal itu. Perhatikan bahwa Hue = Gray64 setelah rona gambarnya 'diputar' memakai modulate, dan Saturated = Black untuk latar belakang abu-abunya. |

  magick shirt.jpg -modulate 100,100,33.3  -colorspace HSL \
          -channel Hue,Saturation -separate +channel \
          \( -clone 0 -background none -fuzz 5% +transparent grey64 \) \
          \( -clone 1 -background none -fuzz 10% -transparent black \) \
          -delete 0,1  -alpha extract  -compose multiply -composite \
          shirt_mask.png

Yang tersisa tinggal sejumlah 'bintik' kecil terisolasi yang bisa dibuang dengan Penghalusan morfologi (-morphology Smooth Square). Tidak sempurna, tetapi cukup untuk pekerjaan ini. Cara yang lebih baik adalah menyunting mask-nya dengan tangan sampai bersih. Nah, sebuah mask bisa dipakai dengan Masking komposit seperti yang kita lakukan pada contoh Eksposur ganda dan Anonimitas di atas. Namun kalau Anda memakai mask untuk memodifikasi gambar yang sudah ada (tanpa mendistorsi atau mengubah ukuran gambarnya), lebih mudah memakainya untuk menetapkan area mana yang tak-boleh-ditulisi. Ini dikenal sebagai Clip atau write mask (lihat "-mask" [IM Output]
Di sini saya membersihkan mask sebelumnya dari cacat-cacat kecil (opsional), lalu menegasikannya untuk menetapkan area mana yang ingin saya 'lindungi dari penulisan'. Lalu saya memasang mask ini, menggeser rona untuk mengubah 'pink' menjadi warna 'biru muda', dan menyimpan gambar hasilnya. |

  magick shirt_mask.png -morphology Smooth Square \
          -negate   shirt_write_mask.png

  magick shirt.jpg  -mask shirt_write_mask.png \
          -modulate 100,100,25     +mask shirt_blue.jpg

Ya, ada sedikit garis tepi 'pink', terutama di bagian dalam lengan bajunya. Selain itu sepetak kecil kulit di lengannya berubah menjadi biru agak gelap. Pada dasarnya ini cacat mask, dan dengan sedikit kerja lagi menyempurnakan mask-nya, masalah tersebut bisa dibetulkan. Tetapi hasilnya tidak buruk. Salah satu cara menghasilkan mask yang lebih baik adalah memakai gambar yang jauh lebih besar dan beresolusi lebih tinggi. Ketika gambar hasilnya nanti diubah ukurannya, cacat-cacat kecil itu (mudah-mudahan) ikut mengecil sampai tak berarti. [IM Output]
Masalah sesungguhnya pada contoh khusus ini, 'warna kunci'-nya begitu dekat dengan warna kulit normal sehingga Anda benar-benar sedang mencari perkara! Inilah sebabnya orang yang memakai teknik ini menggunakan layar 'hijau' dan 'biru', karena warna itu sejauh mungkin berbeda dari warna 'kulit' orang yang berdiri di depan layar. Perhatikan bahwa lebih baik Anda JANGAN memakai JPEG sebagai gambar sumber atau gambar kerja. Sungguh, JPEG semestinya hanya dipakai untuk gambar akhir saja! Ini sebagian dari alasan mengapa begitu banyak 'cacat mask' muncul sejak awal.

Green screen

_Future example, using Chroma Key Masking of a 'green screen background'. Expanded from the wikipedia artical,Chroma Key

Masalah sesungguhnya dalam penanganan 'green screen' adalah 'color spill', dengan rambut halus berwarna terang (pirang) dan area semitransparan yang menghasilkan efek color spill terburuk.

Penghapusan colorspill secara sederhana (perbaikan warna)_

g(r,g,b) => (r, min(g, b), b)

Penentuan alpha...

a(r,b,g) => K0 * b − K1 * g + K2

_Memakai nilai 1.0 untuk semua koefisien K adalah tebakan awal yang baik.

Karena warna latar belakangnya sudah diketahui dengan baik, dan begitu 'alpha'-nya diketahui, Anda bisa memakai teknik yang ditunjukkan di Penghapusan latar belakang dengan dua latar untuk menghilangkan 'halo green screen' yang mungkin ada, lebih baik daripada rumus warna yang pertama.

_

Sketsa arang ala seniman dari sebuah gambar

Transformasi sketsa arang menawarkan kepada pengguna cara yang sangat sederhana untuk menghasilkan rendering grayscale yang disederhanakan dari sebuah gambar. Ia tidak bekerja baik untuk 'gambar yang ramai', tetapi untuk gambar yang lebih sederhana hasilnya bisa sangat mencolok.

     magick holocaust_sm.jpg -charcoal 5 charcoal.gif

[IM Output] [IM Output]

Gambar garis untuk diwarnai anak-anak

Dalam sebuah diskusi panjang tentang Generating Coloring-In Pages di Forum Pengguna IM, resep berikut dikembangkan untuk mengubah foto sederhana menjadi sesuatu yang bisa diwarnai anak-anak. Berikut hasil terbaik yang kita punya sejauh ini, diterapkan pada foto yang saya ambil di tugu peringatan holocaust, Berlin.

  magick holocaust_sm.jpg \
          -edge 1 -negate -normalize \
          -colorspace Gray -blur 0x.5 -contrast-stretch 0x50% \
          color-in.gif
  # For heavily shaded pictures...
  #     #-segment 1x1 +dither -colors 2 -edge 1 -negate -normalize \

[IM Output] [IM Output]

Operasi-operasi terakhir di atas berusaha menghaluskan garisnya dan memperbaiki hasil keseluruhan. Tentu saja teknik di atas hanya berguna untuk gambar dengan perubahan warna yang tajam, dan sebaiknya gambar beresolusi lebih tinggi daripada yang saya pakai di atas. Untuk gambar kartun yang sudah punya garis tepi hitam dengan latar belakang berwarna terang, pemakaian Deteksi tepi dengan metode di atas akan langsung menghasilkan efek 'kembar' pada garis tepi hitamnya. Efek ini terlihat pada garis kembar keping-keping jalan setapak menuju tugu peringatan itu, di pojok kiri bawah. Ini artefak dari cara kerja Deteksi tepi, dan contoh lainnya bisa dilihat di bagian tersebut pada IM Examples. Solusinya adalah menegasikan gambar jenis ini sebelum memakai "-edge" untuk menggarisi area berwarnanya.

  magick piglet.gif -background white -flatten \
          -colorspace Gray -negate -edge 1 -negate -normalize \
          -threshold 50% -despeckle \
          -blur 0x.5 -contrast-stretch 0x50% \
          color-in_cartoon.gif

[IM Output] [IM Output]

Saya juga memakai "-threshold" supaya bisa membuang titik-titik lepas yang tampaknya gemar dihasilkan oleh "-edge". Setelah itu saya kembali berusaha menghaluskan garis-garis bergerigi akibat aliasing dalam gambarnya. Cara di atas ditambahi dalam sebuah diskusi tentang GIMP Photocopy Filter untuk memanfaatkan metode Compose Divide guna menemukan garis tepi.

  magick taj_mahal_sm.png -colorspace gray \
          \( +clone -blur 0x2 \) +swap -compose divide -composite \
          -linear-stretch 5%x0%   photocopy.png

[IM Output] [IM Output]

Operasi "-linear-stretch" di atas menyetel seberapa hitam area gelap gambarnya nanti, sedangkan 'sigma' pada "-blur" menentukan ketajaman gradasinya.

Sketsa pensil

Berbekal tutorial Photoshop (PSP) tentang mengonversi gambar menjadi Sketsa pensil, dognose dari Forum Pengguna IM berhasil menyusun perintah ImageMagick yang setara. Berikut konversi buatannya, disederhanakan menjadi beberapa perintah IM, sehingga banyak gambar bisa diproses secara batch menjadi bentuk 'sketsa pensil seniman'. Pertama kita perlu gambar "pencil.gif" khusus. Pembuatannya bisa lama, jadi untuk contoh ini saya membuatnya sedikit lebih kecil, sambil menjaga kemampuannya untuk di-tile ke seluruh gambar yang lebih besar. Lihat Memodifikasi gambar tile untuk detail tekniknya. Ini hanya perlu dikerjakan sekali dan setelah itu bisa dipakai ulang. Karena itu bisa dibuat yang jauh lebih besar untuk keperluan sendiri, agar terhindar dari efek tiling. Idealnya buat seukuran gambar yang akan Anda konversi. |

  magick -size 256x256 xc:  +noise Random  -virtual-pixel tile \
             -motion-blur 0x20+135 -charcoal 1 -resize 50% pencil_tile.gif

[IM Output]
Sekarang tinggal menimpakan dan membaurkan gambar gradasi 'pensil' ini dengan sebuah foto. Gambar pensilnya di-tile untuk membuat kanvas seukuran gambar yang sedang kita proses. Lalu ia diterapkan ke gambarnya memakai teknik yang ada di Kanvas yang di-tile. Hasilnya kemudian digabungkan ke salinan grayscale dari gambar aslinya.

     magick pagoda_sm.jpg -colorspace gray \
          \( +clone -tile pencil_tile.gif -draw "color 0,0 reset" \
             +clone +swap -compose color_dodge -composite \) \
          -fx 'u*.2+v*.8' sketch.gif

[IM Output] [IM Output]

Perhatikan bahwa karena operator "-blend" milik perintah "composite" tidak tersedia bagi perintah "magick", saya memilih melakukan hal yang setara memakai operator DIY "-fx". Barangkali ada cara yang lebih baik dan lebih cepat, tetapi lebih rumit, untuk melakukan ini. (saran sangat saya harapkan) Ini belum versi finalnya, karena operatornya melewatkan beberapa aspek penguatan tepi yang dibutuhkan untuk menggarisi sebagian perubahan warna yang lebih terang tetapi tajam dalam gambar. Bisakah Anda memperbaiki cara di atas? Algoritma di atas sudah dibangun ke dalam IM sebagai transformasi artistik "-sketch", meski tanpa penghalusan "-resize" untuk 'pencil tile' yang dihasilkan...

  magick pagoda_sm.jpg -colorspace gray -sketch 0x20+120 sketch_new.gif

[IM Output] [IM Output]

Penghapusan vignette Ketika mengambil foto (digital maupun bukan), lensa kamera umumnya menggelapkan tepi dan pojok gambarnya. Ini disebut 'vignetting'. Efek lensa ini malah begitu umum sampai sering dipalsukan dengan sengaja memakai operator "-vignette". Lihat Transformasi vignette. Martin Herrmann Martin-Herrmann@gmx.de ingin menghilangkan vignetting kamera dari foto-fotonya. Pada dasarnya ia memotret selembar kertas putih di bawah cahaya terang tanpa memakai lampu kilat. Lalu ia ingin menggabungkannya dengan foto-fotonya yang sebenarnya untuk mencerahkan tepi dan pojok gambar secukupnya. Pada dasarnya yang ingin kita lakukan adalah membagi foto aslinya dengan gambar grayscale dari foto kertas putih yang disinari terang itu, dan hasilnya akan mencerahkan bagian-bagian gambar sebesar penggelapan yang dialami foto 'kertas putih' tersebut. Ini pada dasarnya metode compose 'Divide' yang membagi gambar 'source' dengan gambar 'background'. Sebagai contoh,

  magick nikon18-70dx_18mm_f3.5.jpg  vegas_orig.jpg \
          -compose Divide -composite  vegas_fixed.jpg

[photo] [photo] [photo]
(klik untuk melihat gambar foto yang lebih besar)

Namun foto 'kertas putih' itu kemungkinan besar bukan putih sejati, dan Anda tentu tidak ingin mencerahkan gambarnya dengan warna 'putih kotor' tersebut. Untuk membetulkannya kita perlu mengalikan gambar pembaginya dengan warna piksel tengahnya. Berikut solusi akhir yang diberikan kepada Martin, yang memakai Operator DIY FX yang sangat lambat. Ini mendahului hadirnya Metode compose Divide yang bisa dipakai untuk mempercepat proses ini secara luar biasa. Foto putihnya juga di-grayscale-kan untuk menghilangkan distorsi warna, dan perhatikan bahwa saya mengubah urutannya, yang sekaligus akan mempertahankan 'meta-data' apa pun yang ada pada gambar asli (karena dalam kasus ini ia menjadi gambar 'destination'. |

  magick vegas_orig.jpg \( nikon18-70dx_18mm_f3.5.jpg -colorspace Gray \) \
          -fx '(u/v)*v.p{w/2,h/2}'   vegas_fixed_fx.jpg

[photo]
Kalau foto yang diperbesar Anda amati baik-baik, terutama pojok 'langit' kiri atas dan kanan atas, efek vignetting-nya terlihat, begitu pula koreksi yang sudah dilakukan. Ini bukan solusi yang sempurna, dan masih bisa disetel sedikit lagi. Misalnya, alih-alih memakai piksel penskala, kita bisa lebih dulu memproses gambar 'halaman putih'-nya, lalu menyetelnya juga demi hasil penghapusan vignette yang lebih baik. Perhatikan bahwa memakai JPEG tidak dianjurkan untuk pekerjaan fotografis jenis apa pun, karena formatnya bisa memunculkan artefak dan ketidakkonsistenan pada hasilnya. Format itu hanya bagus untuk menyimpan dan menampilkan hasil akhir. Pembahasan besar tentang koreksi vignettation ada di Forum Pengguna IM dalam diskusi Algorithmic vignetting correction for pinhole cameras?. Hal-hal yang dapat memengaruhi vignettation antara lain...

  • Jarak film dari lensa; makin jauh berarti cahayanya makin menyebar.
  • Luas 'lingkaran' bukaan (lensa atau lubang jarum) akibat sudut datang cahaya.
  • Susunan bahan kamera di sekitar bukaannya. Misalnya dudukan lensa atau ketebalan lubang jarumnya.