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

图像resize时重复填充原像素值的插值方法名称及用法

问题答案

插值类型说明

你给出的预期结果不属于标准均匀图像resize(线性坐标映射)的通用插值输出,不存在对应内置在通用图像处理库中的标准插值命名:

  • 常规图像缩放默认使用线性坐标映射,保证图像各区域按相同比例拉伸/压缩,不管是最近邻、双线性、双三次还是Lanczos插值,都遵循这个映射规则,这也是你试遍PIL所有重采样滤波器都无法得到预期结果的核心原因——你的预期结果是中心区域压缩、边缘区域拉伸的非线性畸变缩放,本质是自定义分段映射规则下的零阶保持(最近邻)插值,没有通用的正式学术命名。
  • 从你的预期结果可以反推出映射规则:原行7个像素,每个像素分配到的目标像素个数和它到行中心的距离正相关,即原索引为k的像素,分配的目标长度为1 + abs(k - center_idx),其中center_idx是中心像素的索引(本例中值为4的像素索引是3),最终总长度刚好为19,边缘像素复制次数最多,中心像素仅保留1个。

实现方法

你可以直接按照上述分段映射规则自行实现,一维行像素的Python参考代码如下:

src = [1, 2, 3, 4, 5, 6, 7]
src_len = len(src)
center_idx = src_len // 2  # 本例中为3,对应值4
dst = []

for k in range(src_len):
    # 计算当前原像素需要复制的次数
    repeat_num = 1 + abs(k - center_idx)
    dst.extend([src[k]] * repeat_num)

print(dst)

运行上述代码即可直接得到你预期的输出:[1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7]。
如果需要处理二维图像,你只需要先按这个规则对所有行做水平方向缩放,再对缩放结果的所有列做同规则的垂直方向缩放即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:25