05 梯度處理
阿新 • • 發佈:2021-01-07
梯度
梯度計算是:在某個通道內,計算某個畫素點和周圍(水平,垂直,四周...)的畫素的亮度差異的大小,不同的運算元代表不同的計算方式
運算元
Sobel運算元 一種常用的運算元
\[Gx = \begin{bmatrix} {{-1}}&{{0}}&{{1}}\\ {{-2}}&{{0}}&{{2}}\\ {{-1}}&{{0}}&{{1}}\\ \end{bmatrix}\]\[Gy = \begin{bmatrix} {{-1}}&{{-2}}&{{-1}}\\ {{0}}&{{0}}&{{0}}\\ {{1}}&{{2}}&{{1}}\\ \end{bmatrix}\]邊緣點
\[G =2 \begin{bmatrix} {{-1}}&{{0}}&{{1}}\\ {{-1}}&{{0}}&{{1}}\\ \end{bmatrix}\]\[G =2 \begin{bmatrix} {{-1}}&{{-1}}\\ {{0}}&{{0}}\\ {{1}}&{{1}}\\ \end{bmatrix}\]Sobel運算元一般取3X3矩陣(可以自由指定),它會用它的中心遍歷每個通道的影象中的每個畫素點,並進行運算(對應位置相乘,並相加),得到的結果作為該畫素點的亮度值
對於Gx,右邊的值 減去 左邊的值.
權重: 在水平方向,靠近中心點(目標畫素點)的權重為2,大於斜向值1
對於Gy:下邊的值 減去 上邊的值.
權重: 在垂直方向,靠近中心點(目標畫素點)的權重為2,大於斜向值1
img= cv2.imread('imgs/300.png',0)
cv2.imshow('1',img)
img2 = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
cv2.CV_64F:
1,0:x 方向
0,1:y 方向
ksize:核大小
Scharr運算元
\[Gx = \begin{bmatrix} {{-3}}&{{0}}&{{3}}\\ {{10}}&{{0}}&{{10}}\\ {{-3}}&{{0}}&{{3}}\\ \end{bmatrix}\]\[Gy = \begin{bmatrix} {{-3}}&{{-10}}&{{-3}}\\ {{0}}&{{0}}&{{0}}\\ {{3}}&{{10}}&{{3}}\\ \end{bmatrix}\]原理上:和Sobel運算元沒有區別,差異在於比例放大了,也就是說,同樣的差異,Scharr運算元認為差異更大---更加敏感,放大細節
Laplacian運算元
\[G = \begin{bmatrix} {{0}}&{{1}}&{{0}}\\ {{1}}&{{-4}}&{{1}}\\ {{0}}&{{1}}&{{0}}\\ \end{bmatrix}\]通過結構可知:Laplaceian運算元強調畫素點和它上下左右四個畫素點自和進行比較,有什麼應用場景呢?還不知道
具體演算法
(x,y單方向)
1.非邊緣畫素:對應位置,數值權重 再求和
2.邊緣點
2.1 x方向:第一豎一定是0,設為基礎點。其餘邊緣點 = 2(右-左)
2.2 y方向:第一行一定是0,設為基礎點。其餘邊緣點 = 2*(下-上)
(x,y斜向):(左上+右下)-(右上+左下)