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

Contoh penggunaan ImageMagick -- mengaburkan dan menajamkan gambar

Kata pengantar dan indeks contoh penggunaan ImageMagick
Mengaburkan gambar

Mengaburkan gambar

Mengaburkan gambar sampai kabur mungkin tidak terlihat seperti operasi yang berguna, tetapi sebenarnya sangat berguna untuk membuat efek latar belakang dan bayangan. Blur juga sangat berguna untuk menghaluskan efek 'jaggies' agar tepi gambar di-anti-alias, dan untuk membulatkan fitur sehingga menghasilkan efek sorotan. Blur begitu penting sampai menjadi bagian tak terpisahkan dari pengubahan ukuran gambar, meski dengan metode blur yang berbeda, yang dibatasi hanya dalam batas satu piksel gambar asli. Ada dua operator blur gambar yang umum di ImageMagick, yaitu sebaran "-gaussian-blur" dan "-blur". Hasil keduanya sangat mirip, tetapi karena "-blur" memakai algoritma yang lebih cepat, umumnya operator ini lebih disukai daripada yang pertama, walaupun yang pertama lebih benar secara matematis. (Lihat Operator blur vs Gaussian blur.)

Argumen blur/Gaussian

Argumen untuk "-blur" dan "-gaussian-blur" sama saja, tetapi bagi orang yang baru mengenal pemrosesan gambar, nilai argumennya bisa membingungkan.

**-blur  {_radius_}x{_sigma_} **

Pengaturan (setting) yang penting di atas adalah nilai kedua, sigma. Nilai ini bisa dianggap sebagai perkiraan seberapa jauh gambar ingin 'disebar' atau dikaburkan, dalam satuan piksel. Bayangkan saja sebagai ukuran kuas yang dipakai untuk mengaburkan gambar. Angkanya berupa bilangan floating point, jadi nilai yang sangat kecil seperti '0.5' pun boleh dipakai. Nilai pertama, radius , juga penting karena mengendalikan seberapa luas area yang dilihat operator saat menyebarkan piksel. Nilai ini biasanya sebaiknya '0' atau minimal dua kali sigma. Untuk memperlihatkan efek kedua opsi itu, mari kita ambil gambar sederhana berikut, dengan banyak ruang di sekelilingnya (operator blur butuh ruang lapang untuk bekerja), lalu membuat tabel hasil untuk berbagai pengaturan operator. Saya juga sengaja memakai font yang punya garis tebal sekaligus tipis, supaya terlihat pengaburan detail garis halus dan area warna yang luas. |

  magick -font Gecko -pointsize 48  label:A \
          -bordercolor white -border 20x10  blur_source.png

[IM Output]

[IM Output]

radius yang kecil membatasi efek blur hanya pada piksel yang berada dalam jarak sekian piksel dari piksel yang sedang dikaburkan (radius berbentuk persegi). Karena itu, memakai radius yang sangat kecil seperti '1' pada praktiknya membatasi pengaburan hanya pada tetangga terdekat setiap piksel. Perhatikan bahwa sigma berupa bilangan floating point, sedangkan radius tidak. Bila diberi nilai floating point (atau nilainya dihitung secara internal), nilai itu dibulatkan ke atas ke bilangan bulat terdekat untuk menentukan 'ketetanggaan' blur. Seberapa besar sumbangan setiap tetangga pada hasil akhir tetap dikendalikan oleh sigma. sigma yang sangat kecil (kurang dari '1' ) membatasi sumbangan itu menjadi kecil saja, sedangkan sigma yang lebih besar membuat semua tetangga menyumbang dalam porsi yang lebih merata. sigma terbesar, '65355', akan menghasilkan perataan sederhana atas semua piksel dalam ketetanggaan persegi tersebut. Perhatikan juga bahwa untuk radius yang kecil tetapi sigma yang besar, muncul artefak pada hasil blur. Ini paling jelas terlihat pada keluaran untuk "-blur 5x8". Penyebabnya adalah ketetanggaan persegi yang kecil 'memotong' area yang dikaburkan, sehingga kurva Gaussian blur yang mulus terhenti mendadak, dan menghasilkan artefak ringing di sepanjang tepi yang tajam. Jadi...

Jangan pernah memakai radius yang lebih kecil daripada sigma untuk blur

Solusi idealnya cukup menyetel radius ke '0x' seperti pada baris terakhir tabel di atas. Dalam hal itu operator akan berusaha menentukan sendiri radius terbaik untuk sigma yang diberikan. Radius terkecil yang dipakai IM adalah 3, dan biasanya 3 * sigma untuk IM versi Q16 (radius yang lebih kecil dipakai pada IM Q8, karena presisinya lebih rendah). Satu-satunya saat saya memakai radius bukan nol adalah untuk sigma yang sangat kecil atau untuk blur khusus. Jadi..

Bila memungkinkan, pakailah radius nol untuk operasi blur

Nilai sigma yang kecil biasanya hanya dipakai untuk mengaburkan garis dan menghaluskan tepi pada gambar yang tidak memakai anti-aliasing (lihat Anti-aliasing untuk keterangan lebih lanjut). Dalam keadaan seperti itu, menurut saya blur '1x0.3' adalah nilai yang berguna untuk menghilangkan sebagian besar 'jaggies' dari gambar. Sebaliknya, nilai besar berguna untuk menghasilkan gambar yang kabur, untuk latar belakang atau efek bayangan (lihat Font majemuk), bahkan untuk efek sorotan gambar (seperti diperlihatkan di halaman Contoh lanjutan). Karena cara IM menangani argumen bergaya 'x', sigma pada bentuk di atas bersifat opsional. Padahal justru nilai itulah yang lebih penting, jadi semestinya radius yang opsional, karena radius bisa ditentukan otomatis. Akibatnya, argumen bernilai tunggal untuk operator konvolusi jenis ini tidak ada gunanya. Hal ini kecil kemungkinannya berubah karena sudah begitu sejak sangat lama, dan mengubahnya akan merusak terlalu banyak hal. Blur memakai pengaturan kanal Untuk mendemonstrasikan blur, mari kita mulai dari yang sederhana dengan membuat lingkaran hitam yang kabur di atas latar belakang biru muda... |

  magick -size 70x70 xc:lightblue \
          -fill black -draw 'circle 35,35 20,25'  circle_on_blue.png
  magick circle_on_blue.png    -blur 0x8         circle_on_blue_blur.png

[IM Output] [IM Output]
Seperti terlihat, mengaburkan gambar polos seperti ini tidak bermasalah. Hasilnya sesuai dugaan. Tetapi kalau kita coba lagi dengan gambar yang latar belakangnya transparan... |

  magick -size 70x70 xc:none \
          -fill black -draw 'circle 35,35 20,25'  black_circle.png
  magick black_circle.png       -blur 0x8        black_blurred.png

