zoukankan      html  css  js  c++  java
  • OpenCV——Sobel和拉普拉斯变换

    Sobel变换和拉普拉斯变换都是高通滤波器

    什么是高通滤波器呢?就是保留图像的高频分量(变化剧烈的部分),抑制图像的低频分量(变化缓慢的部分)。而图像变化剧烈的部分,往往反应的就是图像的边沿信息了。

    1. Sobel算子(主要用于边缘检测)

    //Sobel变化实例
    
    Mat sobelX;  
    Sobel(image,sobelX,CV_8U,1,0,3,0.4,128);  
    imshow("X方向Sobel结果",sobelX);  
      
    Mat sobelY;  
    Sobel(image,sobelY,CV_8U,0,1,3,0.4,128);  
    imshow("Y方向Sobel结果",sobelY);  
    //函数说明
    
    void Sobel(InputArray src, OutputArray dst, int ddepth, int xorder, int yorder, int ksize=3, double
    scale=1, double delta=0, int borderType=BORDER_DEFAULT )
    void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
    /*
    src
    输入图像.
    dst
    输出图像.
    xorder
    x 方向上的差分阶数
    yorder
    y 方向上的差分阶数
    aperture_size
    扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size 可分离内核将用来计算差分。对 aperture_size=1的情况,
    使用 3x1 或 1x3 内核 (不进行高斯平滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。
    对 x-方向 或矩阵转置后对 y-方向。
    */

    2.Laplacian变换

    Laplacian变换功能1用来检测物体的边缘信息

    具体说明:

    在图像平坦(灰度值无变换的区域),拉普拉斯滤波后的图像在该区域的强度值为0.在图像灰度值剧烈变换的区域(边缘),拉普拉斯滤波后的图像的强度值(绝对值)相对较大。 
    物体边缘一般在强度值的零交点(注意:并不是在强度值为0的点,而是在强度值从正变换到负,或从负变换到正的过程中,隐含存在的为0的亚像素级的点)。

    Laplacian变换功能2:可用于图像增强(原图像减去拉普拉斯变换的图像)

    原理大体为: 

    图像相对平坦的区域拉普拉斯变换后的值约等于0。像素(原)-0=像素(原),即该区域图像几乎没有变化。 
    在图像中强度值变换剧烈的地方,通常是物体的边缘处,拉普拉斯变换后的该区域的强度值(绝对值)较大。那么 像素(原)-像素(变换后),肯定会发生变化。例如:150(原)-50(变换后的 )=100,该点处的像素变黑。

    函数:

    void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );
    /*
    src    输入图像.
    dst    输出图像.
    aperture_size    核大小 (与 cvSobel 中定义一样)
    */

    函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:

    对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:

    类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。

  • 相关阅读:
    CentOS 6找不到partprobe命令的解决方法
    RTL源码归类与路径
    拓扑排序
    Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar 的区别
    Delphi Byte与数据类型之间的转换
    Delphi byte[]转换为int
    Delphi Byte数组与Int String之间的相互转换
    delphi TTcpClient TTcpServer分析
    Delph7中TcpClient和TcpServer用法分析
    动态数组的使用
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/6003939.html
Copyright © 2011-2022 走看看