Plantilla de núcleo sobel del código fuente de opencv

El método pad del operador de filtro opencv

Operador de filtro Opencv, si ksize!=1, si no se agrega ningún relleno alrededor de la imagen, el tamaño de la imagen filtrada será más pequeño.Para mantener el tamaño de la imagen filtrada sin cambios, la función opencv agregará rellenos alrededor de la imagen , como sigue el método de relleno, el método predeterminado es BORDER_REFLECT_101.

enum BorderTypes {
    BORDER_CONSTANT    = 0, //!< `iiiiii|abcdefgh|iiiiiii`  with some specified `i`
    BORDER_REPLICATE   = 1, //!< `aaaaaa|abcdefgh|hhhhhhh`
    BORDER_REFLECT     = 2, //!< `fedcba|abcdefgh|hgfedcb`
    BORDER_WRAP        = 3, //!< `cdefgh|abcdefgh|abcdefg`
    BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba`
    BORDER_TRANSPARENT = 5, //!< `uvwxyz|abcdefgh|ijklmno`

    BORDER_REFLECT101  = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
    BORDER_DEFAULT     = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
    BORDER_ISOLATED    = 16 //!< do not look outside of ROI
};

Función de generación de plantillas de Sobel

La generación de la plantilla del kernel de Sobel implementada por opencv es una función separada, y se puede observar cuál es la función específica del kernel cuando se usan diferentes k_sizes.

void test_getSobelKernel()
{
    Mat kx,ky;
    int dx=1;
    int dy=0;
    int ksize=5;
    getDerivKernels(kx,ky,dx,dy,ksize,false, CV_32F);
    cout<<kx<<endl;
    cout<<ky<<endl;

}

当ksize=3,(dx,dy)=(1,0)

kx=[-1; 0; 1]

ky=[1; 2; 1]

当ksize=3,(dx,dy)=(0,1)

kx=[1; 2; 1]

ky=[-1; 0; 1]

当ksize=3,(dx,dy)=(1,1)

kx=[-1; 0; 1]

ky=[-1; 0; 1]

El proceso de cálculo de la función de Sobel:
1. Calcular el valor de la plantilla de kerel.

2. Llame a la función sepFilter2D para acelerar el cálculo.

 

Supongo que te gusta

Origin blog.csdn.net/u010420283/article/details/128461409
Recomendado
Clasificación