图像边缘:找到像素值差异比较大的地方
1. 对图像进行一阶求导(即Sobel),最大变化处的绝对值最大值
2. 对图像进行二阶求导(即laplance),最大变化处的值为零
算子
1. Sobel算子
原理:权重的差异扩大了差异(当kernal覆盖的区域的像素值一样时,kernel覆盖的像素卷积和为0(即锚点的值为0);当差异很小时,卷积和很小;当差异很大时,卷积和绝对值很大。)
a. X 方向梯度(3行3列:[-1,0,1, -2,0,2, -1,0,1]),由于kernel的中间一列为0,竖直方向的差异没有影响
Mat kernel_x = (Mat_<int>(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);
b. Y 方向梯度(3行3列: [-1,-2,-1, 0,0,0, 1,2,1])
Mat kernel_y = (Mat_<int>(3, 3) << -1, -2, -1, 0,0,0, 1,2,1);
c. 获取边缘
X方向梯度和Y方向梯度求平方,再开方(G=sqrt(x*x+y*y),可用近似值:G=|x|+|y|加快运算速度)
d. 过滤,梯度大于阈值的保留
2. Scharr算子([3,0,3, -10 ,0,10, -3,0,3])
Sobel的改进,更大的权重产生更大的差异
3. 拉普拉斯算子(3行3列: [0,-1,0, -1,4,-1, 0,-1,0])
原理:比较锚点和周围点
Mat kernel_y = (Mat_<int>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
4. robert算子 [1,0,0,-1] ,[0,1,-1,0]
5. canny边缘检测
原理:
a. 高斯模糊
b. 灰度图像
c. 计算梯度
d. 非最大信号抑制
e. 高低阈值输出图像(T1, T2为阈值,凡是高于T2的都保留,凡是小于T1都丢弃,从高于T2的像素出发,凡是大于T1而且相互连接的,都保留。最终得到一个输出二值图像,推荐的高低阈值比值为 T2: T1 = 3:1/2:1其中T2为高阈值,T1为低阈值)
Sobel
void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
src:图像
dst:目标图像
ddepth:目标图像深度
dx:x方向差分阶数(为1时表示获取x方向梯度)
dy:y方向差分阶数(为1时表示获取y方向梯度)
ksize:算子大小
scale:缩放
delta:可选增量(偏移量)
borderType:边界模式
Scharr
void Scharr( InputArray src, OutputArray dst, int ddepth, int dx, int dy, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
src:图像
dst:目标图像
ddepth:目标图像深度
dx:x方向差分阶数(为1时表示获取x方向梯度)
dy:y方向差分阶数(为1时表示获取y方向梯度)
ksize:算子大小
scale:缩放
delta:可选增量(偏移量)
borderType:边界模式
Laplacian
void Laplacian( InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
src:图像
dst:目标图像
ddepth:目标图像深度
ksize:算子大小
scale:缩放
delta:可选增量(偏移量)
borderType:边界模式
Canny
void Canny( InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool gradient = false );
image:图像
edges:目标图像
threshold1:低阈值
threshold2:高阈值
apertureSize:算子大小
L2gradient:是否归一化
元素值转为uint8
void convertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0);
src:图像
dst:目标图像
alpha:比例缩放
beta:可选增量(偏移量)