在Python和MatLab中生成相同的图像--如何?

von4xj4u  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(211)

我在一个项目上工作,涉及到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输出完全相同呢?注意,有趣的矩阵是完全相同的。

ldxq2e6h

ldxq2e6h1#

MatLab自动将输出调整为[0 1],因此您在MatLab绘图中的大多数数据都是极度饱和的,并且不可见。
执行imshow(real(Fun),[])以消除饱和度,并实际查看所有数据(MatLab)。
执行plt.clim([0,1])以使您的数据在Python中的可视化效果达到饱和。
您也可以只给MatLab或Python值的不同范围进行可视化(例如,[0,15])

相关问题