一、前言
轉置操作在很多算法上都有著廣泛的應用,在數(shù)學上矩陣轉置更有著特殊的意義。而在圖像處理上,如果說圖像數(shù)據(jù)本身的轉置,除了顯示外,本身并無特殊含義,但是在某些情況下,確能有效的提高算法效率,比如很多行列可分離的算法,在很多情況下,行和列方向的算法邏輯隨相同,但是由于多方面原因(比如Cache miss, 優(yōu)化水平等)行列處理時間還是由很大的差異的,這個時候如果轉置的耗時和處理時間相比所占比例甚小,則可以考慮在進行耗時處理前先轉置數(shù)據(jù),然后調用不耗時的方向的算法,處理完后再次進行轉置。因此,一個高效的圖像轉置算法的設計時非常有必要的。
二、目前的狀況
沒怎么搜集這方面的資料,不過在百度上看到的優(yōu)化的帖子也有幾篇:
1、利用SSE優(yōu)化圖像轉置 這篇文章講到了SSE優(yōu)化轉置操作,講的很簡單,我只是稍微看了下他的代碼,他似乎處理的不是普通的8位圖像,而是16位的,反正我是沒有看懂,并且他的提供比較的C代碼本身寫法就完全沒有考慮到C語言自身的優(yōu)化,因此最后提出SSE代碼比C快5倍說服力就大為打折扣,不過他這里可以值得學習的地方就是這個轉置支持In-Place操作,就是Src和Dest可以相同。
2、圖像轉置的Neon優(yōu)化代碼 Neon的代碼,沒看懂,不過后面說10倍左右的提速,其實也要看原始的C代碼是怎么寫的了,不過原文也明確的說,只支持RGBA 32位的圖,顯然作者也避而不談灰度或者24位的圖,當然這于手機端似乎沒有24位的概念有關。