[IM Output] [IM Output]
Lho, apa yang terjadi! Gambarnya tidak berubah! Sebenarnya operatornya bekerja kok. Hanya saja "-blur", sebagai operator kanal grayscale, dibatasi oleh pengaturan "-channel" hanya pada tiga kanal warna. Artinya yang dikaburkan hanya tiga kanal warna gambar, sedangkan kanal transparansi atau alpha dibiarkan apa adanya. Namun pada contoh di atas, gambarnya adalah lingkaran yang sepenuhnya opak di atas kanvas latar belakang berwarna 'none', yang oleh IM didefinisikan sebagai hitam transparan penuh! Artinya kita punya lingkaran hitam di atas latar belakang hitam yang transparan. Dengan kata lain, sebuah gambar yang semua warnanya hitam, sebagian opak dan sebagian lagi transparan. Akibatnya, ketika gambar itu kita kaburkan, kita hanya mengaburkan hitam dengan hitam, yang seperti sudah bisa Anda tebak, menghasilkan hitam! Jadi warna hasilnya tidak berubah. Kita juga sama sekali tidak menyentuh kanal alpha atau transparansi gambar, sehingga transparansi gambar pun tetap seperti semula. Alias, lingkaran hitam! Yang sebenarnya ingin kita lakukan adalah mengaburkan keempat kanal gambar, terutama kanal alpha. Untuk itu kita setel pengaturan "-channel" ke keempat kanal gambar (misalnya dengan nilai 'RGBA'). |

  magick black_circle.png  -channel RGBA  -blur 0x8  black_blurred_RGBA.png

[IM Output]
Sekadar merangkum...

Selalu pakai pengaturan "-channel RGBA" saat mengaburkan gambar yang punya transparansi.

| IM versi 5.5.7 akan mengaburkan keempat kanal warna secara otomatis, tetapi operatornya punya efek lain yang bermasalah untuk gambar bertransparansi. LihatBug blur dengan transparansi untuk keterangan lebih lanjut.
| Sebagian format gambar seperti GIF dan JPEG tidak menangani piksel semitransparan. Karena itu saya sarankan memakai format PNG untuk gambar apa pun yang punya warna semitransparan, bila memungkinkan.
Seperti terlihat di atas, pengaturan "-channel" sangat penting bagi operator grayscale seperti "-blur". Tetapi bukan hanya itu yang bisa jadi penting saat memakai operator semacam itu. Misalnya, mari kita ulangi contoh 'lupa pengaturan "-channel"' tadi, kali ini dengan lingkaran kuning. |

  magick -size 70x70 xc:none \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_circle.png
  magick yellow_circle.png       -blur 0x8           yellow_blurred.png

[IM Output] [IM Output]
Perhatikan, alih-alih mendapat gambar yang tidak berubah seperti pada lingkaran hitam, kali ini yang muncul adalah lingkaran kuning yang jelek dengan warna hitam merembes di sekeliling tepinya. Ih! Masalah ini disebabkan oleh satu kenyataan yang jarang disadari pengguna baru IM.

Piksel transparan punya warna, meski Anda tidak bisa melihatnya.

Pada contoh di atas warna transparan itu hitam, dan warna itulah yang bocor ke dalam lingkaran kuning. Tentu saja ini bisa dibereskan: dengan menyetel pengaturan "-channel" secara benar untuk gambar transparan, semuanya berjalan sesuai harapan. |

  magick yellow_circle.png  -channel RGBA  -blur 0x8  yellow_blurred_RGBA.png

[IM Output]

Internal blur

Mari kita lanjutkan selangkah lagi dengan contoh yang lebih rumit, yang memungkinkan kita menelusuri apa persisnya yang dikerjakan "-blur" di dalamnya. Di sini kita membuat gambar yang sangat khusus berupa lingkaran kuning yang digambar di atas latar belakang merah yang transparan penuh. Dengan begitu kita bisa melihat pengaruh warna transparan saat gambar dikaburkan. |

  magick -size 70x70 xc:'#F000' \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_on_red.png

[IM Output]
Perhatikan bahwa warna "#F000" adalah merah yang transparan penuh. Artinya area latar belakang gambar sebenarnya berwarna merah yang tak terlihat, bukan hitam transparan penuh seperti yang lebih lazim. Ini penting untuk pengujian berikutnya. Kita bisa melihat warna bagian gambar yang transparan dengan menghapus kanal alpha gambar memakai operator "-alpha off". |

  magick yellow_on_red.png   -alpha off  yellow_on_red_matte.png

[IM Output]
Sekarang mari kita coba lagi mengaburkan warna gambar saja, memakai pengaturan "-channel" bawaan, yaitu 'RGB'. |

  magick yellow_on_red.png   -blur 0x8   yellow_on_red_RGB.png

[IM Output]
Seperti terlihat, latar belakang merah yang transparan penuh itu kini merembes ke lingkaran kuning yang terlihat, memberinya tepi jingga yang menarik, sama seperti sebelumnya. Anda mungkin menyukai efek ini, tetapi ada cara yang lebih baik untuk membuatnya ketimbang mengandalkan warna transparan penuh yang tak terlihat. Sekadar membuktikan bahwa gambar ini bisa dikaburkan dengan benar, mari kita kerjakan sebagaimana mestinya... |

  magick yellow_on_red.png  -channel RGBA  -blur 0x8  yellow_on_red_RGBA.png

[IM Output]
Alasan blur yang menyertakan kanal alpha tidak menghasilkan warna jingga seperti sebelumnya adalah: ketika operator "-blur" melihat bahwa kanal alpha ikut terlibat (menurut pengaturan "-channel" yang berlaku), operator itu hanya mengaburkan dengan memakai piksel yang terlihat menurut kanal alpha tersebut. Bila kanal alpha tidak terlibat, kanal itu diabaikan sama sekali, dan merah transparan penuh akan tercampur blur dengan kuning sehingga menghasilkan bermacam gradasi jingga.Pada dasarnya algoritma blur sudah dimodifikasi agar mengabaikan semua piksel yang transparan penuh dalam gambar, apa pun warnanya. Piksel semitransparan tetap ikut terlibat, tetapi pengaruhnya pada hasil juga diredam sesuai seberapa terlihatnya piksel itu. Hasilnya, lingkaran tadi menjadi bercak kuning semitransparan yang kabur. Persis seperti yang mungkin ingin dicapai pengguna. Kalau memang mau, warna dan kanal alpha bisa Anda kaburkan secara terpisah, sehingga 'penyesuaian visibilitas' pada algoritma itu terputus dari kanal warna. Hasilnya lebih mirip matahari yang bersinar menembus kabut cokelat kotor. |

  magick yellow_on_red.png  -channel  A  -blur 0x8 \
                             -channel RGB -blur 0x8  yellow_on_red_GS.png

