gradient 中文可以翻譯為斜率,如果要計算某個二元方程式的斜率,可以以 x 及 y 軸兩個方向來計算,方程式 f(x, y) 其 gradient 為 (f_x, f_y)。

影像的 gradient 也分為兩個方向: x-derivative 及 y-derivative,可以想成每個像素都有自己的 (f_x, f_y),其計算方式是以該像素相鄰的8個像素依不同的權重值來作計算:
image-derivative
而影像的 gradient magnitude 計算方式為 sqrt(f_x2 + f_y2),影像的 gradient direction 計算方式為 arctan(f_y / f_x)。

所以每張影像,可以計算其 image gradient (x-derivative 及 y-derivative),以及 gradient magnitude 與 gradient direction。

在 OpenCV 的實作上:
提供 Sobel(...) 來計算影像的 x-derivative 或 y-derivative。
提供 magnitude(...) 利用 x-derivative 及 y-derivative 來計算 gradient magnitude。
提供 phase(...) 利用 x-derivative 及 y-derivative 來計算 gradient direction。

原圖:


利用 Sobel 來計算原圖的 x-derivative 及 y-derivative:



利用 x-derivative 及 y-derivative 來計算 gradient magnitude:


利用 x-derivative 及 y-derivative 來計算 gradient direction:


將 gradient direction 依角度大小作顏色上的分類,0 < Red <=90, 90 < Cyan <=180, 180 < Green <= 270, 270 < Yellow <= 360


在角度上的計算,依數學上來說,是以 x 軸為主,以逆時針方向,從 0 ~ 360 度,但在這個例子中,則是以順時針方向,從 0 ~ 360 度,會有這樣子的不同,可能是與 y 軸的方向性有關,一般數學的座標軸, y 軸向上為正,不過在影像上,則是 y 軸向下為正,原點為影像的左上角:





Reference

What is gradient orientation and gradient magnitude

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知,謝謝。
創作者介紹
創作者 silverwind1982 的頭像
silverwind1982

拾人牙慧

silverwind1982 發表在 痞客邦 留言(0) 人氣()