Неверное БПФ гауссова ядра - PullRequest
       51

Неверное БПФ гауссова ядра

0 голосов
/ 21 сентября 2018

Я пытаюсь сгенерировать БПФ ядра Гаусса для последующей фильтрации.Насколько я понимаю, БПФ ядра Гаусса должно давать величину, визуально похожую на исходное изображение интенсивности.Вот что я получаю,

Intensity and resultant fft

Вот фрагмент, который должен воспроизвести это изображение.

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

ksize       = 50
ksize       = ksize*2+1
sigma       = 15
fil         = cv2.getGaussianKernel(ksize,0)
fil         = fil * fil.T

fil_fft = cv2.dft(np.float32(fil),flags = cv2.DFT_COMPLEX_OUTPUT)
fil_shift = np.fft.fftshift(fil_fft)

magnitude_fil = 20*np.log(cv2.magnitude(fil_shift[:,:,0],fil_shift[:,:,1]))

plt.subplot(131),plt.imshow(fil)
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(magnitude_fil)
plt.title('FFT (Magnitude)'), plt.xticks([]), plt.yticks([])
plt.show()

Любые идеи о том, почему я получаю этоТ-образный ответ был бы отличным.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы правильно вычисляете преобразование Фурье вашего гауссиана и получаете гауссов обратно.Но вы отображаете логарифм величины.Это логарифмическое преобразование делает гауссиан похожим на параболу и увеличивает в результате шум очень низкой интенсивности (из-за проблем с числовой точностью).

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

Если я повторю ваш эксперимент и покажу БПФ без (слева) и с логарифмическим растяжением (справа) вы увидите разницу:

enter image description here

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

Обратите внимание, что преобразование Фурье для гауссиана является гауссовским, но размеры будут отличаться, как объяснил Мик в своем ответе .

0 голосов
/ 21 сентября 2018

То, что вы получаете как форму "t", - это гауссово ядро ​​в области Фурье.Поскольку ядро ​​шире в пространственной области, оно меньше в области Фурье, своего рода «сжато» вдоль осей, потому что вместо отображения изменяющихся цветов по осям x и y преобразование Фурье показывает скорость изменения цветов, то есть цветовых градиентов.

Преобразование Фурье (1-D) ядра Гаусса:
enter image description here

Преобразование Фурье функции Гаусса снова является функцией Гаусса, но теперь имеет частоту ω .Меньшее ядро ​​в пространственной области дает более широкое ядро ​​в области Фурье, и наоборот.

diffusion.gaussian.kernel

(Источник изображения: www.stat.wisc.edu - ядро ​​Гаусса )

Преобразование Фурье ядра Гаусса действует как фильтр нижних частот для частот.Частота среза зависит от масштаба ядра Гаусса.Преобразование Фурье имеет ту же гауссову форму.Ядро Гаусса - единственное ядро, для которого преобразование Фурье имеет ту же форму.

Если вы примените тот же самый fft к версии изображения в градациях серого, то происходящее может стать немного яснее.Но по сути, fft - это инструмент, который вы можете использовать для обработки изображений для достижения разных результатов.Большинство из этих функций предварительно упакованы в фильтры размытия, функции шумоподавления, обнаружение краев и так далее.

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

...