Halcon - gen_gabor не выводит спектр мощности ядра Gabor

Мне нужно вычислить фильтр Габора для данного изображения, используя библиотеку Halcon. К сожалению, я получаю разные результаты, когда вручную вычисляю БПФ ядра Габора или использую функцию gen_gabor(), который, как утверждается, вычисляет фильтры Габора и Гильберта в частотных областях. Первоначально я использовал код из link, который описывает фильтр Габора в частотной области как функция Гаусса. Аналогичные результаты (два симметричных гауссиана) получаются при использовании кода Matlab и соответствующей демонстрации когда выходное изображение настроено на функцию Габора (спектр мощности) — см. рисунок ниже в качестве примера < img src="https://i.stack.imgur.com/5ihmR.jpg" alt="Пример спектра мощности фильтра Габора" />

Вывод gen_gabor содержит два полумесяца и не имеет много общего с функциями Гаусса. Пожалуйста, взгляните на пример вывода команды

gen_gabor(Filter,1.4,0.4,1.0,1.5,'n','dc_center',512,512)

Первый канал фильтра

Кто-нибудь знает, как использовать фильтр Габора от Halcon и получить тот же результат, что и произведение преобразования Фурье изображения и обычного БПФ фильтра Габора? На самом деле, я даже не могу сопоставить параметр Angle gen_gabor с аргументами обычного фильтра Габора, например, длину волны, сигма, фазу и пространственное соотношение сторон, или к ближайшему определению в уравнении. 31 из учебника.


person Andrey    schedule 11.09.2020    source источник
comment
Ни один из них не похож на фильтр Габора в частотной области. Должна быть только одна гауссиана, смещенная от начала координат в соответствии с параметрами длины волны и угла. Это приводит к комплекснозначному ядру в пространственной области. Обратите внимание, что фильтр Габора не имеет параметра «фаза»: комплексный фильтр кодирует все возможные фазы. Вы можете получить ядро ​​с действительным знаком для конкретной фазы, спроецировав комплексные значения, но результат больше не будет фильтром Габора, поскольку он больше не кодирует все фазы. [продолжение]   -  person Cris Luengo    schedule 12.09.2020
comment
[продолжение] Вокруг этого много путаницы, и фильтр Габора очень часто преподают неправильно. Тем не менее, если предположить, что эти программы вычисляют проекцию фильтра Габора с действительным знаком, тогда спектр мощности будет выглядеть так, как вы показываете.   -  person Cris Luengo    schedule 12.09.2020
comment
Выход Halcon не похож на фильтр Габора, как ни крути. Они, вероятно, определяют свой фильтр, используя разложение по частоте и угловое разложение. Их фильтр, вероятно, проще использовать для разложения изображения на отдельные частотные и угловые составляющие, с фильтром Габора это невозможно сделать идеально, а разложение имеет тенденцию быть немного хакерским (вы не можете разбить гауссову мозаику).   -  person Cris Luengo    schedule 12.09.2020
comment
Большое спасибо! Согласно коду Matlab, мое первое изображение отображает абсолютное значение сложного преобразования FFT ядра Gabor 47x47. Знаете ли вы, можно ли понять конкретные алгоритмы, используемые для частотно-угловой декомпозиции в Halcon? Мой клиент настаивает на использовании Halcon, но не может понять точное уравнение поверхности в сгенерированных полумесяцах (мой второй рисунок)...   -  person Andrey    schedule 12.09.2020
comment
Функция Габора в MATLAB также создает проекцию фильтра Габора с действительным знаком для определенной фазы. Следовательно, вы видите два лепестка в БПФ. Учебное пособие, на которое вы ссылаетесь, показывает фактический фильтр Габора в частотной области только с одним гауссовым фильтром.   -  person Cris Luengo    schedule 12.09.2020
comment
Я ничего не знаю об этом программном обеспечении Halcon, поэтому не могу вам в этом помочь. Я предлагаю вам создать фильтры с различной центральной частотой, а затем сложить их величины в частотной области. Выход должен быть относительно плоским. Изменяйте интервал последовательности частот до тех пор, пока ваш выходной сигнал не станет достаточно ровным, но не будет содержать слишком много компонентов. Это игра на оптимизацию, с бесконечным количеством компонентов у вас будет идеально плоский результат, но вам явно не нужно так много. Я не знаю, нужно ли вам использовать логарифмическую или линейную выборку, зависит от реализации.   -  person Cris Luengo    schedule 12.09.2020
comment
Затем повторите эксперимент с угловой составляющей. Опять же, чем больше компонентов и чем шире угол, тем более плоский выходной сигнал. Найдите свой оптимум.   -  person Cris Luengo    schedule 12.09.2020