Armv8 - 64 SIMD浮点编程:矩阵运算与图像转换
1. RGB到灰度图像转换
在将每16个像素块从RGB转换为灰度后, ConvertRgbGs_ 使用宏 F32toU8 将单精度浮点值转换为无符号8位整数。这个宏利用了 uqxtn 和 uqxtn2 (无符号饱和提取窄)指令,通过饱和算术进行无符号整数大小缩减,避免了像C++函数 ConvertRgbGsCpp 那样进行显式的像素裁剪操作。
使用 F32toU8 宏后, ConvertRgbGs_ 使用 st1 {v2.16b},[x0],16 指令将转换后的灰度像素保存到由参数 pb_gs 指向的像素缓冲区。 subs x2,x2,16 指令计算 n -= 16 ,并通过循环 Loop1 重复操作,直到所有像素处理完毕。
以下是RGB到灰度转换示例的结果:
- 正在转换RGB图像 ../../Data/ImageC.png
- 图像高度 im_h = 960 像素
- 图像宽度 im_w = 640 像素
- 保存灰度图像 #1 - Ch15_05_ConvertRgbToGs_ImageC_GS1.png
Armv8-64 SIMD浮点编程实践
超级会员免费看
订阅专栏 解锁全文
5595

被折叠的 条评论
为什么被折叠?



