python - 如何在 Python 中将图像划分为块、处理它们并将它们重新合并在一起?
解决方案
这是我对这篇文章的回答的复制粘贴,并添加了如何重新组装图像:我会像在下面的代码中那样做。在我的示例中,我使用了来自 skimage.data 的部分图像来说明我的方法,并制作了不同的形状和大小,以使其看起来更漂亮。但是您可以通过调整这些参数来为您的 dta 做同样的事情。
from skimage import data
from matplotlib import pyplot as plt
import numpy as np
astronaut = data.astronaut()
coffee = data.coffee()
arr = np.stack([coffee[:400, :400, :], astronaut[:400, :400, :]])
plt.imshow(arr[0])
plt.title('arr[0]')
plt.figure()
plt.imshow(arr[1])
plt.title('arr[1]')
arr_blocks = arr.reshape(arr.shape[0], 4, 100, 4, 100, 3, ).swapaxes(2, 3)
arr_blocks = arr_blocks.reshape(-1, 100, 100, 3)
for i, block in enumerate(arr_blocks):
plt.figure(10+i//16, figsize = (10, 10))
plt.subplot(4, 4, i%16+1)
plt.imshow(block)
plt.title(f'block {i}')
# batch_size = 9
# some_outputs_list = []
# for i in range(arr_blocks.shape[0]//batch_size + ((arr_blocks.shape[0]%batch_size) > 0)):
# some_outputs_list.append(some_function(arr_blocks[i*batch_size:(i+1)*batch_size]))
输出:
为了重新组装图像,我会这样做:
arr_blocks = arr_blocks.reshape(-1, 4, 4, 100, 100, 3).swapaxes(2, 3)
arr_blocks = arr_blocks.reshape(-1, 400, 400, 3)
for i, block in enumerate(arr_blocks):
plt.figure()
plt.imshow(block)
plt.title('reconstruction {i}')
输出:
推荐阅读
- vba - 如何从单列中分离单词
- python - 为什么将此数组与两个值而不是一个值进行比较?
- java - 如何在使用 Hadoop java api 完成 Mapreduce 作业后调用自定义方法?
- python - 获取字典中键的特定值?
- javascript - 是否可以使用 TypeScript 在 HTML 中“预渲染”一个 div?
- reactjs - 部署 React Web 应用微服务环境
- clojure - clojure 宏:无法解析符号
- bash - 如何从自定义 udev 规则运行具有正确权限的脚本?
- php - 将 MongoDB Aggregation $all (JS) 翻译成 Doctrine ODM Aggregation (PHP)
- java - 更改方法参考的类型