图像梯度

作者: 陨星落云 | 来源:发表于2019-08-01 09:20 被阅读14次

图像梯度

梯度简单来说就是求导。
OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian。Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。
Sobel 算子是一个主要用作边缘检测的离散微分算子 (discrete differentiation operator)。 Sobel算子结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。

cv2.Sobel(src,cv2.ddepth,dx,dy,Ksize)

参数意义如下:

  • src:输入图像
  • ddepth:输出图像的深度,支持如下src.depth()和ddepth的组合:
    • 若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
    • 若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
    • 若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
    • 若src.depth() = CV_64F, 取ddepth = -1/CV_64F
  • dx:x 方向上的差分阶数
  • dy:yx方向上的差分阶数
  • ksize:核大小,默认值3,表示Sobel核的大小; 必须取1,3,5或7;

例子:sobel

def img_show(name,image):
    """matplotlib图像显示函数
    name:字符串,图像标题
    img:numpy.ndarray,图像
    """
    if len(image.shape) == 3:
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.imshow(image,'gray')
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(name,fontproperties='FangSong',fontsize=12)
 
if __name__=="__main__":
    img = cv2.imread('data/building.jpg',0)
    laplacian = cv2.Laplacian(img,cv2.CV_64F)
    #cv2.CV_64F输出图像的深度(数据类型),可以使用-1,与原图像保持一致np.uint8
    #参数1,0为只在x方向求一阶导数
    sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    #参数0,1为只在y方向求一阶导数
    sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
    
    #sobel =cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3) # 效果不好
    sobel = cv2.add(sobelx,sobely)
    
    plt.figure(figsize=(10,8),dpi=80)
    plt.subplot(221)
    img_show('原图',img)
    plt.subplot(222)
    img_show('sobelx',sobelx)
    plt.subplot(223)
    img_show('sobely',sobely)
    plt.subplot(224)
    img_show('sobel',sobel)
sobel.png sobel2.png

例子:scharr

def img_show(name,image):
    """matplotlib图像显示函数
    name:字符串,图像标题
    img:numpy.ndarray,图像
    """
    if len(image.shape) == 3:
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.imshow(image,'gray')
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(name,fontproperties='FangSong',fontsize=12)
 
if __name__=="__main__":
    img = cv2.imread('data/building.jpg',0)
    scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
    scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
    
    scharr = cv2.add(scharrx,scharry)
    
    plt.figure(figsize=(10,8),dpi=80)
    plt.subplot(221)
    img_show('原图',img)
    plt.subplot(222)
    img_show('scharrx',scharrx)
    plt.subplot(223)
    img_show('scharry',scharry)
    plt.subplot(224)
    img_show('scharr',scharr)
scharr.png

例子:laplacian

def img_show(name,image):
    """matplotlib图像显示函数
    name:字符串,图像标题
    img:numpy.ndarray,图像
    """
    if len(image.shape) == 3:
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.imshow(image,'gray')
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(name,fontproperties='FangSong',fontsize=12)
 
if __name__=="__main__":
    img = cv2.imread('data/building.jpg',0)
    laplacian = cv2.Laplacian(img,cv2.CV_64F,ksize=5)
    
    plt.figure(figsize=(10,8),dpi=80)
    plt.subplot(121)
    img_show('原图',img) 
    
    plt.subplot(122)
    img_show('laplacian',laplacian)
laplacian.png

参考资料
《数字图像处理》《OpenCV-Python-Toturial-中文版》

相关文章

  • 图像梯度与Sobel滤波器---OpenCV-Python开发指

    图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较...

  • 图像梯度

    图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大。一般情况下,图像梯度计算的是图...

  • Opencv-Python学习笔记十——图像梯度、边缘检测 Gr

    图像梯度 边缘检测 图像梯度,图像边界使用到的函数有: cv2.Sobel(), cv2.Schar(), cv2...

  • opencv入门12:梯度和边缘检测-GRADIENTS AND

    一、图像梯度: 图像梯度,图像边界等 使用到的函数有:cv2.Sobel(),cv2.Schar(),cv2.La...

  • 图像梯度

    图像梯度计算的是图像变化的速度,对于图像的边缘部分,其灰度值变化较大,梯度值也较大;对于图像中比较平滑的部分,其灰...

  • 图像梯度

    图像梯度 梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Schar...

  • 图像梯度

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第9...

  • HOG特征

    图像处理之特征提取:HOG特征简单梳理 HOG 方向梯度直方图,这里分解为方向梯度与直方图。 一、方向梯度 梯度:...

  • 1.12 openCV-python 图像梯度

    图像梯度 梯度简单来说就是求导,openCV提供了三种不同的梯度滤波器;Sobel/Scharr/Laplacian

  • opencv+python -- 图像梯度

    图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。 Sobel算子是普通一阶差分,是基于...

网友评论

    本文标题:图像梯度

    本文链接:https://www.haomeiwen.com/subject/pmbfdctx.html