Contoh penggunaan ImageMagick -- koreksi lensa
- Kata pengantar dan indeks contoh penggunaan ImageMagick
- Pengantar koreksi lensa
- Kendala tanpa penskalaan
- Set parameter siap pakai
- Kalibrasi dari nol
- Pendekatan dasar
- Menentukan set parameter lensa dengan Hugin
- Mendefinisikan himpunan titik
-
Merekayasa balik parameter dari thumbnail buatan kamera
Contoh Contoh keyboard (oleh El-Supremo)
Mengoreksi distorsi lensa (PDF) Saat memotret, gambar yang dihasilkan sebenarnya terdistorsi oleh efek lensa sekaligus efek perspektif bola. Jika berencana memakai foto tersebut, umumnya kedua efek itu perlu dikoreksi, dan itulah yang akan dibahas di bagian ini. Sebagian besar isi halaman ini disumbangkan oleh Wolfgang Hugemann.
Pengantar koreksi lensa
Lensa fisheye dan lensa sudut lebar berbiaya rendah (atau lebih tepatnya lensa zoom yang disetel ke panjang fokus pendek) umumnya menghasilkan distorsi barrel yang mencolok. Namun distorsi ini sebagian besar dapat dikoreksi dengan menerapkan transformasi algoritmis yang sesuai pada foto digital. Salah satu algoritma koreksi lensa yang paling banyak dipakai, diperkenalkan oleh Panorama Tools dan digunakan oleh PTlens, juga ditawarkan oleh ImageMagick sebagai metode koreksi distorsi barrel. Dalam pendekatan ini, distorsi dikendalikan oleh empat parameter transformasi a, b, c, d, yang harus dipilih dengan cermat agar distorsi dari sebuah lensa tertentu (atau lebih tepatnya kamera zoom pada panjang fokus tertentu) dapat dikoreksi. Nilai yang tepat untuk parameter-parameter ini nyaris mustahil ditemukan lewat coba-coba. Berikut ini dijelaskan cara menentukan parameter koreksi lensa model tersebut secara efektif dengan Hugin, antarmuka pengguna grafis gratis untuk Panorama Tools yang tersedia bagi berbagai sistem operasi. Jika tidak ingin berurusan dengan seluk-beluk koreksi lensa, lewati saja sisa halaman ini dan belilah PTlens, yang menawarkan koreksi lensa canggih untuk sejumlah besar kamera digital dan lensa dengan harga wajar (berkat basis data lensanya yang besar). Dewasa ini, sebagian kamera digital (seperti Nikon P7000) bahkan sudah menyertakan koreksi lensa dalam langkah pemrosesan gambar internalnya. Untuk foto yang diambil dengan kamera tanpa kemampuan itu, ImageMagick memungkinkan koreksi lensa disatukan sebagai satu langkah dalam skrip pemrosesan gambar yang lebih besar. Teks berikut adalah versi ringkas dari makalah Mengoreksi distorsi lensa (PDF) (yang membahas penerapannya pada rekonstruksi kecelakaan). Penjelasan di sini bersifat lebih praktis, dengan penekanan pada cara memperoleh parameter koreksi lensa yang memadai.
Kendala tanpa penskalaan
Seperti dijelaskan di distorsi barrel, distorsi barrel didefinisikan oleh rumus matematis
R = ( a * r^3 + b * r^2 + c * r + d ) * r
dengan r sebagai jarak ke pusat geometris gambar pada foto digital dan R sebagai radius padanannya di gambar asli. Seperti biasa pada pemetaan semacam ini, persamaan di atas mendefinisikan semacam "fungsi pencarian warna", yaitu ke mana warna piksel pada radius r harus dicari. Radius r dan R dinormalkan terhadap setengah dimensi gambar yang lebih kecil (biasanya tinggi gambar), sehingga r = R = 1 untuk titik tengah tepi atas dan tepi bawah gambar. Saat mengoreksi foto digital, kita perlu memperhatikan kendala tanpa penskalaan
a + b + c + d = 1
yang jelas memberikan R = 1 untuk r = 1. Panorama Tools menghitung parameter d dari parameter lain lewat
d = 1 - a - b - c
sehingga kita tinggal punya tiga parameter model yang bebas, dan karena itu parameter d biasanya dihilangkan. ImageMagick akan menghitung d secara otomatis lewat kendala tanpa penskalaan bila parameter itu tidak diberikan. Jadi baris perintah ImageMagick yang khas untuk koreksi lensa kira-kira seperti ini
magick input.jpg -distort barrel '0.06335 -0.18432 -0.13008' output.jpg
dan menyerahkan perhitungan d kepada ImageMagick. Metode koreksi lensa Panorama Tools yang kita bicarakan di sini mengandaikan sumbu optis lensa dan pusat gambar berimpit, yang dalam praktiknya tidak sepenuhnya benar (karena toleransi pabrikasi). Selain itu, metode ini mengabaikan efek seperti distorsi mustache. Meski begitu, dalam praktik ia tampak bekerja dengan ketepatan yang mengagumkan.
Seperti diperlihatkan oleh kurvanya (a = 0.05, b = -0.25, c = 0.05), hubungan ini biasanya dipakai pada rentang 0 sampai 1.5 (rasio aspek 3:2), melewati titik (0,0) dan (1,1), dan harus degresif untuk r > 1.
Set parameter siap pakai
Basis data lensa PTlens yang sekarang, yang menjadi "sumsum" program itu, terenkripsi dan hanya bisa dibaca oleh PTlens sendiri. Namun sampai Februari 2006, basis data PTlens masih ditulis dalam format XML, yaitu format teks yang mudah disunting. Versi 2006 dari basis data XML PTlens itu masih (secara legal) tersedia di situs SourceForge Hugin dan menyediakan data untuk banyak model kamera lama. Ketika basis data PTlens menjadi terenkripsi, para pengembang Hugin mencoba membangun basis data lensa berformat XML yang bebas sebagai alternatif. Basis data itu bernama LensFun dan dapat diunduh. Basis data ini disertai antarmuka pemrograman yang lengkap, tetapi pada dasarnya yang diperlukan hanyalah informasi kamera Anda di dalam file XML tersebut. Sebagai contoh, parameter koreksi lensa untuk Nikon Coolpix 995 yang dahulu populer ada di file compact-nikon.xml, yang terletak di direktori \data\db. File itu bisa diperiksa memakai editor teks atau penampil XML:
<lens>
<maker>Nikon</maker>
<model>Standard</model>
<mount>nikon995</mount>
<cropfactor>4.843</cropfactor>
<calibration>
<distortion model="ptlens" focal="8.2" a="0" b="-0.019966" c="0" />
<distortion model="ptlens" focal="10.1" a="0" b="-0.010931" c="0" />
<distortion model="ptlens" focal="13.6" a="0" b="-0.002049" c="0" />
<distortion model="ptlens" focal="18.4" a="0" b="0.003845" c="0" />
<distortion model="ptlens" focal="23.4" a="0" b="0.006884" c="0" />
<distortion model="ptlens" focal="28.3" a="0" b="0.008666" c="0" />
<distortion model="ptlens" focal="31" a="0" b="0.009298" c="0" />
</calibration>
</lens>
Seperti dapat dibaca dari lembar data teknis kamera, rentang zoom Nikon Coolpix 995 adalah 8.2 – 31.0 mm, setara dengan 38 – 152 mm pada kamera film 35 mm. Ini memberi crop factor 152 / 31 = 4.90, yang kira-kira sesuai dengan 4.843 yang tertera di file XML. Koefisien koreksi distorsi barrel disediakan untuk tujuh panjang fokus (Catatan penerjemah: naskah asli menulis 'enam', padahal yang didaftar ada tujuh), yaitu 8.2 mm, 10.1 mm, 13.6 mm, 18.4 mm, 23.4 mm, 28.3 mm, dan 31.0 mm. Untuk lensa ini koefisien a dan c disetel nol, artinya distorsinya hanya dijelaskan oleh suku orde dua b. Perhatikan bahwa banyak lensa juga punya nilai untuk parameter a dan c, dan nilai-nilai itu pun sebaiknya diinterpolasi dengan cara serupa. Bila kita punya foto DSCN0001.jpg yang diambil dengan Nikon Coolpix 995 pada panjang fokus terpendek, foto itu dapat dikoreksi oleh ImageMagick lewat
magick DSCN0001.jpg -distort barrel '0.0 -0.019966 0.0' DSCN0001_pt.jpg
(Akhiran nama file _pt dipakai PTlens untuk menandai gambar yang sudah dikoreksi.) Untuk ketujuh panjang fokus yang disediakan, koefisien koreksi b dapat dibaca langsung dari file XML. Untuk panjang fokus lain, nilai yang cocok dapat ditentukan lewat interpolasi antara dua panjang fokus tetangganya. Sebagai alternatif, kebergantungan b pada panjang fokus f dapat dihampiri oleh polinomial
b = 0.000005142 * f^3 - 0.000380839 * f^2 + 0.009606325 * f - 0.075316854
Jadi pada langkah pertama panjang fokus (yang dibaca dari informasi EXIF) dipakai untuk menghitung parameter koreksi lensa b, lalu pada langkah kedua koreksi lensa (yaitu distorsi barrel) dijalankan dengan nilai itu sebagai parameter b. Bagian Windows menampilkan contoh VBScript yang memakai persamaan di atas, dengan panjang fokus diekstrak dari foto Nikon Coolpix 995 lewat magick identify.
Kalibrasi dari nol
Pendekatan dasar
Dalam menentukan parameter lensa, semua program bersandar pada paradigma yang sama: pemetaan perspektif yang ideal seharusnya memetakan garis lurus di dunia nyata menjadi garis lurus di dalam gambar. Jadi bila sekumpulan titik dunia nyata P0, P1, ..., Pn diketahui terletak pada satu garis lurus, bayangannya p0, p1, ..., pn pun harus jatuh pada satu garis lurus. Setiap penyimpangan dari aturan ini harus dianggap berasal dari distorsi lensa. Kita perlu dua titik untuk menentukan dua parameter yang mendefinisikan sebuah garis lurus (misalnya kemiringan dan perpotongan dengan sumbu y). Setiap titik tambahan yang diberikan akan menyumbang satu persamaan lagi untuk menentukan parameter koreksi lensa. Jadi bila pendekatan fungsional kita hanya punya satu parameter bebas b (seperti pada Nikon Coolpix 995 di atas), kita harus menyediakan sedikitnya tiga titik pada sebuah garis lurus di dunia nyata beserta bayangannya untuk menentukan parameter koreksi lensa b yang dicari. Lebih konkretnya: model distorsinya hanya memakai parameter b, artinya koordinat gambar terkoreksi X1, Y1 dapat dihitung dari koordinat foto digital lewat
r = s * sqrt(x1^2 + y1^2)
X1 = [(1-b) + b r^2] * x1
Y1 = [(1-b) + b r^2] * y1
Y1 = k1 * X1 + k2
Ini menghasilkan satu persamaan untuk setiap titik yang diberikan pada garis lurus yang sama
[(1-b) + b r^2] * y1 = k1 * [(1-b) + b r^2] * x1 + k2
with: r = s * sqrt(x1^2 + y1^2)
Dengan demikian tiga titik dunia nyata beserta titik bayangannya sudah cukup untuk menentukan parameter yang menggambarkan garis lurus dan distorsi lensa k1, k2, b. Dalam praktik, koordinat titik dunia nyata jarang diketahui, sehingga diperlukan lebih dari sekadar tiga titik untuk menentukan parameter yang dicari. Kebanyakan perangkat lunak kalibrasi memakai grid persegi panjang berisi garis-garis lurus (sering kali papan catur) untuk menghasilkan sekumpulan persamaan, lalu menghitung parameter pemetaannya dengan pencocokan kuadrat terkecil nonlinear. Sebagian program menghasilkan sendiri himpunan titik kontrolnya, sering kali memakai templat yang sudah disiapkan; program lain menuntut penggunanya memilih titik kontrol dari gambar kalibrasi.
Menentukan set parameter lensa dengan Hugin
Berikut ini akan diperagakan cara menentukan satu set parameter koreksi lensa memakai Hugin. Di situs Hugin ada pula "Simple Lens Calibration Tutorial" yang siap pakai, tetapi pada saat tulisan ini dibuat (2014) tutorial itu tampak terlalu sederhana untuk menghasilkan parameter andal yang nantinya bisa dipakai untuk beragam koreksi. Pertama-tama, Anda harus mendapatkan pola uji yang sesuai. Pada dasarnya pola papan catur berukuran sekitar 10 × 7 kotak, dicetak pada kertas ISO 216 A3 atau sejenisnya, sudah memadai dan memang sering dipakai. Namun lensa zoom murah (yang disebut lensa varifokal) sebaiknya disetel ke fokus tak hingga selama kalibrasi, sebab panjang fokus sebenarnya bisa jauh berbeda dari yang tertanam di EXIF untuk fokus dekat. Untuk lensa berfokus tetap, pola uji papan catur juga bisa dipakai, dan ini terutama dianjurkan saat mengalibrasi lensa fisheye, karena mungkin sulit menemukan benda nyata yang cukup besar untuk menutupi seluruh bidang pandangnya. Jadi khususnya saat mengalibrasi lensa zoom / kamera zoom, sebaiknya potretlah sebuah bangunan modern, seperti disarankan di situs PTlens. Ikuti petunjuk yang diberikan di sana. Fotonya boleh saja memperlihatkan distorsi perspektif:
Jalankan Hugin, klik tombol 'Add images ...' di tab pertama, lalu buka gambar kalibrasinya. (Lihat hugin.sourceforge.net untuk tangkapan layar antarmuka Hugin.) Di bagian bawah tab itu, setel 'Optimise' ke 'Custom parameters' (yang akan menambahkan tab baru bernama 'Optimiser', tab yang tanpa langkah itu tidak akan pernah muncul). Di tab 'Stitcher', setel 'Projection' ke 'Rectilinear'. Di tab 'Control Points', foto uji Anda tampil dua kali dan himpunan titik yang terletak pada garis lurus yang sama dapat didefinisikan dengan memilih kelompok titik itu pada kedua versi foto tersebut.
Tetapi jangan memilih titik yang persis sama di kedua versi sehingga titiknya identik pada kedua gambar, sebab hal itu akan menggiring optimiser untuk menempuh jalan termudah dan menentukan parameter korespondensi satu-satu. Sebaliknya, pilihlah titik yang berbeda pada garis yang sama di kedua versi gambar. Untuk keperluan uji coba, definisikan beberapa himpunan titik semacam itu, sebaiknya di dekat tepi gambar, tempat garis lurusnya lebih terdistorsi. Anda akan mendapati bahwa mendefinisikan himpunan titik seperti ini di Hugin cukup merepotkan (yang mungkin menjadi salah satu sebab basis data lensfun begitu kecil).
Lalu pindah ke tab 'Optimiser' dan pilih parameter yang akan dioptimalkan dengan mengeklik kiri sambil menekan tombol ctrl. (Lihat petunjuk di bagian atas tab.) Saya menyarankan untuk mengoptimalkan 'Yaw(y)', 'Pitch (p)' serta parameter lensa 'a', 'b', dan 'c'. Bidang pandang horizontal 'Hfov (f)' dihitung dari data EXIF di gambar uji, memakai entri FocalLengthIn35mmFilm f:
Hfov = 2 × arctan (18 mm / f)
dengan 18 mm adalah setengah lebar negatif 35 mm (yang berukuran 36 × 24 mm). Lalu tekan tombol 'Optimize now!'. Parameter 'a', 'b', dan 'c' yang dihasilkan seharusnya jatuh di bawah 0.01 untuk lensa sudut lebar dan di bawah 0.1 untuk lensa fisheye. Bila nilainya lebih besar, optimasinya kemungkinan gagal. Kalau begitu, periksa himpunan titik di tab 'Control Points': titik kontrolnya mungkin tidak urut atau tidak terkait dengan benar ke garis yang bersesuaian. Optimiser juga tampaknya peka terhadap himpunan awal (secara matematis: vektor awal) yang diberikan, jadi menyetel semua parameter ke nol bisa jadi pilihan yang keliru. Vektor awal dapat disunting dengan mengeklik ganda nilainya di tab 'Optimiser' atau dengan mengaktifkan kotak centang 'Edit script before optimising' di sudut kanan bawah halaman tab. Ini akan memunculkan kotak teks sebelum optimasi dijalankan, sehingga bagian yang bersangkutan pada file proyek Hugin bisa disunting. Kembalikan vektor awal a, b, c ke a0.0 b0.0 c0.0 (atau nilai lain yang sesuai) sebelum menjalankan ulang optimiser. Pengalaman menunjukkan bahwa menyetel 'a' ke suatu nilai positif kadang membantu, terutama untuk lensa fisheye. Untuk kamera dengan lensa tetap, kalibrasi ini cukup dilakukan sekali untuk selamanya. Untuk kamera berlensa zoom, seluruh rentang panjang fokus harus dicakup dengan mengalibrasi pada sekitar lima panjang fokus yang berbeda. Setelah set parameter semacam itu ditentukan, ujilah di ImageMagick lewat
magick calibration_image.jpg -distort barrel '_a b c_ ' flat.jpg
dengan mengganti nilai _a b c_ dengan nilai yang baru saja ditentukan. Garis-garis pada gambar keluaran seharusnya lurus sempurna; kalau tidak, optimasinya gagal dan harus diulang dengan vektor awal yang berbeda atau himpunan titik kontrol yang sudah diperbaiki.
Mendefinisikan himpunan titik
Untuk kalibrasi yang serius, dianjurkan menyunting sendiri file proyek Hugin dan mendefinisikan koordinat titik serta himpunan titiknya dengan cara lain. File proyek itu adalah file teks biasa berekstensi PTO; Anda bisa membukanya dengan editor teks sederhana dan mengisikan daftar titik. Satu baris di bagian # control points tampak seperti ini:
c n0 N0 x175.0 y87.8 X1533.3 Y62.6 t3
dengan x, y adalah koordinat piksel di gambar sumber (gambar kiri pada tab) dan X, Y adalah koordinat piksel di gambar tujuan (gambar kanan pada tab) – yang dalam kasus khusus ini sebenarnya dua versi dari gambar yang sama. (Biasanya keduanya berupa dua gambar berbeda yang berdampingan dalam sebuah panorama.) Awalan c n0 N0 adalah kode baku, dan penutup t3 adalah penomoran garis lurus yang bersangkutan, dimulai dari indeks 3. Seperti terlihat pada contoh di atas, koordinat pikselnya boleh punya bagian pecahan. Tentu saja x, y dan X, Y harus terletak pada garis lurus yang sama. Namun keduanya tidak boleh identik, sebab dalam kasus itu optimiser akan menolak bekerja (lihat di atas). Cara termudah menjamin hal ini adalah memakai titik yang sama di kedua gambar, tetapi dengan urutan terbalik untuk koordinat tujuannya, misalnya pakai p1, p2, p3, p4 di gambar kiri dan P4, P3, P2, P1 di gambar kanan. Tentukan koordinat piksel di gambar sumber dengan alat pemilih titik. Penampil gambar apa pun bisa dipakai untuk ini, asalkan mampu menyimpan data semacam itu. Alat lintas platform untuk keperluan ini misalnya Fiji. Saya (yang bekerja di Windows) memakai polyline di WinMorph untuk melakukannya. Ikuti strategi yang sudah ditetapkan saat memilih titik, misalnya ambil jumlah titik yang sama pada tiap garis yang (kurang lebih) horizontal, bergerak dari kiri ke kanan (yaitu mengikuti pola zig-zag di seluruh gambar, seperti sinar katode pada tabung televisi). Strategi semacam ini akan menyederhanakan pengurutan koordinat titik tujuan. Baris-baris file teks yang mendefinisikan koordinat titik sumber dan tujuan lalu bisa disusun secara manual atau dengan bantuan perangkat lunak. (Saya memakai subrutin Excel VBA untuk tugas ini.) Setelah siap, salin daftar titik itu ke bagian yang bersesuaian pada file PTO, simpan, lalu buka kembali dengan Hugin. Hasilnya seharusnya tampak seperti ini:
Contoh siap pakai, lengkap dengan gambar kalibrasi dan proyek Hugin yang bersesuaian, disediakan dalam file ZIP olympus_c2500l.zip. Rekayasa balik dari thumbnail buatan kamera Ada beberapa kasus ketika kita sudah memiliki sepasang gambar, yang satu terdistorsi barrel dan yang lain sudah dikoreksi. Koreksi itu mungkin dikerjakan oleh perangkat lunak koreksi lensa lain, yang tidak memberi tahu kita parameter koreksinya. Selain itu, banyak kamera masa kini (2019) menawarkan koreksi lensa yang dijalankan secara internal untuk gambar JPEG. Namun fungsi ini biasanya tidak diterapkan pada gambar RAW. (Ya, namanya juga raw.) Meski begitu, gambar RAW memuat pratinjau JPEG yang koreksinya sudah diterapkan oleh kamera. ImageMagick dapat membaca gambar RAW dengan bantuan dcraw. Jadi gambar raw itu bisa di-magick menjadi JPEG tanpa koreksi lensa, lalu hasilnya dibandingkan dengan thumbnail JPEG yang sudah dikoreksi secara internal. Untuk pasangan gambar semacam itu, parameter koreksinya dapat dihitung secara langsung. Dengan memilih pasangan titik yang bersesuaian di kedua gambar, kita bisa langsung menetapkan hubungan antara r dan R. ![[Gambar RAW]](../static/img/lens/raw_marks.jpg)
Gambar raw (terdistorsi barrel) ![]()
Thumbnail terkoreksi (yang akan direkayasa balik) |
Seperti terlihat pada contoh di atas, kita bebas memilih pasangan titik mana pun; pasangan itu tidak harus mengikuti garis lurus, bahkan tidak harus terletak pada pola geometris. Kita hanya perlu mengisi sebuah tabel dengan nilai r dan R yang bersesuaian, lalu menghitung kurva regresinya, misalnya lewat diagram spreadsheet.
![[Kalibrasi]](../static/img/lens/calibration_points.gif)
Titik kalibrasi | ![[Regresi]](../static/img/lens/regression_curve.gif)
Regresi (diskalakan)
Maka baris perintah ImageMagick-nya adalah
magick barrel.jpg -distort barrel '0.0099 -0.0678 0.0014 1.0511' flat.jpg
Perintah yang sama juga bisa diterapkan langsung pada gambar berformat kamera DNG "barrel.dng".
Contoh koreksi lensa
Camp Mobile
Foto asli campmobile di sebelah kiri terpaksa diambil dari jarak yang cukup dekat saat senja, karena ruang geraknya terbatas oleh lereng curam di belakang si pemotret. (Kondisi pencahayaan yang buruk itulah yang menjelaskan rona biru akibat pencerahan berlebihan pada pascaproses.) Foto aslinya memperlihatkan distorsi barrel yang mencolok, terutama tampak pada garis horizontal di dekat bagian atas gambar dan pada sudut belakang bodi tambahannya. Nikon Coolpix 995 yang dipakai untuk bidikan ini ada di basis data PTlens, sehingga distorsinya langsung dapat dikoreksi, seperti terlihat di tengah. Gambar di sebelah kanan memperlihatkan selisih antara versi grayscale kedua foto itu, yang dihitung dengan mengurangkan keduanya, lalu dinegasikan serta diberi clipping ekstrem dan koreksi Gamma. Sekali lagi, efek koreksinya paling jelas terlihat pada garis horizontal di bagian atas. Lingkaran putih (yang menandakan selisih nol) muncul akibat kendala tanpa penskalaan: titik-titik pada lingkaran yang diameternya sama dengan dimensi gambar yang lebih kecil tetap tidak berubah.
Meratakan gambar GoPro
Lensa kamera GoPro menghasilkan distorsi barrel yang mencolok, yang tampaknya justru menjadi bagian dari identitas mereknya. Sebagai contoh, GoPro Hero 3+ silver edition memiliki lensa fisheye dengan panjang fokus tetap 2.77 mm, setara dengan panjang fokus 16 mm pada film 35 mm, bila seluruh area fotosensitifnya dipakai. GoPro Hero 3+ punya tiga mode foto:
- 10 megapiksel = 3680 × 2760 piksel sudut lebar (16 mm pada film 35 mm)
- 7 megapiksel = 3072 × 2304 piksel sudut lebar (16 mm pada film 35 mm)
- 5 megapiksel = 2624 × 1968 piksel sudut sedang (23 mm pada film 35 mm)
GoPro Hero 3+ dibekali sensor 1/2.3", yang punya crop factor 5.64. (Ini memberi panjang fokus hanya 15.62 mm pada film 35 mm; angka 16 mm dari informasi EXIF kemungkinan hasil pembulatan.) Dua mode pertama tampaknya memakai seluruh area fotosensitif, dan penurunan resolusinya jelas dicapai lewat sub-sampling. Karena itu parameter distorsinya sama, seperti bisa dibuktikan dalam praktik. Mode 5 megapiksel jelas hanya memakai sebagian area fotosensitif, sebab 3680 / 2624 × 16 ≈ 23. Parameter lensanya dapat ditentukan sebagai
- sudut lebar:
- a = 0.06335
- b = -0.18432
- c = -0.13009
- sudut sedang:
- a = 0.01359
- b = -0.06034
- c = -0.10618
Secara teori, parameter mode kedua bisa diturunkan dari mode pertama, sebab radius ri dan Ri terhubung oleh faktor skala κ = 3680 / 2624 = 1.402, yang menghasilkan:
- a2 = a1 / κ³
- b2 = b1 / κ²
- c2 = c1 / κ
Parameter di atas, yang berasal dari optimasi tersendiri, tidak jauh berbeda dari nilai teoretis tersebut. Sejalan dengan itu, parameter untuk berbagai mode video dapat diturunkan lewat optimasi atau dari bagian area sensor yang dipakai mode tersebut. Untuk video, bidang pandang horizontal tidak dapat diturunkan dari data EXIF. Nilainya bisa dihitung dari area fotosensitif yang terpakai, ditentukan dari videonya sendiri (dengan merekam dalam kondisi terkendali), atau sekadar ditaksir bersama parameter lain, yaitu dibiarkan sebagai parameter bebas dalam optimasi. Parameter untuk video HD (1920 × 1080) adalah: * a = 0.030530 * b = -0.124312 * c = -0.038543
Parameter ini bisa dipakai untuk koreksi per frame dengan ImageMagick. Sebagai alternatif, parameter ini bisa dipakai untuk "meratakan" seluruh video lewat plugin AVIsynth bernama DeBarrel, yang juga memakai model koreksi lensa Panorama Tools.
Dua keyboard oleh el_supremo
Foto dua keyboard saya ini punya distorsi barrel yang sangat kentara, karena diambil pada panjang fokus 17 mm.
Distorsi semacam ini bisa dikoreksi, misalnya, dengan Canon Digital Photo Professional (kamera saya Canon 50D). Produsen kamera SLR lain biasanya juga menyediakan perangkat lunak untuk koreksi semacam itu bagi lensa mereka, tetapi saya ingin melihat seberapa baik contoh-contoh di atas bekerja pada foto ini. Langkah pertama adalah membuka situs LensFun dan mengunduh versi terbaru basis data kamera mereka. Ekstrak paketnya (di Windows, winzip bisa mengekstrak file .tar.gz), lalu di direktori "lensfun/data/db" cari file yang sesuai dengan produsen kamera Anda. Dalam kasus saya, saya membuka "slr-canon.xml" yang bisa disunting dengan editor teks apa pun. Selanjutnya saya cari informasi untuk lensa yang saya pakai, yang dalam hal ini adalah "EF-S 17-85mm". Informasi lensa itu tampak seperti ini:
<lens>
<maker>Canon</maker>
<model>Canon EF-S 17-85mm f/4-5.6 IS USM</model>
<mount>Canon EF-S</mount>
<cropfactor>1.6</cropfactor>
<calibration>
<distortion model="ptlens" focal="17" a="0.021181" b="-0.055581" c="0" />
<distortion model="ptlens" focal="20" a="0.019344" b="-0.043786" c="0" />
<distortion model="ptlens" focal="22" a="0.015491" b="-0.026682" c="0" />
<distortion model="ptlens" focal="28" a="0.008084" b="-0.007472" c="0" />
<distortion model="ptlens" focal="30" a="0.005522" b="-0.001763" c="0" />
<distortion model="ptlens" focal="35" a="0.003149" b="0.002207" c="0" />
<distortion model="ptlens" focal="44" a="0" b="0.008269" c="0" />
<distortion model="ptlens" focal="53" a="0" b="0.008792" c="0" />
<distortion model="ptlens" focal="61" a="0" b="0.00738" c="0" />
<distortion model="ptlens" focal="72" a="0" b="0.006226" c="0" />
<distortion model="ptlens" focal="78" a="0" b="0.007095" c="0" />
<distortion model="ptlens" focal="85" a="0" b="0.007288" c="0" />
</calibration>
</lens>
Entri kalibrasi itu memberikan nilai distorsi untuk rentang panjang fokus dari 17mm sampai 85mm. Bila panjang fokus yang saya butuhkan berada di antara dua nilai tersebut, saya bisa memilih yang paling dekat atau menginterpolasi nilainya. Karena foto yang saya koreksi diambil pada 17mm, yang saya perlukan adalah informasi dari baris pertama data kalibrasi itu. Baris itu memberi saya nilai: a="0.021181" b="-0.055581" c="0" Inilah ketiga parameter yang dipakai untuk mengoreksi distorsi lensa. Namun pada beberapa versi IM yang lebih lama, koreksi distorsi barrel menuntut parameter keempat, d. Untungnya, nilai d mudah dihitung dari ketiga nilai lain memakai rumus sederhana ini: d = 1-a-b-c Artinya: d="1.0344". |
IM akan menghitung sendiri nilai 'd' bila nilai itu tidak diberikan sebagai argumen distorsi, tetapi beberapa versi IM lama tidak melakukannya. |
|---|---|
| Jadi inilah distorsi barrel yang sebenarnya, untuk mengoreksi distorsi lensa itu... |
magick keyboards.jpg \
-distort barrel "0.021181 -0.055581 0" \
keyboards_ptlens.jpg
| Tentu saja sebaiknya jangan menyimpan ke JPEG sebelum pemrosesan gambar benar-benar selesai, mengingat kompresi JPEG yang lossy.
Pada foto aslinya distorsi itu sangat kentara di sepanjang bagian bawah penyangga partitur dan di sepanjang keyboard bagian atas. Distorsi tersebut nyaris hilang sama sekali pada foto keluarannya. Perbandingan visual antara hasil ini dan hasil dari perangkat lunak Canon memperlihatkan hasil yang pada dasarnya sama. El-Supremo
![[IM Output]](../static/img/img_photos/building_1.gif)
![[IM Output]](../static/img/img_photos/building_2.gif)
![[IM Output]](../static/img/img_photos/hugin.jpg)
![[IM Output]](../static/img/img_photos/campmobile.jpg)
![[IM Output]](../static/img/img_photos/campmobile_pt.jpg)
![[IM Output]](../static/img/img_photos/campmobile_comp.jpg)
![[IM Output]](../static/img/img_photos/keyboards.jpg)
![[IM Output]](../static/img/lens/keyboards_ptlens.jpg)