저작권으로 인해 MATLAB에서 라이센스를 취득해야하는 도구 상자의 코드를 게시 할 수 없습니다. 대신 내가 할 수있는 것은 동등한 작업을 수행하는 코드를 제공하는 것입니다. imgradient
은 단순히 에지 맵의 크기와 각도를 반환합니다. 당신이해야 할 일은 x
과 y
방향에 각각 cv2.Sobel
을 따로 적용한 다음 자신의 크기와 각도를 계산하는 것입니다. 당신은 표준 공식을 사용하여이 작업을 수행 할 수 있습니다
magnitude = sqrt(Gx.^2 + Gy.^2);
angle = atan2(Gy, Gx);
Gx
및 Gy
는 각각 x
및 y
방향으로 유도체, 또는 각 방향에 대해 cv2.Sobel
의 출력됩니다. atan2
은 각도를 라디안으로 표시합니다. MATLAB은 각도를도 단위로보고하므로 180/pi
을 추가로 곱해야합니다.
이미지가 img
에 저장된다고 가정합니다. 이 이미지에서 cv2.Sobel
을 두 번 실행하여 각 호출시 찾을 파생어의 방향을 지정할 수 있습니다. 그 후에는 크기와 각도를 직접 계산합니다. 그러므로 :
import cv2
import numpy as np
img = cv2.imread('....') # Read in the image
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0) # Find x and y gradients
sobely = cv2.Sobel(img,cv2.CV_64F,0,1)
# Find magnitude and angle
magnitude = np.sqrt(sobelx**2.0 + sobely**2.0)
angle = np.arctan2(sobely, sobelx) * (180/np.pi)
귀하의 게시물 내용에 도움이됩니다. 함수를 코드 구문으로 강조했습니다. 그것은 쉽게 읽을 수 있습니다. 또한'cv :: Scharr'는 C++ 정의의 일부이지만 파이썬을 사용하고 있습니다. 그래서 대신'cv2.Scharr()'으로 변환했습니다. 제 편집을 계속 고려하십시오. – rayryeng