05 梯度处理
梯度
梯度计算是:在某个通道内,计算某个像素点和周围(水平,垂直,四周...)的像素的亮度差异的大小,不同的算子代表不同的计算方式
算子
Sobel算子 一种常用的算子
边缘点
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:计算结果不会被截断,取计算后的值(可能<0,可能大于255)。如果cv2.CV_64F替换为 -1 ,每个像素计算结果小于0取0,大于0取255
1,0:x 方向
0,1:y 方向
ksize:核大小
img3 = cv2.convertScaleAbs(img2)
convertScaleAbs:将越界的值限制再0-255,且取绝对值
x方向求出来 = Gx
y方向求出来 = Gy
1:1权重拼接:img = cv2.addWeighted(imgX,0.5,imgY,0.5,全局亮度)
Scharr算子
原理上:和Sobel算子没有区别,差异在于比例放大了,也就是说,同样的差异,Scharr算子认为差异更大---更加敏感,放大细节
Laplacian算子
通过结构可知:Laplaceian算子强调像素点和它上下左右四个像素点自和进行比较,有什么应用场景呢?还不知道
具体算法
(x,y单方向)
1.非边缘像素:对应位置,数值权重 再求和
2.边缘点
2.1 x方向:第一竖一定是0,设为基础点。其余边缘点 = 2(右-左)
2.2 y方向:第一行一定是0,设为基础点。其余边缘点 = 2*(下-上)
(x,y斜向):(左上+右下)-(右上+左下)

浙公网安备 33010602011771号