Несовместимые значения в функции numpy fft2 - PullRequest
1 голос
/ 05 апреля 2019

Я обнаружил, что при применении функции numpy.fft.fft2 появляются противоречивые результаты.

Это мой код

img = cv2.imread('task2_sample_small.png', cv2.IMREAD_GRAYSCALE)
th=3
r, c = img.shape
y, x = np.mgrid[:r, :c]
hp_filter = np.where(np.sqrt((y - r // 2) ** 2 + (x - c // 2) ** 2) <= th, 0, 1)

fm_img = np.fft.fftshift(np.fft.fft2(img))
fm_img  = abs(fm_img).astype(np.int)*hp_filter

h_img = abs(np.fft.ifft2(np.fft.ifftshift(fm_img)))
fm_h_img = np.fft.fftshift(np.fft.fft2(h_img))
fm_h_img = abs(fm_h_img).astype(np.int)

print(fm_img.sum() - fm_h_img.sum())

Как видите, я просто

(изображение) -> fft -> fftshift -> применить фильтр (*) -> ifftshift -> ifft -> (new_image) -> fft -> fftshift (*)

Я вычислил разницу междудве точки звездочки, которые должны быть одинаковыми.

Поскольку единственное, что находится между двумя точками, это просто восстановление его.

Однако, они имеют довольно большую разницу.

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

Например, если я применяю

hp_filter = np.where(np.sqrt((y - r // 2) ** 2 + (x - c // 2) ** 2) <= th, 1, 0)

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

Буквально странные результаты я получил только тогда, когда применил фильтр верхних частот.

Что за неправильная точка ???

Что вызывает этот противоречивый результат ??

=================================

Фактические различия ниже

ЕслиЯ применяюфильтр нижних частот (hp_filter = np.where (np.sqrt ((y - r // 2) ** 2 + (x - c // 2) ** 2) <= th, 1, 0)) </p>

fm_img равно

enter image description here

fm_h_img равно

enter image description here

Однако

, если я применяю фильтр верхних частот (hp_filter = np.where (np.sqrt ((y - r // 2) ** 2 + (x - c // 2) ** 2)<= th, 0, 1)) </p>

fm_img равно

enter image description here

fm_h_img равно

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...