У меня есть изображение (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 (схема конечных разностей), чтобы получить производные в истинном масштабе, но, похоже, это не так: я проверял это на синтетическом изображении полушария с другим растром, но не получая согласованных результатов.
Как масштаб должен использоваться для включения измерений растра, таким образом получая реальные производные оценки?