如何使用python从图像堆栈中读取时间序列?

1 python image matrix wrapper

我正在尝试将图像堆栈读入3-d矩阵(例如X,Y,Z)。目的是遍历整个图像(从(X1,Y1)到(Xn,Yn)。在每个位置,例如(X1,Y3),我想读取整个Z数组并对其进行一些处理。例如,图像将包含计算结果。

举例来说,假设我有12幅(3x3)具有反射率数据的图像,每幅图像给出一个月的反射率。

图片1

   X1 X2 X3
Y1 10 10 14
Y2 12 14 16
Y3 10 19 17
Run Code Online (Sandbox Code Playgroud)

图片2:

   20 21 23
   20 23 29
   21 22 21
Run Code Online (Sandbox Code Playgroud)

。。。

图片7:

   50 50 60
   60 70 60
   65 67 80
Run Code Online (Sandbox Code Playgroud)

。。。

图片12:

   X1 X2 X3
Y1 10 11 12
Y2 10 16 17
Y3 12 13 14
Run Code Online (Sandbox Code Playgroud)

因此,最后,我想读取每个(X,Y)位置的z数组。从(X1,Y1)开始,到(X12,y12)结束。例如,在(X1,Y3),Z数组为:[10,21,。,。,。,65,。,。,。,12]。我将在数组上应用一些函数,例如,数组的最大值。例如,位置(X1,Y3)的新输出图像的值将为65。

我使用ENVI图像处理库在IDL中做了类似的操作。但是我真的很想用python做到这一点,因为我的目标是切换到开源语言。我刚刚开始使用python,到目前为止,我的搜索还没有给我任何解决方案,这就是为什么我要寻求经验丰富的python用户的帮助。

非常感谢,安吉拉

Han*_*rén 5

实际上,使用numpy非常简单,因此我将立即为您提供一些代码。请注意,它不一定是完整的解决方案。

import numpy as np
import cv2

image_files = [] # Your list of files
image_height = 3
image_width = 3
image_stack = np.empty((image_height, image_width, len(image_files))) # Create empty HxWxN array/matrix

for i, fname in enumerate(image_files):
    img = cv2.imread(fname, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    image_stack[:,:,i] = img # Set the i:th slice to this image

mean_img = np.mean(image_stack, axis=2) # Take the mean for each pixel
Run Code Online (Sandbox Code Playgroud)

由于我们仅使用OpenCV进行图像加载,因此您当然可以将其切换为其他类型,只要它能为您提供一个numpy数组即可。

如果您有任何疑问,请发表评论,我会相应地进行更新。