图像转置和矩阵转置是一样的,其公式为:
效果如下:
原图:

结果图:
先做图像转置后,再实现90度/270度的旋转相对容易,
如图像旋转90度,就只需要再水平翻转一下:
旋转结果图:
图像转置的优化思路是:
1、将图像分割成一系列小矩阵。
分成的小矩阵当然是越大越好,但在矩阵变大时,汇编代码的复杂度变高,且寄存器如果使用完了也非常难处理,这里选的是4x4的矩阵。
2、每个小矩阵的宏观位置转置。
3、实现每个小矩阵的内部转置。
必须把矩阵图和寄存器向量的关系图画清,然后推演一番。
neon指令vtrn是解决转置问题的核心。
4、边角处理
写惯了基于一行的neon优化,到这步很容易犯错,一定要记得这里是二维的neon优化,边角料是两条边。
该代码仅适用于32位(rgba)图像的转置。
大约10倍左右性能提升,数据遗失,不补。