Как получить реальную и мнимую части матрицы ядра габора в OpenCV

Новичок в OpenCV и плохая математика. Моя работа заключается в применении фильтра Габора к нормализованному изображению. И я знаю только, что в OpenCV есть функция getGaborKernel, и я хочу знать, что матрица возврата этой функции является реальной или мнимой частью ядра. Если я не могу использовать эту функцию, то как я могу сгенерировать это ядро? Использование Java API, но код C++ в порядке.


person ztypl    schedule 18.11.2015    source источник


Ответы (2)


Вы можете увидеть в gabor.cpp строку 87, что вычисляется реальная часть (согласно википедии).

double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi);

Вы можете получить воображаемую часть, изменив эту строку на (как сообщается также здесь< /а>)

double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*sin(cscale*xr + psi);
                                               ^^^

Получив ядро, вы можете использовать его с функцией filter2d.

person Miki    schedule 18.11.2015
comment
Понятно. Большое спасибо! - person ztypl; 19.11.2015
comment
дорогой @Miki, не могли бы вы взглянуть на мой вопрос stackoverflow.com/questions/49218236/ - person Amir; 14.03.2018
comment
@Miki ››Дорогая Мики, никто еще не ответил на мой вопрос, я ценю, если у вас есть время, чтобы взглянуть. - person Amir; 30.03.2018

На самом деле разница между cos и sin заключается в смещении на 90 градусов или PI/2. Таким образом, вы можете получить реальное и мнимое ядра Габора, сделав PSI равным 0 для реального и PI/2 для мнимого.

Mat kernelReal = getGaborKernel(ksize, sigma, theta, lambda, gamma, 0, 0, CV_32F); Mat kernelImag = getGaborKernel(ksize, sigma, theta, lambda, gamma, 0, PI/2, CV_32F);

person Túlio Pires    schedule 09.08.2017