2017-12-15 9 views
2

파이썬에서 imgradient MATLAB에 해당하는 항목을 검색하고 있습니다. cv2.Sobel()cv2.Laplacian()을 알고 있지만 imgradient이 MATLAB에서 작동하므로 작동하지 않습니다. 만약 내가 큰 도움이 될 imgradient.m 기능의 소스 코드를 얻을 수 있다면.imgradient matlab equivalent in Python

또한 cv2.Scharr()도 사용할 수 있습니다. 그러나 MATLAB에서 imgradient과 동일한 결과를 얻기 위해 어떤 값을 매개 변수에 넣어야하는지 확실하지 않습니다.

+0

귀하의 게시물 내용에 도움이됩니다. 함수를 코드 구문으로 강조했습니다. 그것은 쉽게 읽을 수 있습니다. 또한'cv :: Scharr'는 C++ 정의의 일부이지만 파이썬을 사용하고 있습니다. 그래서 대신'cv2.Scharr()'으로 변환했습니다. 제 편집을 계속 고려하십시오. – rayryeng

답변

3

저작권으로 인해 MATLAB에서 라이센스를 취득해야하는 도구 상자의 코드를 게시 할 수 없습니다. 대신 내가 할 수있는 것은 동등한 작업을 수행하는 코드를 제공하는 것입니다. imgradient은 단순히 에지 맵의 크기와 각도를 반환합니다. 당신이해야 할 일은 xy 방향에 각각 cv2.Sobel을 따로 적용한 다음 자신의 크기와 각도를 계산하는 것입니다. 당신은 표준 공식을 사용하여이 작업을 수행 할 수 있습니다

magnitude = sqrt(Gx.^2 + Gy.^2); 
angle = atan2(Gy, Gx); 

GxGy는 각각 xy 방향으로 유도체, 또는 각 방향에 대해 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) 
+0

고마워요 :) – Laveena

+0

@Laveena 대단히 환영합니다! – rayryeng