2017-10-08 20 views
0

我已經閱讀了某處(但我不記得在哪裏),可以通過應用單個矩陣(僅添加和乘法)來旋轉圖像的像素。將旋轉應用於沒有鼻竇和餘弦的圖像

這是沒有竇和餘弦函數。

我還是想知道如果我做了一個夢,如果這是真的有可能...

感謝

回答

0

yes和no。

由於這是一個仿射變換(https://en.wikipedia.org/wiki/Affine_transformation),所以可以使用矩陣旋轉。

但是,如果旋轉幅度由角度指定,則無法避免使用三角函數來評估係數。

最後一句:這完全無害,爲什麼要擔心?

1

3x3變換矩陣是2D圖形工作的標準抽象。請參閱:https://en.m.wikipedia.org/wiki/Transformation_matrix。這是否避免正弦和餘弦是有點爭議的,因爲如果從一個角度出發,通常使用那些三角函數來構造旋轉矩陣。

+0

你有一個C++樣本源代碼,其確實由手的矩陣計算施加到圖像?我發現每一個代碼與opencv的作品,所以我不知道它是如何在內部工作。謝謝 – Bob5421

0

在圖形中,我們通常使用homogenuous transform matrices來執行此類任務。所以算法中是這樣的:

  1. 創建變換矩陣

    持有所有你想要的轉換。對於2D它是3x3均勻轉換矩陣或2x2旋轉矩陣(沒有翻譯)。

  2. 過程所有目標像素

    基本上從源複製像素的目標圖像,但迴路循環每隔目標像素(以避免舍入孔)。因此,讓循環經過(x,y)所以你只要複製像素...

    dst[y][x] = src[y'][x'] 
    

    其中:

    (x',y') = Matrix2x2 * (x,y) 
    

    (x',y',w) = Matrix3x3 * (x,y,1) 
    

,如果你使用的2x2沒關係或3x3矩陣或硬編碼乘法(如示例中所示):

,但你需要使用sin,cos矩陣值(每轉一次)。而不sin,cos唯一轉動是通過轉動90 deg其中:

(x',y') = (-y,x) 

或:

(x',y') = (y,-x)