Apa perbedaan praktis yang relevan antara berbagai metode resampling gambar?


22

ImageResizeFungsi Mathematica mendukung banyak metode resampling .

Tidak akrab dengan daerah ini, di luar tetangga terdekat, bilinear, biquadratic dan bicubic (yang jelas dari namanya), saya tersesat.

Dapatkah Anda mengarahkan saya ke beberapa sumber yang akan menjelaskan perbedaan dasar (matematis) antara metode ini, dan khususnya menunjukkan perbedaan praktis (misalnya dengan menunjukkan gambar sampel di mana pilihan metode benar-benar penting dan memperkenalkan perbedaan yang nyata)?

Saya tidak memiliki latar belakang pemrosesan sinyal, jadi saya lebih suka pengantar yang "lembut" dan ringkas :-)


Saya akan menyalin di sini daftar ImageResizemetode bagi mereka yang "malas" untuk mengklik tautan:

  • "Terdekat" tetangga terdekat resampling

  • "Bilinear" interpolasi bilinear

  • "Biquadratic" interpolasi spline biquadratic

  • Interpolasi spline bikubik "bikubik"

  • "Gaussian" resampling Gaussian

  • "Lanczos" Metode interpolasi multivarian Lanczos

  • Interpolasi "kosinus" kosinus

  • "Hamming" mengangkat-kosinus Hamming interpolasi

  • "Hann" mengangkat interpolasi Hann-cosinus

  • "Blackman" tiga istilah umum cosinus terangkat

  • Interpolasi jendela segitiga "Bartlett"

  • "Connes" kuadratkan interpolasi Welch

  • Interpolasi kuadratik "Welch"

  • "Parzen" interpolasi satu demi satu kubik

  • "Kaiser" interpolasi Bessel modifikasi tanpa urutan yang dimodifikasi


1
Pertanyaan itu terlihat terlalu luas bagi saya. Sebaiknya pisahkan menjadi metode tertentu dan ajukan pertanyaan spesifik untuk metode yang Anda miliki masalah.
mirror2image

Agak bersinggungan dengan pertanyaan Anda, Anda mungkin menganggap perbandingan gambar ini menarik: general-cathexis.com/interpolation/index.html
Mr.Wizard

Saya akan memperhatikan bahwa semua metode yang Anda tulis adalah Space Invariant. Saya pikir metode yang lebih modern untuk upsampling adalah Edge Aware dan Space Variant.
Royi

Inilah transformasi kedua dari belakang. Ini disebut transformasi PB dan mengubah gambar dengan memprediksi nilai secara bicubically sesuai dengan probabilitas pada apa yang akan terjadi setelah dilatih pada banyak gambar lainnya. Seperti apa bentuk [hasilnya] [1]. [1]: v1.std3.ru/57/a9/…
MyBushisaNeonJungle

Jawaban:


12

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+1m+w n=n-w+1n+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:

  1. Lebar dari lobe utama (yaitu, pada frekuensi berapa daya adalah setengah dari respon maksimum)
  2. 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, truemewakili gambar yang saya anggap setara diskrit dari gambar "tepat"saya(x,y), dan smallmewakili 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:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

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


Apakah saya melihat notasi infiks!?! : ->
Mr.Wizard

@ Mr.Wizard Saya memang mengatakan akan melakukan upaya yang jujur ​​:)
Lorem Ipsum
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.