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

标签 python image matrix wrapper

我正在尝试将一堆图像读入 3 维矩阵(例如 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

图 2:

   20 21 23
   20 23 29
   21 22 21

. . .

图 7:

   50 50 60
   60 70 60
   65 67 80

. . .

图 12:

   X1 X2 X3
Y1 10 11 12
Y2 10 16 17
Y3 12 13 14

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

我在 IDL 中做过类似的事情,使用 ENVI 图像处理库。但我真的很想用 python 来做这件事,因为我的目标是切换到开源语言。我刚开始使用 python,到目前为止我的搜索还没有给我任何解决方案,这就是我寻求更有经验的 python 用户帮助的原因。

非常感谢, 安吉拉

最佳答案

使用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

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

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

关于python - 如何使用 python 从图像堆栈中读取时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055839/

相关文章:

python - 在 tkinter 中使用选项菜单小部件时出错

python - QGraphicsProxyWidget 内小部件的工具提示

python - Pandas 将重复值重新堆叠到列中

html - ie8 - 当图像只有最大宽度时,将文本宽度限制为图像宽度

image - CUDA 图像旋转

python - 多重矩阵乘法

r - 在 R 中索引矩阵

c++ - R vs Rcpp vs Armadillo 中矩阵 rowSums() 与 colSums() 的效率

php - Google Chart Area 不显示 mysql 数据库

css - 你会如何定位这些图像?