python - Python对存储在4D numpy数组中的图像进行蒙太奇
问题描述
我有一堆存储在 4D 数组中的图像,例如 [0, 0, :, :] 是位置 (0, 0) 的图像。现在我想制作图像的蒙太奇并将它们存储在 2D 数组中并对图像做一些事情,然后我想将蒙太奇转移回 4D 数组。我怎样才能用 numpy 管理这个?以下是我想要做的示意图。它以 3D 数组显示,但我认为您可以理解。
解决方案
操作的第一部分可以使用np.block
. 您需要将外部维度转换为非数组序列类型:
l = [list(x) for x in arr]
montage = np.block(l)
或者,您可以先按照自己喜欢的方式排列尺寸,然后再重新塑造。关键是要记住,后来的维度会被分解在一起。因此,如果您有一个包含元素的数组(A, B)
,每个元素都是一个(M, N)
图像,那么结果应该是一个(A * M, B * N)
图像。您希望每行的原始图像像素保持连续,但要连接行。所以像这样转置和重塑:
a, b, m, n = arr.shape
montage = arr.transpose(0, 2, 1, 3).reshape(a * m, b * n)
您可以很容易地使用逆运算重新整形:
stack = montage.reshape(a, m, b, n).transpose(0, 2, 1, 3)
推荐阅读
- ios - 空格不会从字符串中删除
- javascript - 无法匹配文件中的数据
- c# - MakeSignature.SignDeferred 和嵌入签名问题 (Itextsharp)
- python - 如何使用 NLTK 语料库从 Pandas 数据框文本列中删除英语停用词?
- r - 使用 Plotly 子图为每个 y 轴添加标题
- reactjs - React 功能组件不处理事件
- c# - 如何在 MongoDB C# 中连接 SSH.NET
- r - 使用 dplyr 计算比例时如何修复错误
- apache - 使用 htaccess 模拟目录
- angular - 角度是否将数据视为与(http)api请求不同?