[Java] 影像處理 Image Processing – Affine Transform 之移動

如何使用矩陣運算來達到圖片的平移

首先要知道的是在做圖片的 Affine Transform 是一種3維的矩陣運算

為什麼是3維呢? 圖片不是2維的嗎?

其實主因是因為如果是二維的矩陣運算
那麼之前的XY與運算後的XY只能是類似以下乘法關係

其實上面這個就相當於圖片縮放的邏輯
(當然縮放不是直接這樣就能用,否則圖片若是放大則會不完全,因為圖片像素數變多,資訊量還是原本小圖的數量)

若要圖片平移會有額外的值加入到算式中,該值也就是圖片平移量
如以下算式所示

這就是為什麼2維轉換要使用到3維矩陣
當然以此類推3維轉換就要使用到4維矩陣
原因就是因為平移需要 「加上常數」

那知道基本概念後就要進入主題了
依慣例先給處理效果圖

處理前

處理後

可以看到X部分移動了20個像素,而Y的部分移動了40個像素

程式碼的部分如下

真正的部分其實就只有中間 for 裡面的部分
將原先圖片的每個像素一個一個都丟進該矩陣運算後
再將原先位置的顏色填入新的位置中
即完成圖片的平移

最後奉上Demo程式
https://github.com/rs556655/Image-processing-AffineTrans-move-scale-shear

 

Gama
About

喜愛研究各種新奇技術,興趣為網路相關系統。

Leave a Reply