一、前言
转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义。而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如很多行列可分离的算法,在很多情况下,行和列方向的算法逻辑随相同,但是由于多方面原因(比如Cache miss, 优化水平等)行列处理时间还是由很大的差异的,这个时候如果转置的耗时和处理时间相比所占比例甚小,则可以考虑在进行耗时处理前先转置数据,然后调用不耗时的方向的算法,处理完后再次进行转置。因此,一个高效的图像转置算法的设计时非常有必要的。
二、目前的状况
没怎么搜集这方面的资料,不过在百度上看到的优化的帖子也有几篇:
1、利用SSE优化图像转置 这篇文章讲到了SSE优化转置操作,讲的很简单,我只是稍微看了下他的代码,他似乎处理的不是普通的8位图像,而是16位的,反正我是没有看懂,并且他的提供比较的C代码本身写法就完全没有考虑到C语言自身的优化,因此最后提出SSE代码比C快5倍说服力就大为打折扣,不过他这里可以值得学习的地方就是这个转置支持In-Place操作,就是Src和Dest可以相同。
2、图像转置的Neon优化代码 Neon的代码,没看懂,不过后面说10倍左右的提速,其实也要看原始的C代码是怎么写的了,不过原文也明确的说,只支持RGBA 32位的图,显然作者也避而不谈灰度或者24位的图,当然这于手机端似乎没有24位的概念有关。