[IM Output]
Contoh terakhir ini menghasilkan apa yang akan dihasilkan operator grayscale murni seandainya sama sekali tidak ada interaksi antara kanal alpha dan warna-warna di dalam gambar (baik yang transparan maupun tidak). Artinya, kanal merah, hijau, biru, dan alpha masing-masing dikaburkan sepenuhnya terpisah satu sama lain, seolah-olah tiap kanal adalah gambar grayscale tersendiri. Ingat saja, karena pengaturan "-channel" bawaannya adalah 'RGB', perilaku bawaannya adalah tidak mengaburkan kanal alpha, dan mengaburkan warna yang tak terlihat bersama warna yang terlihat di dalam gambar. Untung saja "-blur" tidak lagi selalu berupa operator grayscale murni. Meski begitu operator ini masih bisa dipakai dengan cara itu kalau memang Anda mau. Namun pilihan itu tidak selalu ada... | _Sebelum IM versi 6.2.4-4, operator "-blur" dan "-gaussian-blur" diterapkan sebagai operasi grayscale murni, sehingga tidak menyesuaikan bobot warna menurut 'visibilitas' kanal alphanya. Akibatnya, blur dalam bentuk apa pun pada gambar bertransparansi hampir selalu menghasilkan efek 'halo hitam' yang jelek, seperti yang sengaja dibuat pada contoh sebelumnya.

Ini digolongkan sebagai bug besar berjangka panjang di dalam distribusi IM, dan termasuk yang sangat sulit disiasati. Untuk keterangan lebih lanjut tentang masalah ini, lihat halaman Bug blur dengan transparansi._

FUTURE: Blur and Trimming Images.

Operator blur vs Gaussian blur

Sempat ada kebingungan tentang operator mana yang lebih baik untuk mengaburkan gambar, "-blur" atau "-gaussian-blur". Pertama-tama, "-blur" lebih cepat, tetapi kecepatan itu diperolehnya lewat teknik dua tahap: pertama pada satu sumbu, lalu pada sumbu yang lain. Sebaliknya operator "-gaussian-blur" lebih benar secara matematis karena mengaburkan ke segala arah sekaligus. Selisih biaya kecepatan antara keduanya bisa sangat besar, sampai 10 kali lipat atau lebih, tergantung seberapa banyak blur yang dikerjakan. Secara lebih teknis, "-blur" adalah filter konvolusi ortogonal 1 dimensi dengan 2 lintasan, sedangkan "-gaussian-blur" adalah filter konvolusi silindris 2 dimensi. Lihat Konvolusi untuk keterangan lebih lanjut. Hasil kedua metode itu semestinya sama, berbeda dengan operasi konvolusi 'terfilter' lainnya. Namun sistem dua lintasan berarti ada tahap antara, dan di tahap itu efek pembulatan atau kuantum bisa terjadi. Cristy juga menegaskan hal ini ketika melaporkan... Anda sebaiknya selalu memakai "-blur" alih-alih "-gaussian-blur" karena lebih cepat. Sebagian piksel di bagian dalam akan berbeda karena pembulatan, dan piksel tepi bisa berbeda karena hilangnya efek tepi Virtual Pixel, sekali lagi pada tahap antara itu. Ringkasnya, kedua operator itu sedikit berbeda, tetapi hanya sedikit sekali. Karena "-blur" jauh lebih cepat, pakailah operator itu. Saya memakainya di hampir semua contoh yang melibatkan blur.

Blur besar memakai resize

Memakai nilai sigma yang besar untuk mengaburkan gambar sangat lambat. Namun ada satu teknik yang bisa dipakai untuk mempercepat prosesnya. Ini hanya metode kasar dan masih perlu ketelitian matematis untuk memperbaiki hasilnya. Pada dasarnya blur besar itu lambat karena diperlukan jendela atau 'kernel' yang besar untuk menggabungkan banyak piksel sekaligus, bagi setiap piksel dalam gambar. Padahal resize (memperkecil gambar) melakukan hal yang sama tetapi menghasilkan lebih sedikit piksel dalam prosesnya. Tekniknya pada dasarnya adalah memperkecil gambar, lalu memperbesarnya lagi untuk menghasilkan efek blur yang berat. Filter Gaussian sangat berguna untuk ini karena Anda bisa langsung menentukan define Gaussian Sigma.Misalnya, di sini saya mengaburkan gambar rose yang kecil dengan nilai sigma 5 memakai kedua metode itu.

  magick rose: -blur 0x5   rose_blur_5.png
  magick rose: -filter Gaussian -resize 50% \
          -define filter:sigma=2.5 -resize 200%  rose_resize_5.png

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

Perhatikan bahwa pengaturan sigma (yang hanya dipakai pada tahap pembesaran) besarnya hanya separuh dari yang sebenarnya diinginkan, karena ukuran gambar juga digandakan. Blur keseluruhan bisa dibuat lebih besar dengan menyetel rasio pengecilan sekaligus nilai sigma yang diberikan. Tahap pengecilan itulah yang memberi percepatan, tetapi tahap pembesaran sebaiknya tetap memuat sedikit blur sebagai kendali mutu. Ini sekadar contoh tekniknya. Teknik ini sebenarnya ditujukan untuk nilai sigma yang sangat sangat besar pada gambar yang sangat sangat besar pula. Misalnya untuk blur dengan sigma 10 atau lebih pada foto digital masa kini. Teknik ini juga dipakai untuk menghasilkan blur bertingkat dari satu gambar pada Sparse color Shepards, alternatif blur.


Menajamkan gambar

Sedang dikerjakan

Penajaman adalah algoritma grafika komputer yang paling sering muncul di acara TV dan film. Bayangkan polisi 'membersihkan' foto pelat nomor mobil perampok bank yang di-'zoom', atau wajah seseorang pada rekaman kamera toko yang kabur, dan Anda paham maksud saya. Pada dasarnya yang mereka lakukan adalah berusaha memulihkan detail halus gambar yang hilang akibat pengaburan alami oleh lensa kamera atau karena resolusi gambarnya rendah. Argumen sharpen? (dijabarkan)

Faktor yang paling penting adalah sigma. Sebab itulah kendali sebenarnya atas
operasi penajaman.  Sigma menjadi suku kedua di atas hanya karena kebetulan
sejarah.
Nilainya bisa bilangan floating point apa pun, dari  .1  yang praktis tanpa
penajaman sampai 3 atau lebih untuk penajaman berat.   0.5 sampai 1.0 cukup bagus.

Radius sekadar batas efeknya, begitu pula threshold.

