图像梯度_图像梯度计算 - CSDN
精华内容
参与话题
  • 图像梯度的基本原理

    万次阅读 多人点赞 2018-01-06 10:37:22
    前面我们提到,当用均值滤波器降低图像噪声的时候,会带来图像模糊的副作用。我们当然希望看到的是清晰图像。那么,清晰图像和模糊图像之间的差别在哪里呢?从逻辑上考虑,图像模糊是因为图像中物体的轮廓不明显,...

    前面我们提到,当用均值滤波器降低图像噪声的时候,会带来图像模糊的副作用。我们当然希望看到的是清晰图像。那么,清晰图像和模糊图像之间的差别在哪里呢?从逻辑上考虑,图像模糊是因为图像中物体的轮廓不明显,轮廓边缘灰度变化不强烈,层次感不强造成的,那么反过来考虑,轮廓边缘灰度变化明显些,层次感强些是不是图像就更清晰些呢。

    那么,这种灰度变化明显不明显怎样去定义呢。我们学过微积分,知道微分就是求函数的变化率,即导数(梯度),那么对于图像来说,可不可以用微分来表示图像灰度的变化率呢,当然是可以的,前面我们提到过,图像就是函数嘛。

    在微积分中,一维函数的一阶微分的基本定义是这样的:

    dfdx=limϵ0f(x+ϵ)f(x)ϵ

    而图像是一个二维函数f(x,y),其微分当然就是偏微分。因此有:

    f(x,y)x=limϵ0f(x+ϵ,y)f(x,y)ϵ

    f(x,y)y=limϵ0f(x,y+ϵ)f(x,y)ϵ

    因为图像是一个离散的二维函数,ϵ不能无限小,我们的图像是按照像素来离散的,最小的ϵ就是1像素。因此,上面的图像微分又变成了如下的形式(ϵ=1):

    f(x,y)x=f(x+1,y)f(x,y)=gx

    f(x,y)y=f(x,y+1)f(x,y)=gy

    这分别是图像在(x, y)点处x方向和y方向上的梯度,从上面的表达式可以看出来,图像的梯度相当于2个相邻像素之间的差值。

    那么,这个梯度(或者说灰度值的变化率)如何增强图像的清晰度呢?

    我们先考虑下x方向,选取某个像素,假设其像素值是100,沿x方向的相邻像素分别是90,90,90,则根据上面的计算其x方向梯度分别是10,0,0。这里只取变化率的绝对值,表明变化的大小即可。
    这里写图片描述

    我们看到,100和90之间亮度相差10,并不是很明显,与一大群90的连续灰度值在一起,轮廓必然是模糊的。我们注意到,如果相邻像素灰度值有变化,那么梯度就有值,如果相邻像素灰度值没有变化,那么梯度就为0。如果我们把梯度值与对应的像素相加,那么灰度值没有变化的,像素值不变,而有梯度值的,灰度值变大了。
    这里写图片描述

    我们看到,相加后的新图像,原图像像素点100与90亮度只相差10,现在是110与90,亮度相差20了,对比度显然增强了,尤其是图像中物体的轮廓和边缘,与背景大大加强了区别,这就是用梯度来增强图像的原理。

    上面只是说了x方向,y方向是一样的。那么能否将x方向和y方向的梯度结合起来呢?当然是可以的。x方向和y方向上的梯度可以用如下式子表示在一起:

    M(x,y)=(gx)2+(gy)2

    这里又是平方,又是开方的,计算量比较大,于是一般用绝对值来近似平方和平方根的操作,来降低计算量:

    M(x,y)=|gx|+|gy|

    我们来计算一下月球图像的x方向和y方向结合的梯度图像,以及最后的增强图像。(原图像来自冈萨雷斯的《数字图像处理》一书。)

    import cv2
    import numpy as np
    
    moon = cv2.imread("moon.tif", 0)
    row, column = moon.shape
    moon_f = np.copy(moon)
    moon_f = moon_f.astype("float")
    
    gradient = np.zeros((row, column))
    
    for x in range(row - 1):
        for y in range(column - 1):
            gx = abs(moon_f[x + 1, y] - moon_f[x, y])
            gy = abs(moon_f[x, y + 1] - moon_f[x, y])
            gradient[x, y] = gx + gy
    
    sharp = moon_f + gradient
    sharp = np.where(sharp < 0, 0, np.where(sharp > 255, 255, sharp))
    
    gradient = gradient.astype("uint8")
    sharp = sharp.astype("uint8")
    cv2.imshow("moon", moon)
    cv2.imshow("gradient", gradient)
    cv2.imshow("sharp", sharp)
    cv2.waitKey()

    这里写图片描述

    展开全文
  • 图像梯度(The Gradient of Image)

    千次阅读 2018-11-28 14:25:29
    学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系,又有什么不同,一直困扰着我。后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是...

                        图像的梯度(The Gradient of Image)

    一、学习心得: 


    学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系,又有什么不同,一直困扰着我。后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导数来求解。但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样,对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作,我们采用模板对原图像进行卷积运算,从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的,而是根据数学中求导理论推导出来的。下面就逐一分析各梯度算子的推导过程。 


    二、算子推导过程 


    1、知识引入: 
    在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有: 
    这里写图片描述

    在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有: 
    这里写图片描述

    2、梯度和Roberts算子: 
    对于图像来说,是一个二维的离散型数集,通过推广二维连续型求函数偏导的方法,来求得图像的偏导数,即在(x,y)处的最大变化率,也就是这里的梯度: 
    这里写图片描述 
    梯度是一个矢量,则(x,y)处的梯度表示为:这里写图片描述 
    其大小为:这里写图片描述 
    因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值: 
    这里写图片描述 
    方向与α(x,y)正交:这里写图片描述 
    其对应的模板为:这里写图片描述

    上面是图像的垂直和水平梯度,但我们有时候也需要对角线方向的梯度,定义如下: 
    这里写图片描述 
    对应模板为:这里写图片描述

         上述模板就是Roberts交叉梯度算子。
    
    • 1
    • 2

    2*2大小的模板在概念上很简单,但是他们对于用关于中心点对称的模板来计算边缘方向不是很有用,其最小模板大小为3*3。3*3模板考虑了中心点对段数据的性质,并携带有关于边缘方向的更多信息。

    3、Prewitt和Sobel算子: 
    在3*3模板中:这里写图片描述

    我如下定义水平、垂直和两对角线方向的梯度: 
    这里写图片描述 
    该定义下的算子称之为Prewitt算子: 
    这里写图片描述

    Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。 
    计算公式为:这里写图片描述 
    Sobel算子:这里写图片描述

    上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。

    4、Lapacian算子: 
    一阶导数:这里写图片描述

    二阶导数:这里写图片描述

    我们感兴趣的是关于点x的二阶导数,故将上式中的变量减1后,得到: 
    这里写图片描述

    在图像处理中通过拉普拉斯模板求二阶导数,其定义如下: 
    这里写图片描述 
    对应模板为: 
    这里写图片描述 
    模板中心位置的数字是-8而不是-4,是因为要使这些系数之和为0,当遇到恒定湖对区域时,模板响应应将0。

    在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时,那么该点就是被检测出来的孤立点,具体输出如下: 
    这里写图片描述

    索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。

     

    Sobel卷积因子为:

     

    该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

     

    具体计算如下:

    Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

          +(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

          +(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

    = [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

     

    Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

          +0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

          +(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

    = [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

     

    其中f(a,b), 表示图像(a,b)点的灰度值;

     

    图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

     

    通常,为了提高效率 使用不开平方的近似值:

     

    如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。

     

    然后可用以下公式计算梯度方向:

     

     

     

    Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。
      
     

     

    普利维特算子(Prewitt operate): 

    除sobel边缘检测外 还有Prewitt算子, 它的卷积因子如下:

     

    其他计算 和sobel差不多;

    Prewitt算子利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘。对噪声具有平滑作用,定位精度不够高。

     

    罗伯茨交叉边缘检测(Roberts Cross operator)

    卷积因子如下:

     

    灰度公式为:

     

    近似公式为:

     

    具体计算如下:

    G(x,y)=abs(f(x,y)-f(x+1,y+1))+abs(f(x,y+1)-f(x+1,y))

    灰度方向 计算公式为:

     

    Roberts算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感。

     

     

     

     

     

    【转载】:https://blog.csdn.net/liuxiangxxl/article/details/78226617?locationNum=4&fps=1

                      https://blog.csdn.net/image_seg/article/details/78790968

     

    展开全文
  • 图像梯度计算

    万次阅读 多人点赞 2018-09-16 11:34:58
    连续函数在某一点的导数可以由 得到,图像是离散函数,在某点的梯度可以用向前差商、向后差商或者中心差商获得。这里采用中心差商 可以获取图像某点的导数值。计算过程如下图所示 写成一维卷积的形式等于与如下...

    理论知识:

    连续函数在某一点的导数可以由 {f}'(x) = \lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h} 得到,图像是离散函数,在某点的梯度可以用向前差商、向后差商或者中心差商获得。这里采用中心差商 {f}'(x) ={\lim_{h\rightarrow 0}}\frac{f(x+h)-f(x-h)}{2h} 可以获取图像某点的导数值。计算过程如下图所示

    写成一维卷积的形式等于与如下这样一个滤波核作卷积,分母对结果无关紧要,全部舍弃。

    -1 0 1

     

     

    考虑上下两行同时中心一行赋予多一点的权值就可以得到Sobel 滤波核

    需要注意的是这样的核只是计算在x方向(也就是横向)图像像素值大小的变化率。图像是二维的所以还应考虑y方向,做法只需要将横向的Sobel核转置。

    总结一下如何计算图像梯度值的步骤:

    1、需要用到计算x、y方向导数值的两个滤波核

    2、分别与图像进行卷积

    3、把得到的值写在一起得到图像梯度向量

    梯度方向:

    梯度幅度:

     

    梯度计算对噪声很敏感

    假设有如下信号:

    信号有很多噪声,对其进行梯度幅度值计算会得到如下杂乱的值与我们期望的不一致:

    原因是导数滤波对噪声很敏感。

    解决方法是在计算图像梯度值时需要事先进行模糊操作。

    图像二阶导数与Laplacian滤波

    利用中心差商可以得到某点的一阶导数,同理可以得到二阶导数

    {f}''(x)={\lim_{h\rightarrow 0}}\frac{{f}'(x+h)-{f}'(x-h)}{2h}

    {f}'(x+h) = \lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h} ,\ {f}'(x-h) = \lim_{h\rightarrow 0}\frac{f(h)-{f}'(x-h)}{h}

    可得:

    {f}''(x)=\frac{f(x+h)-2f(x)+f(x-h)}{h^{2}}

    所以一维laplace filter为:

    1 -2 1

    用一维laplacian核进行卷积会得到什么样的结果?

    0交叉点对应这边缘。

    考虑y方向推广到2维得到2D Laplace filter:

     

    与Sobel滤波的不同点:

    Laplacian 零交叉点对应边缘

    Sobel 极值对应边缘

    一般来说零交叉点检测边缘会更精准一点

    展开全文
  • 图像梯度

    千次阅读 2018-08-22 14:19:49
    一、图像梯度的定义 图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:   这个矢量的幅度为   方向角为:   对于...

    一、图像梯度的定义

    图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:

     

    这个矢量的幅度为

     

    方向角为:

     

    对于数字图像而言,相当于对二维离散函数求梯度,如下:

     

    G(x,y) = dx(i,j) + dy(i,j);

    dx(i,j)  = I(i+1,j) - I(i,j);

    dy(i,j)  = I(i,j+1) - I(i,j);

    数字图像中,更多的使用差分来近似导数,最简单的梯度近似表达式如下:

    梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像(we can get the gradient image through computing the gradient of each pixel in the image)

    经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Robinson算子、Laplace算子等。

    二、图像一阶微分应用

    首先看一下数学中一维的微分公式Δf = f(x+1) – f(x), 对于一幅二维的数字图像f(x,y)而言,需要完

    成XY两个方向上的微分,所以有如下的公式:

    分别对X,Y两个方向上求出它们的偏微分,最终得到梯度Delta F.

    对于离散的图像来说,一阶微分的数学表达相当于两个相邻像素的差值,根据选择的梯度算

    子不同,效果可能有所不同,但是基本原理不会变化。最常见的算子为Roberts算子,其它

    常见还有Sobel,Prewitt等算子。以Roberts算子为例的X,Y的梯度计算演示如下图:

    图像微分(梯度计算)是图像边缘提取的重要的中间步骤,根据X,Y方向的梯度向量值,可以

    得到如下两个重要参数振幅magnitude, 角度theta,计算公式如下:

    Theta = tan-1(yGradient/xGradient)

    magnitude表示边缘强度信息

    theta预言边缘的方向走势。

    假如对一幅数字图像,求出magnitude之后与原来每个像素点对应值相加,则图像边缘将被

    大大加强,轮廓更加明显,是一个很典型的sharp filter的效果。

    转载自:https://blog.csdn.net/image_seg/article/details/78790968

    展开全文
  • 图像处理------图像梯度效果

    千次阅读 2015-07-24 10:17:17
    基本思想:利用X方向与Y方向分别实现一阶微分,求取振幅,实现图像梯度效果。使用的两种微分算子分别为Prewitt与Sobel,其中Soble在X, Y两个方向算子分别为:Prewitt在X, Y方向上梯度算子分别为:二:程序思路及实现...
  • 图像梯度(Image Gradient)

    千次阅读 2020-02-19 18:56:25
    文章目录图像梯度的定义(离散)图像梯度理解 图像梯度的定义(离散) 对于一个二元函数F(x,y)F(x,y)F(x,y)来说,其偏导数的定义为: δF(x,y)δx=lim⁡ϵ→0F(x+ϵ,y)−F(x,y)ϵ\frac {\delta F(x,y)}{\delta x}=\...
  • 图像梯度

    千次阅读 2018-11-14 16:04:00
    复习图像梯度,发现有很多需要进一步理解的内容,重新整理一篇 目录 方向导数和梯度 python实现 图像梯度的使用 方向导数和梯度 参考: 第七节 方向导数与梯度 偏导数 数字图像的梯度概念(the gradient of the ...
  • 梯度的概念  函数 z = f(x,y)在平面区域D内具有一阶连续...图像梯度的定义 图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为: 这个
  • Matlab中图像梯度的计算方式

    万次阅读 2016-03-02 15:15:03
    在matlab中可以使用gradient来计算一幅图像梯度,它的计算方式是这样的: 例子: A是这样一个3*3的矩阵: 7 5 3 1 2 3 8 5 3 ​那么使用gradient(A)后会得到两个值是个对dF/dx,横向的求偏导,...
  • z=randi(7,7) [ax,ay]=gradient(z)
  • 图像处理中的梯度

    万次阅读 2017-08-19 14:19:50
    由于图像在计算机中以数字图像的形式进行 存储, 即图像是离散的数字信号, 对数字图像梯度使用差分来代替连续信号中 的微分。 由于图像在计算机中以数字图像的形式进行 存储, 即图像是离散的数字信号, ...
  • 实验平均梯度图像的模糊程度(matlab 代码)

    千次阅读 热门讨论 2018-03-08 22:06:27
    平均梯度就是一幅图像梯度图上所有点的均值。它反映了图像中的微小细节反差和纹理变化特征,同时也能反映出图像的清晰度。一般来说平均梯度越大,图像层次也就越丰富,变化就越多,图像也就越清晰。所以我们可以把...
  • 图像梯度算法

    万次阅读 2015-03-17 15:25:18
    图像梯度,一般是指灰度图像或者彩色图像上的操作。数字图像就是离散的点值谱,也可以叫二维离散函数。图像梯度就是这个二维离散函数的求导。 导数(Derivative)是微积分中的重要基础概念。在百度百科里面是...
  • 图像边缘梯度的定义

    千次阅读 2017-05-25 13:57:18
    http://blog.csdn.net/u014020344/article/details/50196635
  • 灰度梯度共生矩阵纹理特征

    万次阅读 2016-11-02 17:10:28
    各像点的灰度是构成一副图像的基础,而梯度是构成图像边缘轮廓的要素,图像的主要信息是由图像的边缘轮廓提供的。    灰度梯度空间很清晰的描绘了图像内各像素点灰度与梯度的分辨规律,同时也给出了各像点与其领域...
  • 图像梯度域融合

    千次阅读 2015-11-10 17:44:48
    图像梯度域融合 图像梯度域重建 图像泊松编辑 混合梯度融合 彩色图像灰度化的问题 图像梯度域重建-原理 该问题中心思想是利用梯度实现灰度图像的重建。为后面的问题作铺垫。 该问题用到了梯度与最小二乘的思想。 ...
  • 梯度场重建图像

    千次阅读 2015-06-25 14:32:19
    很多图像处理的算法是在图像的梯度域完成的。比如图像增强、图像的融合、图像的边缘检测和分割等。在这些算法中或者一部分或者全部在...图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导:
  • 边缘检测的基本思想首先是(1)利用边缘增强算子,突出图像中的局部边缘,(2)然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。...
  • 图像处理中梯度详解 及gradient()函数

    千次阅读 2018-06-23 09:08:02
    1.图像梯度的定义图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:图像梯度:G(x,y)=dx i +dy j;dx(i,j)=Img(i+1,j)-I...
  • 计算图像直方图相似度,梯度梯度直方图相似度的matlab代码。
1 2 3 4 5 ... 20
收藏数 87,642
精华内容 35,056
关键字:

图像梯度