如何确定缩放后的1D图像数组指定位置对应的原数组像素索引
图像1D数组2倍放大的坐标映射规则
默认你使用的是最近邻插值的2倍放大(即单像素直接扩展为2×2的同值像素块),且1D数组采用通用的行优先顺序存储(即逐行存储像素,每行存完再存下一行),具体映射规则如下:
通用参数定义
- 原图像宽度:
W,高度:H→ 原1D数组长度为W * H - 放大后图像宽度:
2W,高度:2H→ 新1D数组长度为4 * W * H - 原数组任意像素的索引:
old_idx
正向映射:从原像素找对应新数组位置
- 先把原1D索引转换为原图像的2D坐标
// 行优先转换规则 y = old_idx // W // 原像素所在行号,// 表示整数除法 x = old_idx % W // 原像素所在列号,% 表示取余
- 原像素对应放大后2×2块的2D坐标为:
(2y, 2x)、(2y, 2x+1)、(2y+1, 2x)、(2y+1, 2x+1) - 把上述2D坐标转成新数组1D索引的公式为:
new_idx = new_y * 2*W + new_x
代入四个2D坐标即可得到4个对应的新数组位置。
反向映射:遍历新数组赋值更高效的方案
如果要直接遍历新数组填充值,可直接通过新索引反查对应原像素:
- 新索引转新2D坐标:
new_y = new_idx // (2*W),new_x = new_idx % (2*W) - 对应原2D坐标:
old_y = new_y // 2,old_x = new_x // 2 - 对应原数组索引:
old_idx = old_y * W + old_x
示例验证
假设原图像宽W=3,高H=2,原索引为0的像素:
- 原2D坐标为
(0,0) - 对应新数组的4个索引为:
0*6+0=0、0*6+1=1、1*6+0=6、1*6+1=7,符合2×2块的位置要求。
注:如果你的1D数组是列优先存储,只需要把上述公式里的行、列计算逻辑互换即可。
内容的提问来源于stack exchange,提问作者bob marsh
相关产品推荐
相关产品推荐