Radius hanya dalam satuan bilangan bulat karena begitulah cara kerja algoritmanya,
makin besar makin lambat.  Tetapi nilainya minimal 1 kali, atau lebih baik lagi
2 kali sigma.
Pertama-tama lupakan angka pertama, pakai saja 0 sehingga IM akan memakai angka terbaik untuk faktor 'sigma' yang Anda berikan. Makin besar sigma, makin tajam hasilnya. -sharpen 0x.4 sangat kecil
-sharpen 0x1.0 penajaman sekitar seukuran satu piksel
-sharpen 0x3.0 kemungkinan sudah terlalu besar
Operator "-sharpen" boleh dibilang kebalikan dari blur. Cara kerjanya pun hampir sama. Untuk contoh yang memperlihatkan kaitannya dengan blur, lihat Image Processing By Interpolation and Extrapolation. Misalnya, mari kita kaburkan gambar sederhana lalu mencoba menajamkannya lagi untuk menghilangkan blur itu.
  magick -font Gecko -pointsize 72 label:A  A_original.jpg
  magick A_original.jpg     -blur    0x3    A_blur.jpg
  magick A_blur.jpg         -sharpen 0x3    A_blur_sharp.jpg
  magick A_blur_sharp.jpg   -sharpen 0x3    A_blur_sharp_x2.jpg

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

Seperti terlihat, hasilnya tidak sempurna, karena menyebarkan piksel membuat sudut-sudut tajam gambar jadi kurang tegas. Perhatikan terutama penebalan tambahan yang muncul di sudut kedua garis di bagian paling atas gambar, serta garis-garis tipis yang nyaris lenyap. Bahkan mengulangi operasinya atau memperbesar area penajaman pun tidak akan mengembalikan gambar persis seperti aslinya, karena detail yang lebih halus pada dasarnya sudah hilang oleh blur tadi. Meski begitu, detail makronya bisa dipulihkan dengan cukup baik. Algoritma penajaman yang sanggup memulihkan detail halus pada gambar yang kabur atau di-zoom berat itulah yang menghasilkan banyak uang di paket perangkat lunak yang dipakai kepolisian, astronom, dan badan mata-mata pemerintah.

Gambar unsharp

Sedang dikerjakan

Operator "-sharpen" dan "-unsharp" sama-sama bekerja dengan teknik yang persis sama, yaitu mengurangkan hasil blur dari gambar asli. Untuk rincian internal cara kerja "-sharpen" dan "-unsharp" yang sesungguhnya, lihat 'Un-sharpen' gambar menggunakan blur.

  magick A_blur.jpg       -unsharp 0x5        A_blur_unsharp.jpg

[IM Output] [IM Output]

