Sto cercando di implementare un algoritmo di elaborazione delle immagini che prevede il calcolo del prodotto di 4 quarti adiacenti per ogni cella. Cioè, per calcolare una nuova matrice Y per X dove y[i, j] = x[i-1, j] * x[i, j-1] * x[i+1, j] * x[i, j+1]
. I vicini fuori dal comune dovrebbero essere ignorati.Calcola il prodotto del quartiere per ogni cella in una matrice con numpy/scipy
Ora posso solo pensare di questo approccio: usare scipy.ndimage.filters.correlate
e passare pesi con zeri e uno 1 per ottenere quattro matrici, ciascuna contenente il vicino per ogni cella in una direzione, come passando weight = [[0, 0, 0], [1, 0, 0], [1, 1]]
e ottengo a[i, j] = x[i-1, j]
, e con altri pesi posso ottenere b[i, j] = x[i, j-1]
, c[i, j] = x[i+1, j]
, d[i, j] = x[i, j+1]
. Quindi uso np.multiply
per calcolare il prodotto di queste quattro matrici.
Tuttavia, questo approccio è un po 'troppo lento e non posso ignorare i limiti. C'è un altro modo per farlo con numpy/scipy quindi non devo ricorrere a loop per?
Se si sono presi i registri prima, quindi sarebbe un'aggiunta. – Paul
L'operatore di Laplace discreto 2x2 sarebbe molto vicino una volta aggiunto. Ho solo bisogno di cancellare il termine centrale. http://en.wikipedia.org/wiki/Discrete_Laplace_operator http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.laplace.html – Paul
@Paul Grazie per l'aiuto, ma potrebbe essere numeri negativi nella matrice, quindi non posso prendere i log prima. – Joyee