Преобразовать отрицательные значения градиента Собеля в 0 до 6,28 диапазонов - PullRequest
0 голосов
/ 18 июня 2019

Я пытался создать программу обработки изображений с извлечением двенадцати направленных объектов (из этого источника URL https://www.ijcaonline.org/journal/number3/pxc387173.pdf)

Я использовал этот код для получения результата градиента

def sobel(citra_thresh):
h, w = citra_thresh.shape
# define filters
horizontal = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) 
vertical = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) 
newhorizontalImage = np.zeros((h, w))
newverticalImage = np.zeros((h, w))
newgradientImage = np.zeros((h, w))
newdirectionImage = np.zeros((h,w))

for i in range(1, h - 1):
    for j in range(1, w - 1):
        horizontalGrad = (horizontal[0, 0] * citra_thresh[i - 1, j - 1]) + \
                         (horizontal[0, 1] * citra_thresh[i - 1, j]) + \
                         (horizontal[0, 2] * citra_thresh[i - 1, j + 1]) + \
                         (horizontal[1, 0] * citra_thresh[i, j - 1]) + \
                         (horizontal[1, 1] * citra_thresh[i, j]) + \
                         (horizontal[1, 2] * citra_thresh[i, j + 1]) + \
                         (horizontal[2, 0] * citra_thresh[i + 1, j - 1]) + \
                         (horizontal[2, 1] * citra_thresh[i + 1, j]) + \
                         (horizontal[2, 2] * citra_thresh[i + 1, j + 1])

        #if (horizontalGrad == 0):
         #   horizontalGrad = 0.0001
        newhorizontalImage[i - 1, j - 1] = abs(horizontalGrad)
        verticalGrad = (vertical[0, 0] * citra_thresh[i - 1, j - 1]) + \
                       (vertical[0, 1] * citra_thresh[i - 1, j]) + \
                       (vertical[0, 2] * citra_thresh[i - 1, j + 1]) + \
                       (vertical[1, 0] * citra_thresh[i, j - 1]) + \
                       (vertical[1, 1] * citra_thresh[i, j]) + \
                       (vertical[1, 2] * citra_thresh[i, j + 1]) + \
                       (vertical[2, 0] * citra_thresh[i + 1, j - 1]) + \
                       (vertical[2, 1] * citra_thresh[i + 1, j]) + \
                       (vertical[2, 2] * citra_thresh[i + 1, j + 1])
        newverticalImage[i - 1, j - 1] = abs(verticalGrad)
        mag = np.sqrt(pow(horizontalGrad, 2.0) + pow(verticalGrad, 2.0))
        newgradientImage[i - 1, j - 1] = mag
        newgradientImage = newgradientImage.astype(np.int)

        direct = np.arctan2((verticalGrad),(horizontalGrad))
        #tes=(horizontalGrad/verticalGrad)
        #direct = (np.arctan(tes))
        newdirectionImage[i - 1, j - 1] = direct
        #newdirectionImage = newdirectionImage.astype(np.float)
        newdirectionImage = np.around(newdirectionImage,decimals=2)
return newdirectionImage

Я попытался получить градиент для этого изображения

C

И я получил этот результат

result

Журнал ожидал, что значения градиента должны быть в диапазоне от 0 до 6,28.

Но я получил градиент отрицательных значений. Как мне конвертировать их в диапазон от 0 до 6,28?

...