Dari komentar pada  [Sharpening with ImageMagick](http://redskiesatnight.com/2005/04/06/sharpening-using-image-magick/) dari Alex Beels

  Menyamakan dengan unsharp GIMP
    Ambil radius gimp lalu tambah 1 => sigma IM
    Threshold dibagi 255       => Threshold IM

  Jadi  GIMP  radius=2  amount=1.5  threshold=5  menghasilkan
    -unsharp 0×3+1.5+0.0196

  Ada juga yang menyarankan   im_sigma = sqrt(gimp_radius)

**Catatan mentah dari Fred Weinhaus**

Gambar blur untuk pengujian.

A_original.jpg

magick A_original.jpg -blur 0x3 A_original_blur3.jpg

sharpen hanyalah gambar yang di-blur bergaya gaussian lalu dikurangkan dari
gambar untuk membuat gambar tepi (filter lolos-tinggi), kemudian dipadukan lagi
dengan gambar asli dalam porsi sama, sehingga diperoleh gambar yang dipertegas lolos-tinggi.

magick A_original_blur3.jpg -sharpen 0x3 A_original_blur3_sharp3.jpg

unsharp lebih rumit, meski serupa. Selisihnya (hasil tepi) diambil seperti
di atas, yaitu seperti sharpen TETAPI hanya sebagian atau kelipatan tertentu
darinya yang dipadukan dengan gambar asli, DAN hanya bila selisihnya di atas suatu threshold. Jadi
unsharp 0x3+1+0 pada dasarnya sama dengan sharpen 0x3

magick A_original_blur3.jpg -unsharp 0x3+1+0
A_original_blur3_unsharp3_1_0.jpg

compare -metric rmse A_original_blur3_sharp3.jpg
A_original_blur3_unsharp3_1_0.jpg null:
164.661 (0.00251256)

Perbedaannya mungkin karena salah satunya memakai filter blur yang separable
(gaussian) sedangkan yang lain tidak. Atau bisa jadi sekadar perbedaan kecil
di bagian lain implementasi IM.

Kalau paduan dengan gambar asli dikurangi, penajamannya jadi lebih sedikit.

magick A_original_blur3.jpg -unsharp 0x3+0.5+0
A_original_blur3_unsharp3_0p5_0.jpg

Kalau paduan dengan gambar asli diperbanyak, penajamannya jadi lebih kuat.

magick A_original_blur3.jpg -unsharp 0x3+2+0
A_original_blur3_unsharp3_2_0.jpg

Kalau threshold dinaikkan, penajamannya berkurang lagi.

magick A_original_blur3.jpg -unsharp 0x3+2+0.2
A_original_blur3_unsharp3_2_0p2.jpg

Beberapa skrip saya (Fred), binomialedge, gaussianedge, sharpedge, memakai
konsep pemaduan ini (antara hasil filter lolos-tinggi dan gambar asli) dan
penjelasannya ada bersama skrip itu. Thresholding pada skrip saya dikerjakan
dengan cara berbeda dan untuk tujuan yang berbeda pula.

**Penajaman memakai de-konvolusi**

Ada teknik yang memakai de-konvolusi (pembagian dalam bentuk frekuensi gambar
yang dibangkitkan Fast-Fourier).  Teknik ini paling ampuh bila 'blur' persis
yang diterapkan pada gambar asli diketahui, atau bisa dihitung dengan cara tertentu.

Untuk sekarang baru metode 'DIY' mentah yang tersedia di IM
dan beberapa metode semacam itu didemonstrasikan (diuji coba) di sub-bagian
[Fourier Multiply/Divide](https://usage.imagemagick.org/fourier/fft_math/).

Membuat bayangan

Operator "-shadow" adalah operator tingkat lanjut yang dikembangkan bersama halaman contoh IM ini. Pada dasarnya operator ini mewakili blur dan pewarnaan ulang yang sangat rumit atas bentuk transparansi gambar yang diberikan. Ini operasi yang dulu terus-menerus dikerjakan pengguna IM, tetapi butuh pengetahuan cukup banyak untuk mengetahui cara mengerjakannya dengan benar. Operator ini mengambil sebuah gambar (biasanya klon, dan mungkin sudah punya sedikit transparansi) lalu me-magick-nya menjadi gambar bayangan yang kemudian bisa diletakkan di bawah gambar asli pada offset tertentu, (umumnya memakai operator khusus Layers Merge. Sebagai contoh, berikut metode standar untuk memberi bayangan pada gambar yang ada, memakai warna bayangan navy agar cocok dengan halaman web ini. |

  magick rose: \( +clone  -background navy  -shadow 80x3+5+5 \) +swap \
          -background none   -layers merge  +repage   shadow.png

[IM Output]
Perhatikan bagaimana gambar bayangannya diberi offset dengan benar terhadap gambar aslinya. Nilai 'sigma ' blur bahkan boleh dinolkan untuk membuat bayangan keras, tetapi tetap semitransparan. |

  magick rose: \( +clone  -background navy  -shadow 60x0+4+4 \) +swap \
          -background none   -layers merge +repage  shadow_hard.png

[IM Output]
Memakai "-layers merge" untuk melapiskan gambar bayangan dengan gambar aslinya memudahkan pembuatan bayangan dari sumber cahaya di arah mana pun, bukan cuma dari kiri atas. |

  magick rose: \( +clone -background navy -shadow 80x3-5+5 \) +swap \
          -background none  -layers merge +repage  shadow_other.png

[IM Output]
Cara termudah memang tinggal memakai Layers Merge, tetapi cara itu cenderung menggeser offset keseluruhan gambar hasilnya. Pergeseran itu bukan disebabkan oleh metode pelapisannya, melainkan oleh "+repage" yang menghapus offset negatif maupun positif yang mungkin ada pada gambar 'layer' hasilnya. Lihat Bayangan dan masalah offset untuk teknik alternatifnya. | MetodeLayers Merge ditambahkan pada IM v6.3.6-2. Sebelum itu Anda harus memakai operator perataan layer serupa, "-mosaic". Namun operator itu punya masalah (lihat berikutnya).

Bayangan berbentuk

Nah, "-shadow" memang dirancang untuk gambar berbentuk, (dan inilah alasan kerumitannya). Sebagai contoh, berikut font berbayang yang khas. |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:A -trim \
          \( +clone   -background navy   -shadow 80x3+3+3 \) +swap \
          -background none   -layers merge +repage  shadow_a.png

[IM Output]
Kalau di gambar asli sudah ada cukup ruang untuk memuat bayangan tanpa terpotong, perintah berikut bisa dipakai. Perintah ini memakai metode komposisi khusus 'DstOver' supaya urutan kedua gambar tidak perlu ditukar. |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:'A ' \
          \( +clone -background navy -shadow 80x3+3+3 \) \
          -background none -compose DstOver -flatten  shadow_a_size.png

[IM Output]
Anda mungkin melihat sedikit pemotongan di sini karena gambar aslinya tidak punya cukup ruang tambahan untuk bayangan yang diminta.

Bayangan dan masalah offset

Masalah dengan bayangan adalah bayangan yang kabur meluas ke segala arah. Untuk mengimbanginya, operator "-shadow" memperbesar gambar aslinya dengan menambahkan border sebesar 2 kali nilai 'sigma ' blur yang diberikan. Artinya, kalau bayangan di-blur dengan 'x3', gambarnya akan diperbesar 12 piksel (2 kali 3 piksel di setiap sisi). Untuk mengimbangi pembesaran itu, gambar bayangan juga diberi offset kanvas virtual negatif yang sesuai supaya posisinya benar relatif terhadap gambar yang dibayangi. Untuk gambar biasa itu berarti gambar bayangan yang dihasilkan punya offset negatif. Namun hal ini menimbulkan masalah bila IM Anda tidak menyediakan metode 'merge' pada "-layers". Sebagai contoh, di sini kita mencoba menambahkan bayangan di sisi kiri gambar, seolah-olah cahaya datang dari kanan atas. |

  magick rose: \( +clone  -background navy  -shadow 60x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left_clipped.png

[IM Output]
Seperti terlihat, bayangannya terpotong oleh operator "-mosaic" gara-gara offset negatif itu. Tidak bagus! Satu solusinya adalah menambahkan offset awal pada gambar asli supaya offset gambar bayangan yang dihasilkan tidak negatif. |

  magick rose: -repage +11+0\
          \( +clone   -background navy   -shadow 80x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left.png

[IM Output]
Metode lain adalah meng-offset kedua gambar sebesar nilai yang sesuai setelah bayangannya dibuat. Cara ini menghilangkan offset negatif sebelum keduanya di-"-mosaic". Perhatikan pemakaian flag '!' bersama "-repage" untuk menambahkan offset itu ke kedua gambar. |

  magick rose: \( +clone -background navy -shadow 80x3-5-5 \) +swap \
          -repage +11+11\! -background none  -mosaic  shadow_tl.png

[IM Output]
Ruang yang dibutuhkan setidaknya 2×'sigma '-'offset ', atau dalam kasus ini 2×3--5 ⇒ 11 piksel, kalau tidak bayangannya berisiko terpotong. Meski begitu, ruang sekitar 'sigma '-'offset ' biasanya menghasilkan pemotongan pada tingkat yang masih bisa diterima. Alternatif lain adalah memperluas gambar asli supaya tersedia cukup ruang untuk bayangan akhirnya. Ini cara TERBAIK menangani bayangan, sekaligus mempertahankan letak asli gambar pada kanvas virtual. Sebagai contoh, di sini saya memberi gambar asli ruang tambahan untuk bayangan, lalu menaruh gambar bayangannya langsung di bawahnya. Saya menyertakan border pada gambar hasil yang ditampilkan supaya terlihat bahwa gambar akhirnya tetap berada di tengah gambar yang sudah 'dilapangkan' itu. |

  magick rose: -bordercolor None -border 11x11 \
          \( +clone -background navy -shadow 80x3+5+5 \) \
          -background none -compose DstOver -flatten \
          -compose Over  shadow_space.png

[IM Output]
Padding yang dibutuhkan setidaknya 'sigma '+abs('offset ') atau lebih baik lagi 2×'sigma '+abs('offset '), untuk memastikan bayangannya tidak terpotong. Padding boleh asimetris demi menghemat ruang, tetapi biasanya dipakai padding simetris (seperti di atas) demi kepraktisan. | Perhatikan bahwa meski pengaturan "-compose Over" di atas sebenarnya tidak diperlukan, pengaturan itu tetap dianjurkan. Kalau tidak, operasi berikutnya (bahkan pada perintah "magick" yang lain) bisa terpengaruh dan hasilnya tak terduga. Artinya, pengaturan compose yang tidak standar bisa memengaruhi operasi lain, termasuk: pelapisan gambar, penambahan border atau frame, atau sekadar komposisi lain.

Bayangan dan composite

Banyak orang di forum membuat gambar bayangan lalu mencoba memakai "-composite" yang tingkatnya lebih rendah untuk menggabungkan gambar-gambar itu. Misalnya dengan langsung menimpakan gambar asli ke atas gambar bayangan (yang lebih besar) yang sudah dibuat. |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) \
          +swap -composite  +repage shadow_composite.png

[IM Output]
Hal pertama yang perlu diingat, Operator komposisi itu tingkatnya sangat rendah dan tidak membaca offset layer maupun kanvas virtual apa pun yang mungkin dimiliki gambar asli atau operator shadow. Nyatanya kita tetap perlu menghapus atau menyesuaikan offset bayangan yang mungkin negatif (buruk) itu memakai pengaturan repage. Artinya, offset yang Anda lihat pada contoh di atas muncul semata-mata karena cara shadow memperbesar gambar masukan demi memberi ruang bagi bayangan. Letak bayangan itu semata-mata akibat pembesaran gambar bayangan sebesar 2 kali sigma. Lebih jauh lagi, kalau Anda memakai 'bayangan keras' (sigma nol), bayangannya sama sekali tidak akan ter-offset, sehingga bayangan itu tertutup oleh gambar aslinya, kecuali mungkin efek halo gelap di tepinya. Pada dasarnya Anda melepaskan perhitungan offset bawaan yang disediakan operator shadow. Tentu saja sebagai gantinya Anda bisa menghitung dan menyetel sendiri pengaturan geometry/gravity composite yang sesuai, dan cara termudahnya adalah memakai pengaturan "-gravity Center", karena gambar bayangan yang diperbesar itu meluas sama rata di semua sisi. |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) +repage \
          +swap -gravity center -geometry -3-5 -composite shadow_geometry.png

[IM Output]
Perhatikan bahwa offset geometry yang dipusatkan itu negatif karena urutan gambarnya ditukar.

Garis luar bayangan

"-shadow" juga bisa dipakai untuk membuat garis luar yang kabur pada suatu bentuk, misalnya teks. Dengan memakai Layers Merge, IM otomatis menambahkan ruang tambahan yang dibutuhkan blur semitransparan itu. |

  magick -background none -fill white \
              -font Candice -pointsize 48 label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \) +swap \
          -background none   -layers merge +repage  shadow_outline.png

[IM Output]
Di sini terlihat satu masalah dalam memakai bentuk yang di-blur untuk membuat garis luar. Tepi bentuknya akan selalu setidaknya 50% transparan, memang begitulah sifat cara kerja blur. Untuk mengimbanginya, Anda bisa memperbesar bentuk gambar yang akan dibayangi, (contohnya lihat Garis luar lembut lebih pekat). Lebih baik lagi, transparansi gambar bayangannya bisa disetel memakai penyesuaian level sehingga transparansi 50% di sepanjang tepi bentuk itu menjadi opak penuh. |

  magick -background none -fill white \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \
             -channel A -level 0,50% +channel \) +swap \
          +repage -gravity center -composite   shadow_outline_darker.png

[IM Output]
Metode lain untuk menangani posisi dan offset bayangan pada dasarnya adalah membuang semua offset yang dibuat "-shadow" (memakai "+repage"), lalu menimpakan gambar asli tepat di tengah gambar bayangan yang lebih besar itu. Dengan menambahkan offset komposisi "-geometry", bayangannya kemudian bisa di-offset sebagai langkah tersendiri. |

  magick -background none -fill white -stroke black \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background navy  -shadow 80x3 \) +swap \
          +repage -gravity center -geometry -3-3 -composite \
          shadow_geometry_offset.png

