图像梯度

图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大。一般情况下,图像梯度计算的是图像的边缘信息。严格来讲,图像梯度计算需要求导数,但图像梯度一般通过计算像素差值来得到梯度的近似值。

1.Sobel算子

Sobel算子是一种离散的微分算子,该算子结合了高斯平滑和微分求导运算。该算子利用局部差分寻找边缘,计算得到一个梯度的近似值。

滤波器通常是指有一幅图像根据像素点(x,y)邻近的区域计算得到另外一幅新图像的算法。滤波器规定了滤波时所采用的形状和该区域内像素值的组成规律。滤波器也被叫做“核”、“窗口”、“算子”、“掩模”、“模板”等。一般信号领域称之为滤波器,数学领域称为“核”。滤波的目标像素点的值等于原始像素值与其周围像素值的加权和,这个叫线性滤波器,基于这种线性核核滤波,就是我们熟悉的卷积。

1.1计算偏导数近似值

对于大小为3 X 3的Sobel算子,其水平方向上的偏导数Gx的计算方式:

Gx = \begin{bmatrix}
-1 & 0 & 1 \\
-2 & 0 & 2 \\
-1 & 0 & 1
\end{bmatrix} \cdot src

其垂直方向上的偏导数Gy的计算方式:

Gy = \begin{bmatrix}
-1 & -2 & -1 \\
0 & 0 & 0 \\
1 & 2 & 1
\end{bmatrix} \cdot src

注:由于十字路上的像素距离中间值最近,因此将差值权重设为2,其余差值权重设为1

1.2Sobel算子及函数使用

dst = cv2.Sobel(src,ddepth,dx, dy[,ksize[,scale[,delta[,borderType]]]])

dst:代表目标图像;

src:代表原始图像;

ddepth:代表输出图像的深度,具体对应关系如下表:

ddepth值

dx:代表x方向上的求导阶数;

dy:代表y方向上的求导阶数;

ksize: 代表Sobel核的大小。当为-1时,则会使用Scharr算子进行运算。取值为1,3,5,7,当不输入的时候,默认为3。特殊的,当kSize = 1的时候,采用的模板为1*3或者3*1 而非平时的那些格式;

scale: 代表计算导数值时所采用的缩放因子,默认是1,即没有缩放。

delta: 代表加在目标图像上的值,默认是0;

borderType:代表边界样式。

在函数cv2.Sobel()中规定,可以将ddepth设置为-1,让处理结果与原始图像保持一致。但如果直接将cv2.Sobel()内ddepth参数的值设为-1,得到的计算结果可能是错的。

    实际操作中计算梯度值可能会是负数,如果处理的图像是八位图类型,若设置的ddepth是-1,则所有计算结果中的负数会自动截断为0,发生信息丢失。为避免信息丢失,在计算时需要先使用更高的数据类型cv2.CV_64F,再通过绝对值将其映射为cv2.CV_8U.所以,通常将函数cv2.Sobel()内ddepth参数的值设为cv2.CV_64F。

在OpenCV中,使用cv2.convertScaleAbs(src[,alpha[,beta]]),来对参数取绝对值;

alpha:代表调节系数,该值是可选值,默认为1.

beta:代表调节亮度值,该值是可选值,默认为0.

该函数的作用是将原始图像转换为256色位图。可以表述为:

dst=saturate(src*alpha+beta)

saturate()表示计算结果的最大值是饱和值,例如当结果超过255时,就取255。

参数dx和参数dy,通常值是0或1,最大值是2。如果是0,表示在该方向上没有求道。dx和dy不能同时为0。

例如,计算一个图像水平方向上的边缘:

代码
运行结果

其他情况:

2.Scharr算子及函数使用

在离散空间上,有许多方法可以来计算近似导数,在使用3 X 3的Sobel算子时,可能近似结果并不太精准。Scharr算子有更高的精度,且运算速度并没有降低。其核通常为:

Gx = \begin{bmatrix}
-3 & 0 & 3 \\
-10 & 0 & 10 \\
-3 & 0 & 3
\end{bmatrix} \cdot src

Gy = \begin{bmatrix}
-3 & -10 & -3 \\
0 & 0 & 0 \\
3 & 10 & 3
\end{bmatrix} \cdot src

OpenCV提供函数来实现Scharr运算:

dst = cv2.Scharr(src, ddepth, dx, dy[,scale[,delta[,borderType]]])

各参数的意义和Sobel函数一致,Scharr仅作用于大小为3的内核。但需要注意的是:

1) ddepth 的值应该设为cv2.CV_64F,并对计算结果取绝对值,才能保证得到正确的结果;

2)参数dx和dy需要满足条件(否则会报错):dx >=0 && dy >=0 && dx+dy ==1

例如:


Scharr算子

运行结果;

可以看到更多的细节

3.Laplacian算子

Laplacian算子是一种二阶导数算子,其具有旋转不变性,可以满足不同方向上的图像边缘锐化(边缘检测)的要求。一般算子的系数之和是0,例如一个3 X 3的Laplacian算子:

\begin{bmatrix}
0 & 1 & 0 \\
1 & -4 & 1 \\
0& 1 & 0
\end{bmatrix}

Laplacian类似二阶Sobel导数,需要计算两个方向上的梯度值。对于计算过程中可能会出现负数的情况,通常通过对运算结果取绝对值来避免。

dst = cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])

ddepth: 代表图像的深度;

ksize: 代表用于二阶导数计算的核尺寸大小,该值必须是奇数,默认值是1。

scale: 代表计算导数值时所采用的缩放因子,默认是1,即没有缩放。

delta: 代表加在目标图像上的值,默认是0;

borderType:代表边界样式。

当ksize为1时,Laplacian计算时采用的3 X 3 的核如下:

\begin{bmatrix}
0 & 1 & 0 \\
1 & -4 & 1 \\
0& 1 & 0
\end{bmatrix}

通过从图像中减去它的Lapacian图像,可以增强图像的对比度,此时其算子(扩展算子)如下:

\begin{bmatrix}
0 & 1 & 0 \\
1 & -5 & 1 \\
0& 1 & 0
\end{bmatrix}

实例1:

比较不同的算子的差别

运行结果:

可以看出Laplacian的参数ksize默认值是1
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,151评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,465评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,429评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,147评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,149评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,614评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,965评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,950评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,486评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,524评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,640评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,228评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,976评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,407评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,552评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,215评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,714评论 2 366