Diberikan gambar dengan m , n bilangan bulat, interpolasi gambar itu pada titik sembarang m ′ , n ′ dapat ditulis sebagaisaya( m , n )m , nm′, n′
saya~( m′, n′) = ∑m = ⌊ m′⌋ -w+1⌊ m′⌋ +w ∑n = ⌊ n′⌋ -w+1⌊ n′⌋ +wsaya( m , n ) f ( m′- m , n′- n )
saya~saya( x , y)
f( m , n )
Seperti halnya fungsi jendela untuk sinyal temporal, mudah untuk mendapatkan inti dari apa yang dilakukan kernel interpolasi gambar dengan melihat respons frekuensinya. Dari jawaban saya pada fungsi jendela :
Dua faktor utama yang menggambarkan fungsi jendela adalah:
- Lebar dari lobe utama (yaitu, pada frekuensi berapa daya adalah setengah dari respon maksimum)
- Atenuasi lobus samping (yaitu, seberapa jauh ke bawah adalah lobus samping dari mainlobe). Ini memberitahu Anda tentang kebocoran spektral di jendela.
Ini cukup banyak berlaku untuk kernel interpolasi. Pilihannya pada dasarnya adalah pertukaran antara penyaringan frekuensi (pelemahan sidelobes), lokalisasi spasial (lebar mainlobe) dan mengurangi efek lain seperti dering (efek Gibbs), aliasing, kabur, dll. Misalnya, kernel dengan osilasi seperti karena kernel sinc dan kernel Lanczos4 akan memperkenalkan "dering" pada gambar, sedangkan resampling Gaussian tidak akan memperkenalkan dering.
Berikut ini contoh sederhana dalam Mathematica yang memungkinkan Anda melihat efek dari berbagai fungsi interpolasi:
true = ExampleData[{"TestImage", "Lena"}];
resampling = {"Nearest", "Bilinear", "Biquadratic", "Bicubic",
"Gaussian", "Lanczos", "Cosine", "Hamming", "Hann", "Blackman",
"Bartlett", "Connes", "Welch", "Parzen", "Kaiser"};
small = ImageResize[true, Scaled[1/4]];
Di sini, true
mewakili gambar yang saya anggap setara diskrit dari gambar "tepat"saya( x , y), dan small
mewakili gambar skala yang lebih kecilsaya( m , n )(kami tidak tahu bagaimana itu diperoleh). Kami akan interpolasisaya( m , n ) dengan 4x untuk memberi saya~( m′, n′)yang ukurannya sama dengan aslinya. Di bawah ini, saya menunjukkan hasil interpolasi ini dan perbandingan dengan gambar sebenarnya:
Anda dapat melihat sendiri bahwa fungsi interpolasi yang berbeda memiliki efek yang berbeda. Terdekat dan beberapa lainnya memiliki fitur yang sangat kasar dan Anda pada dasarnya dapat melihat garis bergerigi (lihat gambar ukuran penuh, bukan tampilan kotak). Bicubic, biquadratic dan Parzen mengatasi hal ini tetapi menimbulkan banyak kekaburan. Dari semua kernel, Lanczos tampaknya (secara visual) menjadi yang paling menarik dan yang melakukan pekerjaan terbaik.
Saya akan mencoba mengembangkan jawaban ini dan memberikan contoh yang lebih intuitif menunjukkan perbedaan ketika saya punya waktu. Anda mungkin ingin membaca artikel yang cukup mudah dan informatif ini yang saya temukan di web (peringatan PDF).