[IM Output]
Namun perhatikan bahwa offsetnya justru negatif dibandingkan yang biasanya Anda pakai untuk memposisikan bayangan. Sebabnya, yang sebenarnya di-offset adalah bentuk teksnya, bukan bayangannya, jadi arahnya berlawanan. Meski begitu metode ini akan memotong gambar sumber aslinya, bukan gambar bayangannya, kalau offsetnya menjadi lebih besar daripada dua kali 'sigma' blur. Karena itu metode ini tidak bisa dipakai untuk 'bayangan keras' (memakai 'sigma' blur 'x0'), kecuali Anda menyertakan ruang padding pada gambar bayangan sebagai tempat menimpakan gambar aslinya. Namun dengan bayangan lembut yang kabur, hal itu jarang jadi masalah. Untuk beberapa contoh praktis pembuatan bayangan, lihat Bayangan pada thumbnail dan Pembuatan logo 3-D yang lebih baik.

Bayangan pada perintah montage

Sejak IM v6.3.1 pengaturan "-shadow" pada "magick montage" mulai memanfaatkan bayangan 'berbentuk' yang lembut dari operator ini. |

  montage -label Rose  rose: \
          -background none -geometry +5+5 -shadow  shadow_montage.png

[IM Output]
Namun tidak disediakan kendali untuk menyetel warna, tingkat kekaburan, dan offset bayangan itu, sebab "magick montage" memang tidak pernah menyediakan kendali semacam itu selain opsi on/off sederhana.

Internal bayangan

Di dalamnya "-shadow" sangat rumit. Pada dasarnya operator ini bukan cuma perlu memperbesar gambar untuk memuat 'bayangan lembut yang kabur', tetapi juga perlu mengaburkan bentuk gambar yang ada, menyetel warnanya sebagaimana mestinya, dan akhirnya menyesuaikan offset page/kanvas virtual; semuanya sesuai spesifikasi pengguna. Misalnya, dengan perintah "-shadow" berikut...

    magick image_clone.png -shadow 60x4+5+5   image_shadow.png

Operasi IM yang setara adalah...

  magick image_clone.png -alpha set \
          -bordercolor none  -border 8  -repage -8-8\!  \
          -channel A -virtual-pixel transparent \
               -blur 8x4 -evaluate multiply .60 +channel
          -fill {background_color} -colorize 100% \
          -repage +5+5\!     image_shadow.png

