Memahami fungsi filter Gabor


9

Saya perlu mengimplementasikan skrip untuk menghasilkan fitur dari gambar input dengan menggunakan filter Gabor. Saya tidak memiliki pengalaman wavelet sebelumnya dan saya hanya belajar analisis Fourier (saya mengerti ide dasar di balik analisis Fourier dan mentransformasikannya) sehingga mereka tidak dapat membantu saya memahami filter Gabor, karena saya perlu memiliki implementasi yang dilakukan dalam seminggu. . Saya tidak perlu memahami dasar-dasar fungsi filter Gabor, tetapi saya ingin memahami sampai batas tertentu apa itu dan apa fungsinya. Apa saja parameternya? Apa yang mereka maksud? Apa output dari fungsi tersebut? Misalnya ini adalah rumus yang saya salin dari Wikipedia :

g(x,y;λ,θ,ψ,σ,γ)=exp(x2+γ2y22σ2)exp(i(2πxλ+ψ))

Sekarang pertanyaan saya yang jelas adalah: Apa artinya ini? Apa artinya variabel? Menurut Wikipedia:

x,y : Saya menganggap koordinat ini menentukan nilai piksel suatu gambar pada koordinat ( 2. Ini OK, dipahami )(x,y)

λ : mewakili panjang gelombang dari faktor sinusoidal ( faktor Sinusoidal, ya? 3a. Bagaimana Anda memilihnya? 3b. Dari mana asalnya? 3c. Apakah itu angka yang berubah-ubah atau apa? Dipilih dengan bebas?)

θ : mewakili orientasi garis normal ke paralel dari fungsi Gabor (4. Apa artinya itu?)

ψ : apakah fase offset (5. offset apa? Bagaimana nilai ini ditentukan? Apakah dipilih secara bebas?)

σ : adalah sigma / standar deviasi dari amplop Gaussian (6. Perlu penjelasan lebih lanjut ...)

γ : adalah rasio aspek spasial, dan menentukan eliptisitas dukungan fungsi Gabor (7. Sekali lagi perlu lebih detail dan penjelasan lebih lanjut)

Dan yang paling penting:

g(x,y;λ,θ,ψ,σ,γ)=X
  1. Berapa nilai output ? Apa artinya?X

Seperti yang saya sebutkan, saya tidak perlu penjelasan teori secara menyeluruh, karena saya yakin ini panjang dan membaca buku 1000 halaman tentang topik yang tidak diketahui bukanlah pilihan bagi saya saat ini. Saya harus memiliki pemahaman black-box tentang fungsi ini sehingga saya dapat mengimplementasikannya dalam kode dan yang paling penting memahami apa input dan apa outputnya .

Terima kasih atas bantuannya !! =)

PS

Saya membaca posting ini:

/math/259877/value-of-xy-in-computing-gabor-filter-function

tapi itu tidak menjawab pertanyaan saya cukup teliti :)


1
Sepertinya Anda mencoba belajar banyak tentang pemrosesan gambar hanya dalam seminggu. Mungkin Anda harus mulai dengan filter sederhana terlebih dahulu seperti wavelet Haar.
Aaron

Hai @anonymous! Bisakah Anda menyebutkan parameter apa yang tidak dijelaskan dengan benar?
visoft

@visoft, Jawaban Anda tidak rapi. Ini melibatkan banyak diskusi asing. Saya telah menambahkan jawaban saya. Saya pikir sekarang sudah jelas.

Anda memulai hadiah karena "Dalam jawaban saat ini, makna berbagai parameter dijelaskan dalam bentuk kata-kata yang buruk. Jawaban langsung dibutuhkan." Saya ingin tahu penjelasan apa yang perlu diulang.
visoft

@visoft, Jawaban Anda tidak rapi. Ini melibatkan banyak diskusi asing. Saya telah menambahkan jawaban saya. Saya pikir sekarang sudah jelas.

Jawaban:


7

Implementasi matlab ada dalam jawaban ini: https://dsp.stackexchange.com/a/14201/5737

1) Rumus wikipedia sedikit terlalu umum.

