圖像轉置和矩陣轉置是一樣的,其公式為:
效果如下:
原圖:

結果圖:
先做圖像轉置後,再實作90度/270度的旋轉相對容易,
如圖像旋轉90度,就隻需要再水準翻轉一下:
旋轉結果圖:
圖像轉置的優化思路是:
1、将圖像分割成一系列小矩陣。
分成的小矩陣當然是越大越好,但在矩陣變大時,彙編代碼的複雜度變高,且寄存器如果使用完了也非常難處理,這裡選的是4x4的矩陣。
2、每個小矩陣的宏觀位置轉置。
3、實作每個小矩陣的内部轉置。
必須把矩陣圖和寄存器向量的關系圖畫清,然後推演一番。
neon指令vtrn是解決轉置問題的核心。
4、邊角處理
寫慣了基于一行的neon優化,到這步很容易犯錯,一定要記得這裡是二維的neon優化,邊角料是兩條邊。
該代碼僅适用于32位(rgba)圖像的轉置。
大約10倍左右性能提升,資料遺失,不補。