Perhatikan bahwa nilai 8 di atas adalah dua kali sigma blur, supaya tersedia cukup ruang bagi bayangan yang di-blur. Namun ini berarti gambar akhirnya akan lebih besar sebanyak 4 kali sigma piksel. Untuk mengimbanginya, ditambahkan pula offset negatif sebesar itu. Nah, karena gambar yang dihasilkan akan diberi offset negatif sebesar 2 kali sigma, perlu berhati-hati agar bayangannya tidak terpotong atau salah posisi terhadap gambar aslinya. Itu bisa dilakukan dengan memberi gambar asli offset positif di awal (misalnya 8-5 atau +3+3 piksel), atau memakai Layers Merge yang memahami offset negatif tanpa memotong gambar akhirnya. Pada dasarnya, pakailah teknik-teknik sebelumnya untuk menangani dengan benar kemungkinan offset negatif pada gambar bayangan. Format PNG dan MIFF adalah satu-satunya format gambar yang saya tahu bisa menangani offset negatif sekaligus piksel semitransparan. Saya menganjurkan PNG dipakai bila gambar bayangan disimpan untuk dipakai lagi nanti.
Seperti sudah saya bilang, "-shadow" adalah operasi yang sangat rumit. Tentu saja, meski contoh di atas mendekati apa yang dikerjakan "-shadow" di dalamnya, keduanya tidak persis sama. Operator "-shadow" yang sesungguhnya tidak mengubah satu pun pengaturan global, seperti warna border/background/fill, atau pengaturan virtual-pixel yang berlaku. Operator ini juga melewati pemakaian operator "-blur" bila sigma blurnya disetel 0, supaya fungsi blur tidak memberi peringatan untuk sigma atau radius nol.
FUTURE: overlaying multiple shadows

Overlaying two images with shadows, produces an unrealistic darkening of the
shadow where the shadow overlaps.  This darkening would be correct if each
object was lit by separate light sources, but more commonly the objects are
lit by the same light source.

The solution is to overlay the one image over the other, applying the shadow
effects to the opaque parts of each layer image in turn. That is, the
background shadow should be generated separately into each layer.  Remember
the shadow cast by the top most layer should become fuzzier than the shadow
contribution of the bottom most layer.

This complexity gets worse when you have three objects shadowing each other.
Also the offset and blurring from the shadow of each object should technically
be separate.  To generate that level of complexity, probably a 3-d ray-tracing
program should be used instead (sigh).

Blur khusus

Ada beberapa jenis blur lain yang ditambahkan pada IM versi 6, dengan kegunaan yang sangat khusus. Blur jenis ini bekerja dengan cara tertentu, bukan ke segala arah seperti kebanyakan operasi bergaya 'convolve' lainnya. Hasilnya pun mungkin tidak sebaik metode lain untuk membuat blur khusus, misalnya mendistorsi gambar sebelum dan sesudah blur yang lebih biasa. Contohnya lihat Trik siklus polar, dan Blur elips (dipetakan).

PERINGATAN: Semua blur ini masih eksperimental, dan sintaksisnya bisa berubah!

Radial blur

Gambar bisa Anda kaburkan melingkar memakai "-radial-blur", seolah-olah gambar itu berputar terus. Meski secara teknis ini blur rotasional atau angular, bukan blur radial. CATATAN: Hasil yang jauh lebih bermutu (walau jauh lebih lambat) bisa dicapai dengan teknik Depolar-Polar - blur rotasional.Namun perhatikan bahwa seperti operator "-blur" biasa, "-radial-blur" pun dipengaruhi pengaturan "-channel". |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 35,5 35,65' \
          -stroke yellow -strokewidth  9 -draw 'line 35,5 35,65' \
          -channel RGBA  -radial-blur 30   radial_blur.png

[IM Output]
Objeknya bisa diletakkan tidak di tengah (dengan menambahkan ruang pada gambar) untuk efek "-radial-blur" yang lebih menarik. |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 90   radial_blur_90.png

[IM Output]
Argumen blurnya adalah sudut yang dicakup radial-blur. Artinya, separuh sudut itu ke masing-masing arah dari gambar aslinya. Jadi sudut 180 mencakup setengah lingkaran, sedangkan 360 derajat akan mengaburkan gambar dalam satu lingkaran penuh. |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180   radial_blur_180.png

[IM Output]
|

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 360   radial_blur_360.png

[IM Output]
Anda bahkan bisa menambahkan sedikit warping gambar supaya efeknya lebih menarik... |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180 -swirl 180 radial_swirl.png

[IM Output]
Radial blur satu lingkaran penuh bisa dipakai untuk menghasilkan gradien melingkar yang kasar. Namun merumuskan bentuk yang tepat agar gradiennya benar bisa sangat sulit, dan mungkin tidak sepadan dengan usahanya. Meski begitu saya sudah mencobanya... |

  magick -size 80x80 xc:lightblue -fill red \
          -draw "path 'M 40,40   C 43,43 47,47 50,40 \
                  S 52,23 40,20   S 14,22 10,40   S 15,75 40,79 Z'" \
          radial_gradient_pre.gif
  magick radial_gradient_pre.gif  -radial-blur 360  radial_gradient.gif

[IM Output] [IM Output]

Motion blur

Blur yang meluruh secara linear hanya ke satu arah bisa ditambahkan (dengan memberikan radius dan sigma, ditambah sudut arah blurnya) memakai "-motion-blur". Ini membuat gambar Anda tampak seolah-olah gambar itu (atau kameranya) bergerak sangat sangat cepat. |

  magick -size 70x70 xc:none  -channel RGBA \
          -fill yellow  -stroke red  -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+45  motion_blur.png

[IM Output]
Perhatikan bahwa objeknya bukan hanya mendapat ekor, tetapi tepi di arah geraknya juga tercampuri latar belakang yang di-blur. Blur pada tepi depan ini bisa diperbaiki dengan menggambar ulang atau menimpakan gambar aslinya lalu menerapkan lagi "-motion-blur" yang lebih kecil berkali-kali. |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x8+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x6+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x2+45 \
          motion_blur_redraw.png

[IM Output]
Beberapa motion blur bisa dipakai untuk menyebarkan ekor objek yang bergerak itu. Semacam asap atau kobaran api yang buyar. |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+25 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+55 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+40 \
          motion_blur_spread.png

[IM Output]
Teknik ini bisa dipakai untuk menghasilkan bayangan yang menyebar di tanah. Atau Anda bisa membuat motion blur lalu me-radial-blur-nya sedikit, meski itu butuh penggeseran gambar supaya titik pusatnya pas. Anda juga bisa menambahkan sedikit warping gambar supaya lebih menarik lagi... |

  magick -size 70x100 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 35,80 45,70'  -motion-blur 0x20+90 \
          -background none  -rotate 50  -wave 5x25  -rotate -50 \
          -gravity center   -crop 70x100+0+0  +repage \
          -draw 'circle 35,80 45,70'  -blur 0x2 \
          motion_wave.png

[IM Output]

Perhatikan bahwa "-radial-blur" mengaburkan ke kedua arah, sedangkan "-motion-blur" hanya ke satu arah. Untuk keduanya saya sarankan gambar Anda diberi ruang tambahan di sekeliling tepinya (umumnya memakai "-border"), sebab kedua blur khusus ini punya efek tepi kuat yang sebaiknya dihindari. Kalau Anda menemukan contoh atau pemakaian yang lebih praktis atau lebih menarik dari yang di atas, tolong kirimkan salinannya ke email saya (alamatnya ada di footer halaman).


