Python numpy fft2函数中的值不一致

Python numpy fft2函数中的值不一致,python,numpy,fft,highpass-filter,Python,Numpy,Fft,Highpass Filter,我发现应用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.

我发现应用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())
img=cv2.imread('task2\u sample\u small.png',cv2.imread\u灰度)
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)fft->fftshift->apply filter(*)->ifftshift->ifft->(新_图像)->fft->fftshift(*)

我计算了两个星号点之间的差值,这两个星号点应该是相同的

因为两点之间的唯一区别就是它的恢复

然而,它们之间有着巨大的差异

真正奇怪的是,如果我不应用过滤器或其他过滤器,差异只是一部分

例如,如果我申请

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

(No.SqRT((Y-R// 2)** 2 +(X-C//2)** 2)它可能只是我,但是我已经重读了你的问题三次,我仍然不确定到底是什么问题。(当你说“巨大的差异”、“奇怪的结果”、“不一致的结果”时,你可能想考虑更具体些)。-这些描述太模糊了。)我同意@NPE,但看看你的代码,如果你把浮点转换成整数,不是总是会丢失一些准确性吗?对不起,伙计们,我只是简单地看了看你的代码,就添加了结果,但你似乎到处都是绝对值。这通常会丢弃“一半的信息”因此,你不能指望以后再回到起点。因为你的原始图像大概只有非负像素值,所以ft将有一个占主导地位的常量模式。如果你的滤波器具有正确的对称性(即,如果它是实滤波器的ft),那么后向变换将是实的,如果滤波器(后向变换)保持所有像素为正,abs不会造成任何伤害。现在低通保持恒定模式,将所有像素提升到非负区域。高通杀死恒定模式,留下零平均信号,因此你的一半质量将为负,并被abs翻转。这就是你的往返中断可能只是我,但我已经读了三遍你的问题了,我仍然不确定到底是什么问题。(当你说“巨大的差异”、“奇怪的结果”、“不一致的结果”时,你可能会考虑更具体些——这些描述太模糊了。)我同意@NPE,但是看看你的代码,如果你把浮点数转换成整数,是不是总是会丢失一些精度?对不起,伙计们,我只是简单地看了看你的代码,就添加了结果,但是你似乎到处都是绝对值。这通常会丢弃“一半的信息”因此,你不能指望以后再回到起点。因为你的原始图像大概只有非负像素值,所以ft将有一个占主导地位的常量模式。如果你的滤波器具有正确的对称性(即,如果它是实滤波器的ft),那么后向变换将是实的,如果滤波器(后向变换)保持所有像素为正,abs不会造成任何伤害。现在低通保持恒定模式,将所有像素提升到非负区域。高通杀死恒定模式,使你的平均信号为零,因此你的一半质量将为负,并被abs翻转。这就是你的往返中断的地方