2016-04-15 2 views
0

Как вызвать функцию OpenCV Sobel для вычисления фактической производной изображения при заданном размере ядра? То есть учитывая, что изображение является функцией от f(x, y) и x, y охватывает от [0, 0] до [width, height] в пикселях?Как нормализовать размер ядра OpenCV Sobel для данного ядра

dimg_x = cv2.Sobel(img, ddepth=-1, dx=1, dy=0, ksize=ksize) 

Возможно некоторое масштабирование должно быть применен к градиентному изображению, но я не могу понять, как вычислить его с учетом размера ядра.

+0

градиента Собел является приближением градиента. Итак, это зависит от того, что вы называете «фактической» производной. Все численные методы являются приближениями. В какой-то момент вы могли бы просто принять разницу в горизонтальном или вертикальном направлении строк и столбцов соответственно. – Cyb3rFly3r

+0

@ Cyb3rFly3r "actual" Я имею в виду под определением. Я в порядке, это приближение, но для некоторых приложений неприемлемо, что он масштабируется как 100 раз. – DikobrAz

+0

Определение производной требует непрерывной функции, которой у вас нет в цифровом изображении, которое является дискретным представлением некоторой непознаваемой функции. Существует много способов приблизиться к градиенту, вероятно, Sobel - это не то, что вы ищете. В простейших подходах было бы использовать numpy.diff вдоль столбцов и строк. – Cyb3rFly3r

ответ

0

Я думаю, что этот фрагмент будет делать трюк:

def gradient(img, dx, dy, ksize): 
    deriv_filter = cv2.getDerivKernels(dx=dx, dy=dy, ksize=ksize, normalize=True) 
    return cv2.sepFilter2D(img, -1, deriv_filter[0], deriv_filter[1])