我正在尝试实现此图像缩小算法的逐行版本:http: //intel.ly/1avllXm,应用于 RGBA 8 位图像。
为了简化,考虑调整单行的大小,w_src -> w_dst。然后每个像素可以将其值贡献给权重为 1.0 的单个输出累加器,或者贡献给权重为 alpha 和 (1.0f - alpha) 的两个连续输出像素。在 C/伪代码中:
float acc[w_dst] = malloc(w_dst * 4);
x_dst = 0
for x = 0 .. w_src:
if x is a pivot column:
acc[x_dst] += (w_src[x] * alpha);
x_dst++;
acc[x_dst] += (w_src[x] * (1.0f - alpha);
else
acc[x_dst] += w_src[x];
最后,将每个累加器通道除以对其有贡献的源像素数(浮点值):
uint8_t dst = malloc(w_dst);
for x_dst = 0 .. w_dst
dst[x_dst] = (uint8_t)round(acc[x_dst] / area);
我的参考纯 C 实现工作正常。但是,我想知道是否有一种方法可以使用 NEON 操作来加快速度(请记住,每个像素都是 8 位 RGBA)。谢谢!