2016-08-07 5 views
0

最近numpy.gradient関数をテストしようとしています。しかし、それは私の行動は少し奇妙です。私はランダム変数を持つ配列を作成し、その上にnumpy.gradientを適用しましたが、値はクレイジーで無関係です。しかし、numpy.diffを使用する場合、値は正しいです。画像にnumpy勾配関数を使用することはできますか?

したがって、numpy.gradientのドキュメントを参照した後、目的のディメンションに対して距離= 1が使用されていることがわかります。

これは私が何を意味するかです:

import numpy as np; 

a= np.array([10, 15, 13, 24, 15, 36, 17, 28, 39]); 
np.gradient(a) 
""" 
Got this: array([ 5. , 1.5, 4.5, 1. , 6. , 1. , -4. , 11. , 11. ]) 
""" 
np.diff(a) 
""" 
Got this: array([ 5, -2, 11, -9, 21, -19, 11, 11]) 
""" 

私は最初の結果の値が来たか理解していません。デフォルト距離を1とすると、numpy.diffと同じ結果が得られるはずです。

ここでどのような距離が意味するのか説明できますか。それは配列インデックスまたは配列の値に相対的ですか?値に依存する場合、隣接ピクセルの値には固定値の差がないため、numpy.gradientを画像に使用できないことを意味しますか?

+2

次の例のhttp://stackoverflow.com/questions/24633618/what-does-numpy-gradient-doのために...スタックに取り組んだ例を見つけることができ、これは「doesnの場合は他の人がありますあなたのために働く –

+0

もう一度docstring(http://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html)を見てください。 'gradient'が何を計算するかを説明します。たとえば、wikipedia(「https://en.wikipedia.org/wiki/Finite_difference」、特にhttps://en.wikipedia.org/wiki/Finite_difference#Forward.2C_backward)の「中心的な違い」について読むことができます。 2C_and_central_differences)。 –

答えて

0

境界の内部と第一の違いの中心的な違い。

15 - 10 
13 - 10/2 
24 - 15/2 
... 
39 - 28 
+0

内部に[-1 0 1]のカーネルを、エッジに[-1 1]のカーネルを適用します。説明をありがとう –

0
# load image 
img = np.array([[21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 99.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0], 
       [21.0, 20.0, 22.0, 24.0, 18.0, 11.0, 23.0]]) 
print "image =", img 

# compute gradient of image 
gx, gy = np.gradient(img) 
print "gx =", gx 
print "gy =", gy 

# plotting 
plt.close("all") 
plt.figure() 
plt.suptitle("Image, and it gradient along each axis") 
ax = plt.subplot("131") 
ax.axis("off") 
ax.imshow(img) 
ax.set_title("image") 

ax = plt.subplot("132") 
ax.axis("off") 
ax.imshow(gx) 
ax.set_title("gx") 

ax = plt.subplot("133") 
ax.axis("off") 
ax.imshow(gy) 
ax.set_title("gy") 
plt.show() 
関連する問題