Python图像FFT变换显示问题

stromlord 2018-06-25 03:43:30
以前我使用matlab对图像进行fft变换的时候,取log显示与python是一致的,但是如果我手动进行归一化,就完全不同了,请问大神们,谁能帮帮我
matlab代码:
I = double(rgb2gray(imread('lena.bmp')));
f = fftshift(fft2(I));
figure;
subplot(1,3,1);imshow(abs(I),[]);title('原图')
subplot(1,3,2);imshow(log(abs(f)),[]);title('log')
subplot(1,3,3);imshow(100*abs(f)./max(max(f)));title('手动归一化')



python代码:
img = cv2.imread('lena.bmp', 0)  # 直接读为灰度图像
f = np.fft.fftshift(np.fft.fft2(img)) # FFT
s = np.log(np.abs(f))
s1 = 100*np.abs(f)/f.max()
figure()
plt.subplot(131), plt.imshow(np.abs(img), 'gray'), plt.title('original'), axis('off')
plt.subplot(132), plt.imshow(np.abs(s), 'gray'), plt.title('log'), axis('off')
plt.subplot(133), plt.imshow(np.abs(s1), 'gray'), plt.title('手动归一化'), axis('off')


可以看出,python里我手动归一化后的FFT在零频的地方有一个亮点,其他区域是全黑的,也就是说中央的频率相对于其他区域的频率太高了,那么我应该怎么改,才能像我在matlab里手动归一化后显示的一样呢
...全文
592 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
stromlord 2018-08-20
  • 打赏
  • 举报
回复
我自己解决了,只要对图像的最中央,也就是最大值处,付一个旁边像素的值就行了

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