Что означает шкала в cv2.Sobel? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь понять аргумент scale в cv2.Sobel scale, установленным на 1/8, я получаю вывод по оси x следующим образом:

enter image description here

Но с масштабом = 10 или масштабом =100, результат очень похож.

enter image description here

Оба приведенных изображения представляют собой градиенты первого порядка вдоль оси x со шкалой 1/8и 100 соответственно.

import cv2

filename = "./images/cube.jpg"

img = cv2.imread(filename,0)

sx = cv2.Sobel(img, cv2.CV_64F, 1,0, ksize=3, scale= 1/8)


cv2.imshow("sx", sx)

if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

Что делает аргумент scale?Чем это полезно?

1 Ответ

0 голосов
/ 24 февраля 2019

До встречи на C ++ из cv :: Sobel в OpenCV:

Mat kx, ky;
getDerivKernels( kx, ky, dx, dy, ksize, false, ktype );
if( scale != 1 )
{
    // usually the smoothing part is the slowest to compute,
    // so try to scale it instead of the faster differentiating part
    if( dx == 0 )
        kx *= scale;
    else
        ky *= scale;
}

Таким образом, масштаб является фактором для ядра Собел.Если масштаб! = 1, то Kernell не будет ((-1 0 +1) (-2 0 +2) (-1 0 +1)).Это будет ((шкала 0 + шкала) (шкала -2 * шкала 0 + 2 *) (шкала 0 + шкала)).

...