【问题标题】:Producing equal images in Python and Matlab - How to?在 Python 和 Matlab 中生成相同的图像 - 如何?
【发布时间】:2022-08-16 18:05:03
【问题描述】:

我正在从事一个涉及 Matlab 和 Python 的项目,并且正在制作一些图像。尽管我要转换为图像的矩阵是相同的,但我得到的图像却不一样。我认为这与用于显示图像的 Python 和 Matlab 命令之间的等效性有关,因此这就是我在这里的原因。

MATLAB代码:

fmn0 = imread(\'cameraman.tif\');
fmn=double(ifftshift(fmn0,2));
Fun=fftshift(fft(fmn,[],2),2); 

imshow(real(Fun))

MATLAB 输出:

蟒蛇代码:

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)

蟒蛇输出:

我可以看到一些相似之处,但是如何让 Python 输出与 Matlab 输出完全相同?请注意,有趣的矩阵是完全相同的。

  • imshow(real(Fun),[]) 并看到颜色自动调整的魔力消失!
  • @AnderBiguri 您的评论很有用,如果我想将我的 Matlab 输出转换为我已经拥有的 python 输出,它就可以工作。但我想将 python 输出转换为 matlab 输出,而不是相反!
  • 好吧....然后做相反的事情???让我换个说法,然后do plt.clims([0 1]) 神奇地打开调整那个 MATLAB 的相同颜色!
  • 而已!谢谢您的帮助!如果您想在下面详细说明答案,我很高兴将其标记为正确的答案!只需注意一点:我使用了plt.clim([0,1])

标签: python image matlab grayscale


【解决方案1】:

MATLAB 将输出自动缩放为[0 1],因此 MATLAB 图中的大部分数据都非常饱和,并且不可见。

执行imshow(real(Fun),[]) 以消除饱和并实际查看所有数据(MATLAB)。

执行plt.clim([0,1]) 以使您的数据在 python 中的可视化饱和。

您也可以只给 MATLAB 或 python 一个不同范围的值来可视化(例如 [0, 15])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2015-03-09
    • 2013-04-06
    • 1970-01-01
    • 2015-09-27
    • 2014-07-03
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多