我在一个项目上工作,涉及到MatLab和Python,我正在制作一些图像。虽然我想要转换成图像的矩阵是相同的,但我得到的图像并不相同。我认为这与显示图像的Python和MatLab命令之间的等价性有关,因此这就是我来这里的原因。
matlab代码:
fmn0 = imread('cameraman.tif');
fmn=double(ifftshift(fmn0,2));
Fun=fftshift(fft(fmn,[],2),2);
imshow(real(Fun))
- MatLab输出:*
Python代码:
import numpy as np
import matplotlib.pyplot as plt
import cv2
def row_wise_fft(A):
A = np.asarray(A)
rowWiseFFT = np.zeros((A.shape[0], A.shape[1]), dtype='complex')
for i in range(0, A.shape[0]):
rowWiseFFT[i, :] = np.fft.fft(A[i,:])
return rowWiseFFT
def row_wise_ifftshift(A):
for i in range(0, len(A)):
A[i] = np.fft.ifftshift(A[i])
return A
def row_wise_fftshift(A):
for i in range(0, len(A)):
A[i] = np.fft.fftshift(A[i])
return A
fmn = cv2.imread("cameraman.tif", cv2.IMREAD_GRAYSCALE)
fun = row_wise_fftshift(row_wise_fft(row_wise_ifftshift(fmn)))
plt.set_cmap("Greys_r")
plt.imshow(fun.real)
- PYHTON输出:*
我可以看到一些相似之处,但如何才能使Python输出与MatLab输出完全相同呢?注意,有趣的矩阵是完全相同的。
1条答案
按热度按时间ldxq2e6h1#
MatLab自动将输出调整为
[0 1]
,因此您在MatLab绘图中的大多数数据都是极度饱和的,并且不可见。执行
imshow(real(Fun),[])
以消除饱和度,并实际查看所有数据(MatLab)。执行
plt.clim([0,1])
以使您的数据在Python中的可视化效果达到饱和。您也可以只给MatLab或Python值的不同范围进行可视化(例如,[0,15])