当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

OpenCV函数Sobel算子详解

本文只对opencv函数算子做中文说明,不以实例展示函数算子的用法与运行效果,如有兴趣,可自行编写代码查看效果。

OpenCV

OpenCV

Sobel

使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分

void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
src
输入图像.
dst
输出图像.
xorder
x 方向上的差分阶数
yorder
y 方向上的差分阶数
aperture_size
扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size 可分离内核将用来计算差分。对 aperture_size=1的情况, 使用 3×1 或 1×3 内核 (不进行高斯平滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3×3 Scharr 滤波器,可以给出比 3×3 Sobel 滤波更精确的结果。Scharr 滤波器系数是:

OpenCV函数Sobel算子详解

OpenCV函数Sobel算子详解

 

 

对 x-方向 以及转置矩阵对 y-方向。

函数 cvSobel 通过对图像用相应的内核进行卷积操作来计算图像差分:

OpenCV函数Sobel算子详解

OpenCV函数Sobel算子详解

 

由于Sobel 算子结合了 Gaussian 平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。通常情况,函数调用采用如下参数 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 来计算一阶 x- 或 y- 方向的图像差分。第一种情况对应:

OpenCV函数Sobel算子详解

OpenCV函数Sobel算子详解

第二种对应:

OpenCV函数Sobel算子详解

OpenCV函数Sobel算子详解

 

或者

OpenCV函数Sobel算子详解

OpenCV函数Sobel算子详解

 

核的选则依赖于图像原点的定义 (origin 来自 IplImage 结构的定义)。由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:即象素的深度)。为防止溢出,当输入图像是 8 位的,要求输出图像是 16 位的。当然可以用函数 cvConvertScale 或 cvConvertScaleAbs 转换为 8 位的。除了 8-比特 图像,函数也接受 32-位 浮点数图像。所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。

感觉很棒!可以赞赏支持我哟~

赞(1) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