Я обнаружил, что при применении функции 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 равно
fm_h_img равно
Однако
, если я применяю фильтр верхних частот (hp_filter = np.where (np.sqrt ((y - r // 2) ** 2 + (x - c // 2) ** 2)<= th, 0, 1)) </p>
fm_img равно
fm_h_img равно