Sobel算子的特性
卷积应用-图像边缘提取
●边缘是什么- 是像素值发生跃迁的地方,是图像的显著特
征之一,在图像特征提取、对象检测、模式识别等方面都
有重要的作用。
●如何捕捉/提取边缘 -对图像求它的 一阶导数
delta= f(x)-f(x-1), delta越大,说明像素在x方向变化越大,
边缘信号越强,
●忘记了,不要担心,用Sobel算子就好! 卷积操作 !
什么是 Sobel算子
●是离散微分算子 ( discrete differentiation operator),
用来计算图像灰度的近似梯度
●Soble算子功能集合高斯平滑和微分求导
●又被称为一阶微分算子, 求导算子,在水平和垂直两
个方向上求导,得到图像x方法与y方向梯度图像
最终梯度 G=水平梯度|Gx|+垂直梯度|Gy|
Sobel算子
●求取导数的近似值 , kernel=3时不是很准确(跨度太小易 受到干扰),OpenCV
使用改进版本Scharr函数,算子如下 :
-3 0 +3
Gx= -10 0 +10
-3 0 +3
-3 -10 -3
Gy= 0 0 0
+3 +10 +3
API说明c::Sobel
cv::Sobel(
InputArray Src //输入图像
OutputArray dst//输出图像,大小与输入图像-致
int depth //输出图像深度(一定要大于或等于输入深度)
int dx, //x方向,几阶导数
int dy //dy方向,几阶导数.
int ksize SOBEL算子kernel大小,必须是1、3、 5、7 等奇数
double scale =1
double delta=0
int borderType = BORDER _DEFAULT
)
API-Sobel的改进版本-Scharr(除了名字不一样 别的都一样)
API说明c::Scharr
cv::Sobel(
InputArray Src //输入图像
OutputArray dst//输出图像,大小与输入图像-致
int depth //输出图像深度(一定要大于或等于输入深度)
int dx, //x方向,几阶导数
int dy //y方向,几阶导数.
int ksize SOBEL算子kernel大小,必须是1、3、 5、7 等奇数
double scale =1
double delta=0
int borderType = BORDER _DEFAULT
)
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
Mat src, dst,mix;
int xxa = 1; //导数方向为1 0 时梯度为X方向
int yya = 0;