You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将间隔采样后的图像通道还原为图像?

还原降采样后的RGB通道为图像的思路与实现

首先得明确你当前的降采样逻辑:你是把每个颜色通道的像素按行优先顺序展平成一维数组,然后每隔10个像素取一个。这种方式并不是常规的空间维度降采样(比如隔行隔列取点),而是在全局像素序列中抽取1/10的像素,所以还原时需要把这些采样点放回它们在原图像中的原始位置。

具体实现步骤

  1. 记录原图像的尺寸:还原必须依赖原图像的高度(H)和宽度(W),所以读取图像时要先保存这两个参数。
  2. 创建空的还原画布:生成一个和原图像尺寸一致的数组,未被采样的位置可以用0填充(或者你需要的默认值)。
  3. 映射采样点的原始坐标:计算每个采样点在原图像中的行、列位置,再将R/G/B值放回对应位置。
  4. 转换为图像格式:把还原后的数组转换成PIL图像,即可保存或显示。

完整代码示例

from PIL import Image
import numpy as np

# 读取原图像并记录原始尺寸
I = np.array(Image.open('image.png').convert('RGB'))
H, W = I.shape[:2]  # 获取原图像的高度和宽度

# 你的降采样代码(保留不变)
I_flat_r = I[:,:,0].flatten()[0:-1:10]
I_flat_g = I[:,:,1].flatten()[0:-1:10]
I_flat_b = I[:,:,2].flatten()[0:-1:10]

# 开始还原图像
# 创建和原图像同尺寸的空数组,用0填充未采样区域
reconstructed_img_array = np.zeros((H, W, 3), dtype=np.uint8)

# 计算采样点对应的原图像索引(和你采样时的索引完全一致:0,10,20,...)
sampled_indices = np.arange(0, H * W, 10)

# 将一维索引转换为原图像的行、列坐标
rows = sampled_indices // W
cols = sampled_indices % W

# 将降采样后的R/G/B值放回对应位置
reconstructed_img_array[rows, cols, 0] = I_flat_r
reconstructed_img_array[rows, cols, 1] = I_flat_g
reconstructed_img_array[rows, cols, 2] = I_flat_b

# 转换为PIL图像并保存/显示
reconstructed_img = Image.fromarray(reconstructed_img_array)
reconstructed_img.save('reconstructed_image.png')
reconstructed_img.show()

额外说明:如果需要空间维度的降采样

如果你原本想实现的是按空间网格隔10行10列取点(这种方式更适合点云生成,因为能保留空间结构),那你的采样方式可以调整,还原也更简单:

# 空间降采样:每隔10行、10列取一个像素(得到原图像1/100大小的降采样图)
downsampled = I[::10, ::10, :]

# 如果需要还原回原图像尺寸,可以用插值方法(比如最近邻插值)
downsampled_pil = Image.fromarray(downsampled)
reconstructed_full_size = downsampled_pil.resize((W, H), Image.NEAREST)
reconstructed_full_size.save('reconstructed_full_size.png')

这种空间降采样得到的点云会更符合空间分布规律,计算点云时效率也更高,你可以根据需求选择合适的方式。

内容的提问来源于stack exchange,提问作者Jinglei Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:35:04