2) Jika Anda mengetahui dasar-dasar transformasi Fourier maka Anda secara empiris tahu bahwa: Gambar dipandang terbentuk dengan melapiskan serangkaian gelombang sinusoidal dari berbagai frekuensi yang berorientasi pada semua jenis arah. Setiap "piksel" dalam transformasi memberi tahu kita "intensitas" gelombang tersebut. Posisi "pixel" memberi tahu kita frekuensi dan orientasi gelombang. Dalam praktiknya, seseorang hanya ingin memilih gelombang tertentu, memiliki frekuensi tertentu dan orientasi tertentu.

Jadi begitulah: Transformasi Gabor adalah salah satu dari banyak filter yang disebut band pass yang memungkinkan Anda untuk "memotong" transformasi Fourier dan mengisolasi hanya informasi spesifik. Informasi penting lainnya adalah bahwa setiap "piksel" Fourier adalah nilai kompleks (bagian nyata dan imajiner)

3) Parameter: Dua parameter sudah ditampilkan:

3.a) Frekuensi tuning , atau periode tuning , atau menentukan jenis gelombang sinus yang akan direspons oleh filter. ( atau tergantung pada implementasi spesifik) Pada dasarnya, lebih kecil berarti gelombang sinus yang lebih padat. Sebuah besar berarti gelombang yang lebih besar. dalam piksel (3, 5, 30, dll. Piksel) Jangan pergi di bawah 3 piksel atau lebih dari atau Anda mendapatkan efek buruk. adalah lebar gambar, jika gambar itu persegi. Anda menentukan ini menggunakan parameter P0 dalam kode matlab.f0P0λf=1/P0=1/λf=π/λP0P0P0W/2W

3.b) Sudut tengah. Gelombang ini dapat memiliki arah apa pun. Anda ingin memilih hanya gelombang pada sudut tertentu. Jadi, parameter kedua adalah sudut tala, atau dalam rumus Anda. Biasanya, dalam radian. Berorientasi dalam kode matlab.θ0θ

Seseorang tidak dapat mengisolasi hanya frekuensi tertentu atau orientasi tertentu. (Cari prinsip ketidakpastian dalam buku teks. Ya, mirip dengan yang ada di fisika) Tetapi orang dapat menyesuaikan berapa banyak frekuensi terdekat akan bocor. Dua parameter berikutnya menentukan bahwa:

3.c) , bandwidth frekuensi dinyatakan dalam oktaf. Nilai yang berguna, 1,5, 2, 3. Nilai yang lebih besar berarti menangkap rentang frekuensi yang lebih luas. Ada harga untuk bandpass yang lebih ketat, lokalisasi spasial yang lebih buruk. Mengapa, sekali lagi, buku teks. FBW dalam kode matlab.ΔF

3.d) sudut bandwidth. Disajikan dalam radian. atau berfungsi dengan baik. ABW dalam kode matlab.Δθπ/3π/2

Hubungan antara , dari kode matlab dan dari Wikipedia memiliki rumus tetapi tidak penting untuk memahami Gabor. lagi tidak penting untuk pemahaman dasar.ΔfΔθσ,γψ

Jadi Anda memilikinya: dari Wikipedia adalah matriks 2D angka yang berisi topeng konvolusi. Anda mengambil gambar asli, memfilternya dengan topeng konvolusi dan mendapatkan gambar lain. Gambar baru ini adalah "respons Gabor" untuk gambar asli.X

Kode matlab melakukan dua langkah ini bersama-sama. Buat filter Gabor dengan parameter yang ditentukan dan lakukan konvolusi. Hasilnya ReConv, ImConv adalah tanggapan. Setiap respons "piksel" memiliki bagian nyata dan imajiner. Jika Anda ingin menggunakan kode ini, Anda biasanya harus menghitung energi untuk respons: mana adalah bagian nyata dari respons (ReConv) dan adalah bagian imajiner (ImConv ), untuk setiap piksel.E=a2+b2ab

Itu dia: 1) Bangun filter Gabor yang menetapkan 2) Lilit gambar Anda dengan filter. Anda akan mendapatkan dua nilai per setiap piksel. 3) Hitung energi dan dapatkan intensitas respons untuk setiap piksel dalam gambar asliP0,θ0,Δf,ΔθE

