【发布时间】:2020-05-10 01:41:54
【问题描述】:
我想将具有 2 个通道的 4x4 图像划分为多个不重叠的正方形。
之后,我想重建图像。
from skimage.util import view_as_blocks
# create testM array
array([[[[0.53258505, 0.31525832, 0.21378392, 0.5019507 ],
[0.31612498, 0.24320562, 0.93560226, 0.08232264],
[0.89784454, 0.12741783, 0.88049819, 0.29542855],
[0.11336386, 0.71023215, 0.45679456, 0.2318959 ]],
[[0.61038755, 0.74389586, 0.85199794, 0.46680889],
[0.01701045, 0.93953861, 0.03183684, 0.00740579],
[0.58878569, 0.71348253, 0.33221104, 0.12276253],
[0.04026615, 0.53837528, 0.06759152, 0.27477069]]]])
# use view_as_blocks() to get "grid" image
testB = view_as_blocks(testM, block_shape=(1,2,2,2)).reshape(-1,*(1,2,2,2))
现在我有这个大小为 2x2 的数组的多个块:
array([[[[[0.53258505, 0.31525832],
[0.31612498, 0.24320562]],
...
[[0.33221104, 0.12276253],
[0.06759152, 0.27477069]]]]])
但是,我无法将其重塑回原来的形状:
testB.reshape(1,2,4,4)
导致这一点。每个“块”只是一个接一个地附加一个值,但不被视为一个块。
array([[[[0.53258505, 0.31525832, 0.31612498, 0.24320562],
[0.61038755, 0.74389586, 0.01701045, 0.93953861],
[0.21378392, 0.5019507 , 0.93560226, 0.08232264],
[0.85199794, 0.46680889, 0.03183684, 0.00740579]],
[[0.89784454, 0.12741783, 0.11336386, 0.71023215],
[0.58878569, 0.71348253, 0.04026615, 0.53837528],
[0.88049819, 0.29542855, 0.45679456, 0.2318959 ],
[0.33221104, 0.12276253, 0.06759152, 0.27477069]]]])
在使用reshape() 之前,我已经尝试了多个.swapaxes(),但都无法正常工作。
【问题讨论】:
-
尝试混合使用重塑、转置(或交换)和重塑,例如
arr1.reshape(2,2,2,2,2).transpose(0,1,3,2,4).reshape(2,4,4) -
你在两个
reshapes之间做什么?避免这些可能很简单,就像使用np.ndindex作为 for 循环迭代器,而不是在第一个维度上循环。 -
@hpaulj:我尝试了几种变体,但经过大量尝试后找不到合适的变体
-
@DanielF:我正在使用
skimage将图像划分为非重叠块。
标签: python numpy multidimensional-array reshape scikit-image