Minggu, 02 Oktober 2016

Filter Gabbor

Kita bisa menggunakan function di opencv yaitu 
cv2.getGaborKernel(ksize, sigma, theta, lambda, gamma, psi, ktype)

ksize adalah ukuran dimensi yang dihasilkan
sigma adalah standar deviasi dari Gaussian
theta adalah arah orientasi
lambda adalah panjang gelombang faktor sinus dari persaman diatas
gamma adalah ratio spasial rentang nilai  0 – 1, semakin mendekati 1 maka semakin bulat!
psi adalah pase
ktype jenis type data yang digunakan
ini adalah visualisasi gabbor filter



Yaitu visualisasi rentang
theta = 0.1 sampai pi/8  (generates 8 orientations)
lambda = 0.1 sampai pi/4 (4 frequencies)

"""
Created on Sun Oct 02 16:01:59 2016

@author: mulkan.ms@gmail.com
"""
import numpy as np
import cv2
import matplotlib.pyplot as plt

index = 1
ksize = 9
plt.figure()
for theta in np.arange(0.1, np.pi, np.pi / 8)  :
    theta_sudut  = (np.round(theta*(180/np.pi),0))
    for lamda in np.arange(0.1, np.pi, np.pi/4)    :
        phase_sudut = (np.round(lamda*(180/np.pi),0))
        kern = cv2.getGaborKernel((ksize, ksize), 1.0, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)
        kern /= 1.5*kern.sum()
        plt.subplot(4,8,index),plt.imshow(kern,cmap=plt.cm.gray)
        plt.axis('off')
        plt.title('T: '+str(theta_sudut)+'; P:'+str(phase_sudut))
        index = index+1


 

Tapi biasanya tidak semua digunakan sudut orientasinya, cukup arah  45, 90, 135,180 saja karena
0 = = 180
45 == 225
90 == 270
135 == 315
Ingat! Semua harus bekerja dalam format radian
sudut  = radian * (180/pi)
radian = (180*pi/)sudut
dengan phase yang tetap saja, misalkan pi/2 saja



Berikut code yang digunakan! Menggunakan ukuran gabbor 200 saja



# -*- coding: utf-8 -*-
"""
Created on Sun Oct 02 17:00:19 2016

@author: mulkan
"""

import numpy as np
import cv2
import matplotlib.pyplot as plt


def radian2sudut(radian):
    return radian * (180/np.pi)
def sudut2radian(sudut):
    return (180*np.pi)/sudut
plt.close('all')
ksize = 200
lamda = np.pi/5
plt.figure()
index  = 1
#cv2.getGaborKernel(ksize, sigma, theta, lambda, gamma, psi, ktype)
for theta in np.arange(np.pi/4, np.pi*1.25, np.pi / 4)  :
    s = radian2sudut(theta)
    kern = cv2.getGaborKernel((ksize, ksize), 15, theta, lamda, 0.5, 0, ktype=cv2.CV_32F)
    kern /= 1.5*kern.sum()
    plt.subplot(2,2,index),plt.imshow(kern,cmap=plt.cm.gray),plt.title(str(s))
    plt.axis('off')
    index= index+1


 


Posting Komentar