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
です。
画像がに格納されているとします。次に、cv2.Sobel
をこのイメージに2回実行して、呼び出しごとに見つけたいデリバティブの方向を指定します。その後、自分で角度と角度を計算します。したがって、
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++定義の一部ですが、あなたはPythonを使用しています。それで、私は代わりに 'cv2.Scharr()'に変換しました。編集を続けてください。 – rayryeng