Intuisi lain: Misalkan Anda ingin memilih tepi yang membentang pada orientasi tegak lurus ke dan lebar tertentu 20 piksel. Anda dapat membangun filter Gabor dengan . TAKE CARE bahwa tidak ada hubungan yang sama antara dimensi tepi Anda dan parameter . Anda harus mencoba berbagai nilai dan melihat mana yang terbaik. Parameter lainnya ( ) menyentuhnya ketika Anda memiliki pengalaman menyetel dua yang pertama.π/6P020,θ0=π/6,Δf=2,Δθ=pi/2P0Δf,Δθ

Semoga ini bisa membantu!

Cristi

Memperbarui

Berikut ini adalah situs yang memungkinkan Anda untuk bermain sedikit dengan parameter Gabor dan perhatikan hasilnya: http://www.cogsci.nl/pages/gabor-generator.php

Setelah melihat sekilas, freqnency dan bandwidth angle diikat sebagai "Standar Deviasi dalam piksel ... ke amplop Gauss". Parameter lainnya mudah diidentifikasi. Namun, perhatikan bahwa ada perbedaan numerik! Misalnya. fase dapat dinyatakan dalam interval 0-1 atau interval 0- .π


Bagaimana ukuran kernel tergantung pada parameter tersebut? Tampaknya sebagian besar implementasi hanya menggunakan ukuran arbitrer.
jiggunjer

Tl; dr: bandwidth mengontrol lebar kernel. Ini adalah hubungan proporsional terbalik. Misalnya. bandwidth sempit -> filter lebih besar. Juga frekuensi pusat memiliki peran juga.
visoft

Ketika saya menggunakan filter Gabor, saya pertama-tama berpikir tentang apa parameter saya (bandwidth, frekuensi pusat, dll) dan kemudian "biarkan" rumus menghitung dimensi.
visoft

Anda dapat mengatasinya dengan cara sebaliknya, memasukkan dimensi dan menghitung parameter kerja filter.
visoft

Sebenarnya saya melihat bahwa hubungan ukuran berbanding lurus dengan lambda (setidaknya dalam implementasi gabor matlab). Rumus mereka agak aneh karena memiliki istilah (2^BW+1)/(2^BW-1)yang selalu sama dengan 4. Mereka menggunakan 7 * sigma (di mana sigma ~ lambda), contoh wikipedia gabor menggunakan 3 * sigma.
jiggunjer

6

Jika kita melihat definisi filter Gabor, kita akan tahu bahwa respons impulsnya adalah produk dari fungsi sinusoidal dan fungsi Gaussian , yang pada dasarnya adalah apa yang kita lihat dalam rumus.

masukkan deskripsi gambar di sini

Parameter λ, θ, ψ adalah parameter untuk bagian sinusoidal (atau faktor).

λ dan ψ adalah parameter dasar dari gelombang sinus.

λ - mengontrol Panjang Gelombang ( https://en.wikipedia.org/wiki/Wavelength ) dari sinusoid ini. Λ yang lebih tinggi akan “memperluas” elips yang Anda lihat pada gambar di atas, sedangkan λ yang lebih rendah akan memiliki kebalikannya.

θ - mengontrol rotasi elips yang Anda lihat pada gambar di atas. Elips ini adalah "garis paralel". Nilai θ = 0 menunjukkan tidak ada rotasi dan akan membuat elips vertikal.

ψ - adalah pergeseran fasa sinusoid yaitu, seberapa besar elips perlu digeser sehubungan dengan pusat. Ini adalah parameter yang harus ditentukan.

σ - adalah standar deviasi (yaitu, penyebaran) dari bagian Gaussian,

γ - mengontrol rasio aspek elips (kira-kira, bagaimana elips perlu memanjang).

Berbagai parameter yang ditentukan di atas adalah input.

Nilai output dari perhitungan hanyalah efisiensi (atau berat) dari filter pada lokasi (x, y).

Ini artinya, dan sama dalam konteks filter linear lainnya yang digunakan dalam pemrosesan gambar.


0

Seseorang membuat video yang luar biasa menjelaskan efek dari berbagai parameter filter Gabor. Anda dapat menemukan videonya di sini .

Semoga ini membantu.

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.