图像处理算法 | 图像求导

写这篇文章的目的是解释清楚图像求导和一阶二阶算子之间的关系,以及那些花样百出的边缘检测算子是怎么来的,为什么是那个样子,有什么样的检测效果,优点和缺点是什么,该如何使用,不喜欢看推导和原理的同学可以直接跳到下一篇《边缘检测算子与及效果对比》直接看结果。

一、图像求导原理

要理解图像的边缘,要先从图像的导数开始,我们知道连续函数f(x,y)的偏导数定义为:

                                 f_{x} (x_{0} ,y_{0} )=lim_{\bigtriangleup x\to 0} \frac{f(x_{0}+\bigtriangleup x,y_{0})-f(x_{0} ,y_{0})}{\bigtriangleup x} \\f_{y} (x_{0} ,y_{0} )=lim_{\bigtriangleup y\to 0} \frac{f(x_{0},y_{0}+\bigtriangleup y)-f(x_{0} ,y_{0})}{\bigtriangleup y}                                     (1)

以求x的偏导为例,这个公式有三层含义:

1. 首先要有一个方向,x或y方向

2. 其次要在一个足够小的范围内,这个范围小到∆x要接近于0,这是连续函数能定义出的最小范围,一个接近于0的范围

3. 分子是对两个函数值做减法,分母是这个足够小的距离,除一下计算的是一个变化率

合起来就是,在一个指定的方向上,取一个足够小的范围,计算这个范围内的函数值变化了多少。

公式(1)只给出了x和y两个方向,但是我们知道,真实的世界中不可能只有两个方向,所以有了梯度的概念,梯度指的是函数沿任一指定方向的变化率,为了表达“沿任一指定方向”这个概念,梯度中定义了两个余弦来描述它,余弦不是重点,方向才是重点,直接把连续函数求导的定义推导到离散函数上。

    对于一个图像来说,描述一个图像就是按照x和y进行的,所以图像求导的方向是现成的,图像的最小距离单位就是1,相当于∆x和∆y都是1,极限可以扔了,图像的函数值就是亮度值,公式(1)就变成了分别沿x方向和y方向对相邻像素做减法,其公式如(2)所示:

                                                    \frac{\partial f}{\partial x} =f(x+1,y)-f(x,y)\\ \frac{\partial f}{\partial y} =f(x,y+1)-f(x,y)                                             (2)

图像还有两个对角线方向,所以常用的图像求导方向有4个,水平、垂直和两个对角线。在图像中,梯度的“沿任一指定方向”已经包含在算子里面了,减法的那个方向就是梯度方向。

    图像领域通常使用的是梯度的幅值,这就要把多个方向的梯度融合起来,计算梯度幅值的方法一般是计算欧式距离,如公式(3)所示,可以理解为两个方向梯度的混合代表最终的梯度幅值,但是为了降低计算复杂度,很多时候是用绝对值相加的方法,如公式(4)所示:

                                                  A(i,j)=\sqrt{(\frac{\partial f}{\partial x} )^{2} +(\frac{\partial f}{\partial y} )^{2}}                                               (3)

                                                  A(i,j)=\left | \frac{\partial f}{\partial x}\right | +\left | \frac{\partial f}{\partial y} \right |                                                        (4)

还有一种采用无穷范数衡量梯度幅值的方法,可以理解为哪个方向的梯度值大,就采用哪个方向的,如公式(5)所示:

                                             \left | G(x,y) \right | =max(\left | G_{x} \right |,\left | G_{y} \right | )                                                (5)

实际使用的时候看需求,一般是在(4)和(5)之间做选择,接下来是二阶导。

二阶导可以理解为对一阶导再求一次导数,以x方向为例(y方向同理)即:

                               \frac{\partial^2 f(x,y)}{\partial x^2}=f_{x}^{'}(x+1,y)+f_{x}^{'}(x,y)\\ =f(x+1,y)-f(x,y)-(f(x,y)-f(x-1,y))\\ =f(x+1,y)-2f(x,y)+f(x-1,y)                       (6)

以x轴方向的求导为例,一阶导定义了一个[1,-1]的算子,二阶导定义了一个[1,-2,1]的算子,用这两个算子对图像做卷积,就可以获得图像求导的结果。

二、图像求导效果测试

用一个简单的黑白图像来做个测试,看一下在图像边缘发生了什么。图1中的(a)是输入的测试图像,宽度300,高度512,(b)中红色标记出了要观察数据位置。

图1 输入图像及取样位置

对(b)中的红色位置分别用水平方向一阶导[1,-1]和二阶导[1,-2,1]做卷积,得到的效果如图2所示:

图2 求导示意图

图2 中(a)的横坐标轴显示了取样位置的坐标,纵轴是取样的亮度值,输入图白色的部分亮度接近于1,黑色的部分亮度接近于0,白变黑或黑变白的时候是有一个过渡的,就是(a)中下降和上升部分,此外输入图中还有一点点噪声。从(b)图可以看出,一阶导显示的是亮度变化的速度,无论亮度是增加还是减少,其增减的速度都有一个峰值,速度达到峰值后逐渐减小,亮度不变区域的一阶导接近于0。(c)图是二阶导,二阶导是一阶导的导数,它描述的是亮度变化速度的快慢,也就是亮度变化的加速度,图像的亮度不可能一直沿某个方向增加或者是减少,速度达到最大后必定要转向,二阶导描述的就是这种转向的变化,在速度转向的时候,加速度过零点给速度另一个方向的增量,所以二阶导会产生双边缘效应,它描述了进入边缘和离开边缘的过程。此外(b)和(c)里面还有一些小波动,这是噪声带来的影响。

图3给出了完整的一阶导和二阶导的浮雕效果,就是对卷积结果加了0.5,把负数部分也一起显示在了图像上,偏白的边缘是正数部分,偏黑的边缘是负数部分。

图3 求导浮雕图

从浮雕图也能看出一阶导和二阶导的区别,一阶导是描述梯度上升还是下降的过程,二阶导是描述亮度转向的位置。所以目前应用基本上是一阶导做边缘检测,二阶导做锐化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大凝的IC进阶之路

一起学习一起进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值