vmin vmax 算法 matplotlib
vmin vmax algorithm matplotlib
我编写了图像校准脚本(暗框和平场)...这是部分代码
for n in range(len(img)):
with pyfits.open(img[n], mode='update', memmap=True) as im:
imgg = im[0].data
header = im[0].header
imgg.astype(float)
imgg = (imgg - dd) / df
imgg[np.isnan(imgg)] = 1
imgg.astype(int)
plt.imshow(imgg, cmap=plt.cm.Greys_r, vmin=0.5, vmax=1.5)
plt.show()
这部分代码用暗框和平场校准图像...当我在绘图 vmin
和 vmax
中使用时,我得到了正确的图片,但我没有知道 vmin
和 vmax
是如何工作的。我需要将其应用于图像数据 (imgg
),因为当我保存数据时,我得到的图像没有 vmin
和 vmax
...
有什么建议吗?
第二个问题...如何将数据更改保存在适合的文件中?当我使用 im.close()
时,它只能在一个文件上工作,但不能循环工作。
谢谢
编辑
好的,这是完整的脚本
import numpy as np
import pyfits
from matplotlib import pyplot as plt
import glob
dark=glob.glob('.../ha/dark/*.fits')
flat=glob.glob('.../ha/flat/*.fits')
img=glob.glob('.../ha/*.fits')
sumd0 = pyfits.open(dark[0])
sumdd=sumd0[0].data
sumdd.astype(float)
for i in range(1,len(dark)):
sumdi=pyfits.open(dark[i])
sumdi=sumdi[0].data
sumdd=sumdd.astype(float)+sumdi.astype(float)
dd=sumdd/len(dark)
sumf0 = pyfits.open(flat[0])
sumff=sumf0[0].data
sumff.astype(float)
for i in range(1,len(flat)):
sumfi=pyfits.open(flat[i])
sumfi=sumfi[0].data
sumff=sumff.astype(float)+sumfi.astype(float)
ff=sumff/len(flat)
df=(ff-dd)
for n in range(len(img)):
with pyfits.open(img[n],mode='update',memmap=True) as im:
imgg=im[0].data
header=im[0].header
imgg.astype(float)
imgg=(imgg-dd)/df
imgg.astype(int)
plt.imshow(imgg,cmap=plt.cm.Greys_r,vmin=0.5,vmax=1.5)
plt.show()
vmin
和 vmax
参数在 imshow
中的使用与 norm 结合使用以规范化您的数据。
示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,10,10)
y = np.sin(x)
data = np.array([x,y])
# WITHOUT VMIN AND VMAX
im = plt.imshow(data,cmap = plt.get_cmap('jet'))
plt.colorbar(im)
plt.show()
您会得到这样的图,其中 imshow
将数据标准化为 min
和 max
。
但是当我们将vmin
和vmax
设置为0和1时,颜色将被归一化,就好像数据中存在值0和值1一样。
这里我们把imshow
改成
im = plt.imshow(data,cmap = plt.get_cmap('jet'), vmin=0, vmax=1)
正如您从颜色条中看到的那样,它被归一化为 0 和 1。
有点不合理的问题,但我认为这可以满足您的需求(来自您在另一个答案中的评论)。
要以与 vmin
和 vmax
相同的行为限制数据,请使用 np.clip
:
np.clip(data, min, max)
你的情况:
data = np.clip(data, 0.5, 1.5)
我编写了图像校准脚本(暗框和平场)...这是部分代码
for n in range(len(img)):
with pyfits.open(img[n], mode='update', memmap=True) as im:
imgg = im[0].data
header = im[0].header
imgg.astype(float)
imgg = (imgg - dd) / df
imgg[np.isnan(imgg)] = 1
imgg.astype(int)
plt.imshow(imgg, cmap=plt.cm.Greys_r, vmin=0.5, vmax=1.5)
plt.show()
这部分代码用暗框和平场校准图像...当我在绘图 vmin
和 vmax
中使用时,我得到了正确的图片,但我没有知道 vmin
和 vmax
是如何工作的。我需要将其应用于图像数据 (imgg
),因为当我保存数据时,我得到的图像没有 vmin
和 vmax
...
有什么建议吗?
第二个问题...如何将数据更改保存在适合的文件中?当我使用 im.close()
时,它只能在一个文件上工作,但不能循环工作。
谢谢
编辑
好的,这是完整的脚本
import numpy as np
import pyfits
from matplotlib import pyplot as plt
import glob
dark=glob.glob('.../ha/dark/*.fits')
flat=glob.glob('.../ha/flat/*.fits')
img=glob.glob('.../ha/*.fits')
sumd0 = pyfits.open(dark[0])
sumdd=sumd0[0].data
sumdd.astype(float)
for i in range(1,len(dark)):
sumdi=pyfits.open(dark[i])
sumdi=sumdi[0].data
sumdd=sumdd.astype(float)+sumdi.astype(float)
dd=sumdd/len(dark)
sumf0 = pyfits.open(flat[0])
sumff=sumf0[0].data
sumff.astype(float)
for i in range(1,len(flat)):
sumfi=pyfits.open(flat[i])
sumfi=sumfi[0].data
sumff=sumff.astype(float)+sumfi.astype(float)
ff=sumff/len(flat)
df=(ff-dd)
for n in range(len(img)):
with pyfits.open(img[n],mode='update',memmap=True) as im:
imgg=im[0].data
header=im[0].header
imgg.astype(float)
imgg=(imgg-dd)/df
imgg.astype(int)
plt.imshow(imgg,cmap=plt.cm.Greys_r,vmin=0.5,vmax=1.5)
plt.show()
vmin
和 vmax
参数在 imshow
中的使用与 norm 结合使用以规范化您的数据。
示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,10,10)
y = np.sin(x)
data = np.array([x,y])
# WITHOUT VMIN AND VMAX
im = plt.imshow(data,cmap = plt.get_cmap('jet'))
plt.colorbar(im)
plt.show()
您会得到这样的图,其中 imshow
将数据标准化为 min
和 max
。
但是当我们将vmin
和vmax
设置为0和1时,颜色将被归一化,就好像数据中存在值0和值1一样。
这里我们把imshow
改成
im = plt.imshow(data,cmap = plt.get_cmap('jet'), vmin=0, vmax=1)
正如您从颜色条中看到的那样,它被归一化为 0 和 1。
有点不合理的问题,但我认为这可以满足您的需求(来自您在另一个答案中的评论)。
要以与 vmin
和 vmax
相同的行为限制数据,请使用 np.clip
:
np.clip(data, min, max)
你的情况:
data = np.clip(data, 0.5, 1.5)