Sto usando un algoritmo di convoluzione diretta per calcolare la convoluzione tra questa immagine:Artefatti in circonvoluzione
e questo kernel:
Sto usando l'attuazione in astropy per la convoluzione diretta.
Il risultato è il seguente circonvoluzione, lasciando tutte le impostazioni (comprese la gestione di confine) ai valori di default, vale a dire astropy.convolution.convolve (immagine, kernel):
Questa convoluzione ha alcuni manufatti sconcertanti . In particolare, esiste un modello "quadrato" con un offset di circa 50 pixel dal bordo. Mi sembra che ciò sia dovuto all'entità del kernel; anche se il kernel ha dimensioni formalmente 249x249, la maggior parte delle informazioni è chiaramente contenuta in un raggio di circa 100 pixel - il che significa che presumibilmente incontriamo problemi quando il kernel viene applicato ai bordi.
che mi porta alle mie domande:
- È questa ipotesi corretta - che è davvero un problema di bordo?
- Come potrei risolvere? Non so come giustificare l'utilizzo di diversi edge-handling (zero padding, interpolation, wrapping, ...) Sono sicuro che casi diversi richiedono soluzioni diverse, ma non sono sicuro su come decidere su questo ...
- Solo ... cercando di capire la differenza tra l'utilizzo di un algoritmo diretto e una convoluzione FFT. Se il kernel e l'immagine sono ugualmente grandi, non è necessario alcun padding zero per la convoluzione FT, non verranno visualizzati effetti di bordo. Per il metodo diretto, inavvertitamente avrai un po 'di gestione dei bordi ... quindi ci sono risultati anche equivalenti? Perché in linea di principio solo le loro prestazioni dovrebbero differire, giusto?