2017-12-15 9 views
2

私はPythonでimgradient相当のMATLABを探しています。私はcv2.Sobel()cv2.Laplacian()を認識していますが、imgradientがMATLABで動作するため動作しません。私はimgradient.mのソースコードを得ることができれば、それはまた大きな助けになるでしょう。imgradient matlab相当のPython

また、cv2.Scharr()も使用できますが、MATLABのimgradientと同等の結果を得るためには、どの値をパラメータに入れてください。

+0

私の編集はあなたの投稿の内容に役立つと思います。私は関数がコード構文であることを強調しました。それは読みやすくします。また 'cv :: Scharr'はC++定義の一部ですが、あなたはPythonを使用しています。それで、私は代わりに '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です。

画像がに格納されているとします。次に、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) 
+0

ありがとうございました:) – Laveena

+0

@Laveena大歓迎です! – rayryeng