边缘检测
边缘检测相关笔记
优边缘检测的主要评价标准: 1.低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。 2.高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。 3.最小响应: 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
canny算子
检测步骤
- 消除噪声
一般情况下,使用高斯平滑滤波器卷积降噪 - 计算梯度幅值和方向
- 运用一对卷积阵列 (分别作用于x和y方向)
- 计算梯度幅值和方向
梯度方向一般为0, 45, 90, 135 - 非极大值抑制 这一步排除非边缘像素, 仅仅保留了一些细线条(候选边缘)。
- 滞后阈值 滞后阈值需要两个阈值(高阈值和低阈值)
- 如果某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。
- 如果某一像素位置的幅值小于低阈值,该像素被排除。
- 如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
1
2
3
void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false );
参数详解:
- 第一个参数,InputArray类型的
src
,输入图像。需为单通道8位图像。 - 第二个参数,OutputArray类型的
dst
,目标图像,需要和源图片有一样的尺寸和类型。 - 第三个参数,double类型的
threshold1
,第一个滞后性阈值。 - 第四个参数,double类型的
threshold2
,第二个滞后性阈值。 - 第五个参数,int类型的
apertureSize
,表示应用Sobel算子的孔径大小,其有默认值3。 - 第六个参数,bool类型的
L2gradient
,一个计算图像梯度幅值的标识,有默认值false。
阈值1和阈值2两者的小者用于边缘连接,而大者用来控制强边缘的初始段。推荐的高低阈值比在2:1到3:1之间。
sobel算子
计算过程,假设被作用图像为I。
- 分别在x和y两个方向求导
- 水平变化 将I与一个奇数大小的内核进行卷积。
- 垂直变化 将I与一个奇数大小的内核进行卷积。
- 在图像的每一点,结合以上两个结果求出近似梯度
1
2
3
4
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 );
参数详解:
- 第一个参数,InputArray类型的
src
,输入图像。 - 第二个参数,OutputArray类型的
dst
,目标图像,需要和源图片有一样的尺寸和类型。 - 第三个参数,int类型的
ddepth
,输出图像的深度,支持如下src.depth()和ddepth的组合:- 若src.depth() = CV_8U, 取ddepth=-1,CV_16S,CV_32F,CV_64F
- 若src.depth() = CV_16U或CV_16S, 取ddepth =-1,CV_32F,CV_64F
- 若src.depth() = CV_32F, 取ddepth =-1,CV_32F,CV_64F
- 若src.depth() = CV_64F, 取ddepth = -1,CV_64F
- 第四个参数,int类型的
dx
,x方向上的差分阶数。 - 第五个参数,int类型的
dy
,y方向上的差分阶数。 - 第六个参数,int类型的
ksize
,有默认值3。Sobel核的大小必须取1,3,5或7。 - 第七个参数,double类型的
scale
,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。 - 第八个参数,double类型的
delta
,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。 - 第九个参数, int类型的
borderType
,边界模式,默认值为BORDER_DEFAULT。
laplace算子
Laplacian算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度grad()的散度div()。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为: (1) f的拉普拉斯算子也是笛卡儿坐标系xi中的所有非混合二阶偏导数求和: (2) 作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥ 2。表达式(1)(或(2))定义了一个算子Δ :C(R) → C(R) ,或更一般地,对于任何开集Ω,定义了一个算子Δ : C(Ω) → C(Ω)。
Laplacian算子的定义:
\[Laplacian(f)=\frac{\vartheta^2f}{\vartheta x^2}+\frac{\vartheta^2f}{\vartheta y^2}\]1
2
3
void Laplacian( InputArray src, OutputArray dst, int ddepth,
int ksize = 1, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT );;
参数详解:
- 第一个参数,InputArray类型的
src
,输入图像。需为单通道8位图像。 - 第二个参数,OutputArray类型的
dst
,目标图像,需要和源图片有一样的尺寸和类型。 - 第三个参数,int类型的
ddepth
,输出图像的深度。 - 第四个参数,int类型的
ksize
,用于计算二阶导数的滤波器的孔径尺寸,大小必须为正奇数,且有默认值1 - 第五个参数,double类型的
scale
,计算拉普拉斯值的时候可选的比例因子,默认值是1。 - 第六个参数,double类型的
delta
,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。 - 第七个参数, int类型的
borderType
,边界模式,默认值为BORDER_DEFAULT。
This post is licensed under CC BY 4.0 by the author.