Feathering bentuk memakai blur

Sedang dikerjakan

PERINGATAN: Bagian ini sudah usang, dan pengguna yang ingin melakukan feathering gambar dengan benar sebaiknya melihatFeathering bentuk memakai distance. Yang diperlihatkan di sini dikenal sebagai 'Blur Feathering', yang seperti ditunjukkan di bagian akhir merupakan 'teknik feathering palsu'. Meski begitu metode ini tetap berguna, tetapi hanya untuk bentuk gambar yang 'cembung'. Saat memotong sebuah bentuk dari gambar, sering kali Anda ingin mem-feather atau sedikit mengaburkan tepi bentuk itu supaya tampak lebih halus, untuk menyamarkan bagian di luar bentuk yang mungkin tanpa sengaja ikut terbawa, atau supaya gambarnya menyatu dengan latar belakang tanpa terlihat jelas sebagai hasil salin-tempel. Pada dasarnya, alih-alih membiarkan tepi bentuknya 'keras', tepi itu dilembutkan untuk 'memalsukan' anti-aliasing atau blur lensa, sehingga tempelannya lebih mulus. Sebagai contoh, di sini saya punya gambar GIF yang saya timpakan pada latar belakang berwarna terang |

  magick shape.gif -background wheat -flatten  overlaid.png

[IM Output]
Namun karena yang saya timpakan adalah gambar GIF dengan transparansi boolean yang tepinya penuh aliasing alias bertangga, gambarnya terlihat sangat tidak menyatu dengan latar belakangnya. Kalau yang Anda hadapi gambar nyata, hasil di atas akan tampak sangat artifisial. Tetapi dengan sedikit mengaburkan transparansi gambarnya, saya bisa membuat tempelan itu menyatu lebih mulus dengan latar belakang. |

  magick figure.gif -alpha set -virtual-pixel transparent \
          -channel A -blur 0x0.7  -level 50,100% +channel \
          -background wheat -flatten  edge_blured.png

[IM Output]
Omong-omong, ini teknik yang persis sama dengan yang dipakai untuk membuat Tepi lembut pada thumbnail. Untuk contoh lainnya, lihat hasil skrip masking "feather" buatan Fred Weinhaus. Seperti terlihat, cara ini bekerja sangat baik untuk kasus sederhana, ketika kontras antara gambar yang ditimpakan dan latar belakangnya tinggi. Namun masalah serius muncul kalau Anda ingin memakai faktor blur feathering yang jauh lebih besar, atau kalau kedua gambarnya sama-sama berwarna sangat terang.
Perhatikan bahwa karena blur meluas ke dalam sekaligus ke luar area berbentuk itu, kanal alpha harus disetel supaya tepi bentuknya bernilai nol (transparan penuh), tetapi cepat menjadi opak penuh begitu menjauh dari tepi. Contoh penyetelan kanal alpha semacam itu disediakan oleh CLUT dengan penanganan transparansi Penyetelan ini krusial, sebab kalau tidak, alih-alih menyamarkan area di luar bentuk, Anda justru menambahkan bayangan atau halo semitransparan dari area di luar bentuk itu. Pada dasarnya berupa 'warna tak terdefinisi' semitransparan yang tadinya tersembunyi oleh transparansi gambar. Namun blur punya masalah yang khususnya menjengkelkan, yaitu ikut menghaluskan garis luar bentuknya. Sebagai contoh... |

  magick -size 100x60 xc: -draw 'polygon 5,5 50,30 5,55 95,30' \
          sharp_angles.gif

[IM Output]
Kalau bentuk ini Anda kaburkan, hasilnya... |

  magick sharp_angles.gif -blur 0x5  feather_blurred.gif

[IM Output]
Perhatikan bagaimana ujung-ujung mask lebih tersamarkan daripada tepinya. Perhatikan juga bagaimana sudut bagian dalamnya seakan 'terisi', yang pada gambar bertransparansi bisa membuat piksel transparan penuh menjadi semitransparan. Artinya piksel berwarna tak terdefinisi bisa jadi malah terlihat! Ini lebih jelas terlihat kalau gambarnya kita threshold. |

  magick feather_blurred.gif  -threshold 50%  feather_blur_thres.gif

[IM Output]
Inilah masalah memakai 'blur' sebagai metode feathering gambar. Dan ini terutama jadi perhatian saat berurusan dengan hal seperti jari dan telinga, juga area di antara kedua kaki. Artinya, efeknya pada bentuk juluran itu sendiri sekaligus pada ruang di antaranya. Kalau gambarnya punya garis batas seperti kartun, hal ini bukan masalah besar untuk feather '1 piksel'. Tetapi untuk gambar nyata (yang batasnya tidak tegas), ini masalah sungguhan. Solusi yang benar adalah mencari semacam ukuran seberapa jauh sebuah titik dari tepi bentuknya, tetapi sedemikian rupa sehingga dua tepi yang berdekatan tidak saling menjumlahkan efeknya. Operasi pengukuran jarak ini kini sudah ditambahkan ke IM, dan dikenal sebagai Distance Morphology. Untuk rincian pemakaiannya bagi feathering, lihat Feathering bentuk memakai distance.


Operator terkait

Modifikasi gambar dasar
  -despeckle -enhance
  -noise  -spread -displace

  -median
    Setel warna tiap kanal piksel ke nilai median semua piksel dalam radius
    tertentu. (median = nilai paling tengah dari semua nilai yang ditemukan,
    separuh di satu sisi, separuh di sisi lain).  Ini salah satu cara "de-speckling"
    gambar  (misalnya debu pada hasil scan).  Tetapi bisa mendistorsi tepi, menimbulkan
    aberasi kanal warna, dan menghilangkan garis tipis.

    Filter ini teknik terbaik untuk menghilangkan noise Salt & Pepper,
    terutama pada gambar grayscale.

    Disarankan agar trim pada hasil scan memakai gambar yang sudah difilter median
    untuk mencoba menemukan bounding box yang tepat.

  -adaptive-sharpen  radius x sigma
    Sesuaikan penajaman supaya terbatas pada area dekat tepi gambar
    sebagaimana ditentukan oleh deteksi tepi.

    Lihat diskusi forum
      https://magick.imagemagick.org/viewtopic.php?f=1&t=10266

  -adaptive-blur   radius x sigma
    Kaburkan gambar, kecuali di dekat tepi sebagaimana ditentukan deteksi tepi
    pada gambar itu.  Misalnya membuat warnanya lebih halus, tetapi tanpa merusak
    tepi tajam yang mungkin dimiliki gambar.

  -adaptive-resize
    Ubah ukuran tetapi usahakan tidak mengaburkan lintas perubahan warna yang tajam