2017-02-22 2 views
0

во многих программах, как https://gist.github.com/kkomakkoma/4fb21b853ce774fe5c6d47e9626e6570код около фильтров Габора в питона

дизайн фильтров Габора следующим образом:

Защиту build_filters():

filters = [] 
ksize = 31 
for theta in np.arange(0, np.pi, np.pi/32): 
    params = {'ksize':(ksize, ksize), 'sigma':1.0, 'theta':theta, 'lambd':15.0, 
       'gamma':0.02, 'psi':0, 'ktype':cv2.CV_32F} 
    kern = cv2.getGaborKernel(**params) 
    kern /= 1.5*kern.sum() #why? why? why? 
    filters.append((kern,params)) 
return filters 

, что делает {керн/= 1,5 * KERN .sum()} сделать? спасибо за ваше мнение

ответ

0

Я постараюсь ответить на все это, так как я имею дело с этим.

Во-первых, я думаю, что это несколько связан вопрос: gabor edge detection with OpenCV

Выполнение этой операции приводит к своего рода операции усреднения (аналогично только с помощью маски усреднения свертку изображения), так что в некотором смысле это обеспечивает некоторое сглаживание. Он также используется для нормализации ядра, как указано в моей ссылке выше (чтобы предотвратить отклик некоторых пикселей из-за перевыполнения других пикселей при выполнении свертки). Если это не будет сделано, то возможно, что максимальное значение ядра может быть на несколько порядков больше минимального значения.

Я тестировал это на входном изображении с этой строкой и без этой строки после использования функции filter2D openCV, например, в опубликованной вами ссылке github (размер выходного изображения был от 0 до 255), а результаты были что без этой строки кода многие пиксели просто снимаются до интенсивности 255, что ожидается, так как каждому пикселю просто присвоено максимальное значение ядра.

Without this line of code

Я надеюсь, что это помогает ... если кто-то имеет больше рассуждения или информацию по этому вопросу, я действительно хотел бы знать!