Python'u kullanarak (this matlab question modeline benzer) Gradient Vector Field görüntüsünü elde etmeye çalışıyorum.Python'da Resim Eğrili Vektör Alanı
Bu orijinal resimdir:
İşte benim kodudur:
sorun vektörler yanlış gibi görünüyor olmasıdır:
import numpy as np
import matplotlib.pyplot as plt
import Image
from PIL import ImageFilter
I = Image.open('test.png').transpose(Image.FLIP_TOP_BOTTOM)
I = I.filter(ImageFilter.BLUR)
p = np.asarray(I)
w,h = I.size
y, x = np.mgrid[0:h:500j, 0:w:500j]
dy, dx = np.gradient(p)
skip = (slice(None, None, 3), slice(None, None, 3))
fig, ax = plt.subplots()
im = ax.imshow(I, extent=[x.min(), x.max(), y.min(), y.max()])
ax.quiver(x[skip], y[skip], dx[skip], dy[skip])
ax.set(aspect=1, title='Quiver Plot')
plt.show()
Bu sonucudur.
Neden vektörlerin bazı beklendiği gibi merkeze işaret yapmak, diğerleri yapmadığı halde: Görüntünün yakınlaştırmak yine bu husus daha açık olur?
Belki de np.gradient
numaralı aramanın sonucuyla ilgili bir sorun var mı?
Harika yakalama, '.astype ('int8')' aynı zamanda çalışır. Negatif gradyanlarla (negatif değerlerin pozitif değerlere eklenmesiyle) problemler yaratan 'u' (imzasız) 'dır. – fhdrsdg
Çözüm budur, çok teşekkür ederim! .Genel olarak "transpoze" çağrısını im = ax.imshow'a taşıdım (I), ieim = ax.imshow (I.transpose (Image.FLIP_TOP_BOTTOM)), ve sonra görüntünüzle tam olarak aynı sonucu aldım. İsterseniz, kişilerinizi doğrudan kodunuzu kullanabilmeleri için değiştirin. Ayrıca, np.int8 kullanmanın muhtemelen floattan daha iyi olduğunu kabul ediyorum. –
Güncelleme: Degradeler üzerinde bir gauss filtresi kullanılarak "daha yumuşak" bir versiyon elde edilebilir. Örneğin: http://dcc.fceia.unr.edu.ar/~rbaravalle/gradient/resultSoft.png Kod sonuçları: http://dcc.fceia.unr.edu.ar/~rbaravalle/gradient/test3. py –