2016-08-07 12 views
0

Ich habe versucht, die Funktion numpy.gradient vor kurzem zu testen. Allerdings ist das Verhalten für mich etwas seltsam. Ich habe ein Array mit zufälligen Variablen erstellt und dann den numpy.gradient darüber angewendet, aber die Werte scheinen verrückt und irrelevant. Wenn Sie jedoch numpy.diff verwenden, sind die Werte korrekt.Kann ich numpy Gradientenfunktion mit Bildern verwenden

Also, nach dem Betrachten der Dokumentation von numpy.gradient, sehe ich, dass es distance = 1 über die gewünschte Dimension verwendet. Diese

ist, was ich meine:

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]) 
""" 

Ich verstehe nicht, wie sich die Werte in der ersten Folge kam. Wenn der Standardabstand 1 sein soll, dann hätte ich die gleichen Ergebnisse wie numpy.diff.

Könnte jemand erklären, welche Entfernung hier bedeutet. Ist es relativ zum Array-Index oder zum Wert im Array? Wenn das vom Wert abhängt, bedeutet das, dass numpy.gradient nicht mit Bildern verwendet werden kann, da die Werte der benachbarten Pixel keine festen Wertunterschiede haben?

+2

Sie finden können Beispiele auf Stapel gearbeitet ... zum Beispiel http://stackoverflow.com/questions/24633618/what-does-numpy-gradient-do und es gibt andere, wenn diese ‚doesn t arbeiten für Sie –

+0

Werfen Sie einen Blick auf den Docstring (http://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html). Es erklärt, was 'gradient' berechnet. Sie können über "zentrale Unterschiede" beispielsweise auf Wikipedia (https://en.wikipedia.org/wiki/Finite_difference; insbesondere https://en.wikipedia.org/wiki/Finite_difference#Forward.2C_backward) nachlesen. 2C_and_central_differences). –

Antwort

0

Zentrale Unterschiede im Inneren und erste Unterschiede an den Grenzen.

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

Es wendet einen Kern von [-1 0 1] auf Innenräume und [-1 1] auf Kanten an. Danke für die Erklärung –

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() 
Verwandte Themen