1

matplotlib关于使用's绘制适合图像的问题,我遇到了一些问题imshow。似乎我的图像水平和垂直翻转。我敢肯定,我忽略了一些简单的事情,如果有人能指出我正确的方向,那就太好了。

这就是我的图像应该是什么样子:

在此处输入图像描述

因此,我将图像加载为:

from astropy.io import fits
import matplotlib
import matplotlib.pyplot as pyplot
#Opening/reading in my fits file
hdulist = fits.open('.../myfits.fits')
#Accessing the image data and specifying the dimensions I wish to use
my_image = hdulist[0].data[0,0:,0:]
#Plotting the image
pyplot.imshow(image_SWIFT_uvm2_plot, cmap='gray', vmin=0, vmax=0.5)
pyplot.show()

这就是我在情节中的形象(情节比我包含的代码复杂一点,但我已经给出了关键行,希望是一个自给自足的代码):

在此处输入图像描述

那些眼睛敏锐的人应该会看到图像在水平和垂直方向上都发生了翻转。

4

2 回答 2

3

对于 FITS 文件,约定是原点位于图像的左下角,因此您需要使用origin='lower'(默认情况下 Matplotlib 使用origin='upper')。

于 2016-06-13T07:48:23.363 回答
1

我从未使用过 astropy 模块,但我知道 PyFITS 将图像数据作为 NumPy 数组打开(从我正在阅读的内容来看,astropy.io.fits 无论如何都继承了 PyFITS 的功能,所以它应该以相同的方式工作)。如果是这种情况,那么您可以使用numpy.fliplrnumpy.flipud将阵列翻转到您想要的方向。只需更换线路

pyplot.imshow(image_SWIFT_uvm2_plot, cmap='gray', vmin=0, vmax=0.5)

import numpy as np
pyplot.imshow(np.fliplr(np.flipud(image_SWIFT_uvm2_plot)), cmap='gray',
    vmin=0, vmax=0.5)

或者,您可以做一些线性代数来翻转它,或者只是注意执行这两个翻转与使用np.rot90两次相同

pyplot.imshow(np.rot90(image_SWIFT_uvm2_plot, k=2), cmap='gray', vmin=0, vmax=0)
于 2016-06-12T21:12:55.420 回答