Реализация фильтра Собеля - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь реализовать фильтр Собеля, используя следующий код:

def Calculating_gradients(img):

    Sobel_mag=[]
    Sobel_theta=[]
    for i in img:
        dx = ndimage.sobel(i, 0)  # horizontal derivative
        dy = ndimage.sobel(i, 1)  # vertical derivative
        mag = math.sqrt(dx**2+dy**2)  # magnitude    
        mag *= 255.0 / np.max(mag)
        theta=math.atan(dy/dx)   #slope
        Sobel_mag.append(mag)
        Sobel_theta.append(theta)

    return Sobel_mag, Sobel_theta

mag,theta=Calculating_gradients(denoised_img)

Я столкнулся с этой ошибкой:

TypeError                                 Traceback (most recent call last)
<ipython-input-23-f9db160f1948> in <module>
     31     return Sobel_mag, Sobel_theta
     32 
---> 33 mag,theta=Calculating_gradients(denoised_img)
     34 
     35 #def Canny_detection_algorithm(plates):

<ipython-input-23-f9db160f1948> in Calculating_gradients(img)
     23         dx = ndimage.sobel(i, 0)  # horizontal derivative
     24         dy = ndimage.sobel(i, 1)  # vertical derivative
---> 25         mag = math.sqrt(dx**2+dy**2)  # magnitude
     26         mag *= 255.0 / np.max(mag)
     27         theta=math.atan(dy/dx)   #slope

TypeError: only size-1 arrays can be converted to Python scalars

Эта ошибка, скорее всего, потому что я sqrt принимает отдельные значения, но я использовал два массива ... Я попытался исправить это, векторизовав оба dx и dy, а затем использовать sqrt, но это тоже не сработало ...

...