梯度
梯度计算是:在某个通道内,计算某个像素点和周围(水平,垂直,四周...)的像素的亮度差异的大小,不同的算子代表不同的计算方式
算子
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}\]
\[Gxy =
\begin{bmatrix}
{{1}}&{{0}}&{{-1}}\{{0}}&{{0}}&{{0}}\{{-1}}&{{0}}&{{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斜向):(左上+右下)-(右上+左下)
05 梯度处理
原文:https://www.cnblogs.com/m4kemoretime/p/14226232.html