天天看点

图像转置的Neon优化代码图像转置的Neon优化代码

图像转置和矩阵转置是一样的,其公式为:

效果如下:

原图:

图像转置的Neon优化代码图像转置的Neon优化代码

结果图:

图像转置的Neon优化代码图像转置的Neon优化代码

先做图像转置后,再实现90度/270度的旋转相对容易,

如图像旋转90度,就只需要再水平翻转一下:

旋转结果图:

图像转置的Neon优化代码图像转置的Neon优化代码

图像转置的优化思路是:

1、将图像分割成一系列小矩阵。

分成的小矩阵当然是越大越好,但在矩阵变大时,汇编代码的复杂度变高,且寄存器如果使用完了也非常难处理,这里选的是4x4的矩阵。

2、每个小矩阵的宏观位置转置。

3、实现每个小矩阵的内部转置。

必须把矩阵图和寄存器向量的关系图画清,然后推演一番。

neon指令vtrn是解决转置问题的核心。

图像转置的Neon优化代码图像转置的Neon优化代码

4、边角处理

写惯了基于一行的neon优化,到这步很容易犯错,一定要记得这里是二维的neon优化,边角料是两条边。

图像转置的Neon优化代码图像转置的Neon优化代码

该代码仅适用于32位(rgba)图像的转置。

大约10倍左右性能提升,数据遗失,不补。

继续阅读