Аппроксимация истинной величины градиента карты высот с помощью фильтра Собеля opencv - PullRequest
0 голосов
/ 25 января 2019

У меня есть изображение (cv::Mat, тип CV_32F), представляющее функцию высоты выборки по сетке. Сетка имеет постоянный растр (dx,dy) на пиксель.

Я бы хотел оценить величину градиента. Используя фильтр Собеля OpenCV, я аппроксимирую производные следующим образом:

dfdx=zz.Sobel(zz,cv2.CV_32F,1,0,ksize=3,scale=?)
dfdy=zz.Sobel(zz,cv2.CV_32F,0,1,ksize=3,scale=?)
gradMag=np.sqrt(dfdx**2+dfdy**2)

Параметр scale едва документирован, но, глядя на источник, он используется для умножения производных ядер, то есть (-1,0,1) для конечных разностей. Используя ядро ​​3x3 Собеля, я предположил, что масштаб должен быть 1/2 * dx или 1/2 * dy (схема конечных разностей), чтобы получить производные в истинном масштабе, но, похоже, это не так: я проверял это на синтетическом изображении полушария с другим растром, но не получая согласованных результатов.

Как масштаб должен использоваться для включения измерений растра, таким образом получая реальные производные оценки?

1 Ответ

0 голосов
/ 25 января 2019

Масштаб должен быть равен 0,25, отсюда: Фильтр Собеля OpenCV - почему он выглядит так плохо, особенно по сравнению с Gimp?

Делитель нормализации для ядер может бытьрассчитывается по следующей формуле:

enter code here f = max (abs (sumNegative), abs (sumPositive))

, где sumNegative - это сумма отрицательных значений вядро и сумма положительных сумм положительных значений в ядре.

...