Come menzionato nelle altre risposte, la diffrazione ha portato alla non nitidezza. Per metterlo alla prova, si può tentare di affinare l'immagine usando la deconvoluzione usando la funzione di diffusione del punto che corrisponde a F / 29. Per diffrazione, abbiamo (fino a una normalizzazione complessiva)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
dove J 1 è la funzione di Bessel del primo tipo di ordine 1 ,
s è la distanza nell'immagine misurata in pixel,
r è la dimensione di un pixel (in genere circa 4,2 * 10 ^ (- 6) metri per i sensori di coltura),
λ è la lunghezza d'onda della luce, e
F il numero F, in questo caso 29.
Questo è quindi vero per la luce monocromatica, per approssimare la funzione di diffusione del punto per i canali di colore che possiamo valutare su un intervallo appropriato di lunghezze d'onda. Inoltre, si dovrebbero integrare P (s) sull'area del pixel specificato da s.
Se compiliamo funzioni di diffusione a 3 punti per i 3 canali di colore in questo modo, possiamo rendere più nitida l'immagine trasformandola in uno spazio cromatico lineare e applicando un algoritmo di deconvoluzione e poi ritornando a sRGB. Ho ottenuto il seguente risultato:
Quindi la faccia è stata notevolmente migliorata usando solo i dati sul numero F e il presupposto sulla dimensione del pixel. Gli artefatti delle bande sono visibili nella parte scura dell'immagine, ciò è dovuto alla posterizzazione dopo la trasformazione in sRGB.
Come richiesto, aggiungerò ulteriori dettagli sui programmi utilizzati. Ho usato ImageJ e ImageMagick , ho anche usato Mathematica per calcolare la funzione di diffusione dei punti, ma può essere eseguita anche in ImageJ. Inizierò spiegando come faccio la deconvoluzione con ImageJ quando ho già la funzione di diffusione dei punti. Per eseguire la deconvoluzione, è necessario installare un plug-in per ImageJ, in questo caso ho utilizzato questo plug- in, ma sono disponibili anche altri plug-in, ad esempio il plug-in DeconvolutionLab .
Innanzitutto, devi convertire in spazio colore lineare, ho usato ImageMagick per convertire l'immagine di contrasto (input.jpg) in spazio colore lineare usando il comando:
convert input.jpg -colorspace RGB output.tif
Quindi con ImageJ, apri il file output.tif. Quindi, dalle opzioni di menu, selezionare "immagine", quindi "colore" e quindi "Canali di sputo". Quindi dal menu selezionare "plug-in" e poi "deconvoluzione iterativa parallela" e poi deconvoluzione interattiva 2d ".
Si ottiene quindi la finestra di deconvoluzione, quindi si seleziona l'immagine e "PSF" indica la fucntion di diffusione del punto, lì si seleziona il file di immagine che contiene la funzione di diffusione del punto. Per il metodo, ho scelto "WPL" che si basa sul filtro Wiener, che di solito funziona abbastanza bene per le immagini a basso rumore. Nelle opzioni per WPL, seleziona "normalizza PSF" e, per il filtro passa-basso, modifica il valore su 0,2, per impostazione predefinita è 1, ma un valore inferiore è migliore per le immagini a basso rumore (se lo scegli più grande, Otterrò un'immagine meno nitida). Le altre opzioni, Boundary possono essere scelte per essere riflessive, il ridimensionamento può essere impostato su "potenza successiva di 2", l'output può essere impostato su 32 bit, la precisione può essere impostata sul doppio. Ho scelto il numero di numero massimo di iterazioni su 15,
Quindi eseguire il programma facendo clic su "deconvolve". Quindi si ottiene un file di immagine a 32 bit come output. Di solito, i valori dei pixel sono abbastanza simili a quelli che erano nell'immagine originale, ma puoi avere alcuni pixel che superano il massimo per il formato dell'immagine originale. Quindi, in questo caso abbiamo iniziato con immagini a 8 bit, ma nell'immagine deconvolta, puoi avere valori di grigio che superano 255 che quindi rendono l'intera immagine troppo scura. Questo deve essere risolto ritagliando questi pixel a 255, cosa che puoi fare selezionando nel menu "process" e poi "Math" e poi "Max". Il valore massimo verrà quindi utilizzato per tagliare i valori di grigio che superano quel valore. Nota che questo sarà fatto all'immagine su cui hai cliccato l'ultima volta. Puoi anche vedere quale file è il "file corrente" selezionando "
Quindi, una volta deconvolti i 3 componenti del colore, è possibile combinarli selezionando nel menu "immagine", quindi "colore" e quindi "Unisci canali". Quindi ottieni un'immagine composita che puoi convertire in RGB a 8 bit usando il comando "Stack to RGB" che trovi lì.
Quindi salvi quell'immagine, chiamiamola im.tif. Infine, devi convertirlo in sRGB, puoi farlo con ImageMagick usando il comando:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
La domanda rimanente è quindi come ottenere la funzione di diffusione dei punti. In pratica, se avessi scattato una foto come quella in discussione qui, avresti semplicemente potuto scattare una foto di una sorgente puntiforme, ad esempio una stella in F / 29 e usarla come funzione di diffusione punti. In alternativa, è possibile osservare i limiti di contrasto elevato ed estrarre la funzione di diffusione dei punti dal modo in cui i valori di grigio cambiano da un valore all'altro attraverso il confine. Ma poi stai cercando di affinare l'immagine nel miglior modo possibile.
In questo caso l'obiettivo era quello di compilare le funzioni di diffusione dei punti per il canale di colore in base a ciò che ci si aspetterebbe da F / 29, deconvolgere l'immagine con quello e vedere se il risultato sembra migliorato abbastanza bene. Ho usato Mathematica per fare alcuni calcoli e quale programma di algebra al computer così avanzato è abbastanza facile fare tutti i tipi di manipolazioni tra cui la media su un intervallo di lunghezze d'onda e l'integrazione su aree di pixel per rendere il PSF più realistico.
Ma ImageJ ti consente anche di creare una nuova immagine che puoi usare come funzione di diffusione del punto. Se fai clic su "File" e poi su "Nuovo" puoi creare un'immagine a 32 bit di dimensioni, diciamo 64 per 64 riempite di nero. È quindi possibile programmare una formula per i valori di grigio selezionando "process", quindi "Math" e quindi "Macro". Per ottenere la funzione di diffusione dei punti per questo caso che coinvolge la funzione di Bessel qui, è possibile utilizzare il fatto che è ben descritta dai primi termini dell'espansione della serie. La pagina MathWorld a cui ho collegato ti offre le espansioni di questa serie, quindi J 1 (x) 2 / x 2 con x = π rs / ( λF ) può essere sostituito da una funzione del modulo A + B s 2 + C s 4. Questa approssimazione diventerà non valida se s è troppo grande. Ora sappiamo che il PSF tende a zero, ad esempio a una distanza di circa 5 o 6 pixel, può essere impostato su zero. Supponendo che il polinomio sia ancora piccolo con questi valori, è possibile scrivere la Macro come:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
Quindi crei 3 immagini per, diciamo, lambda = 650 nm, 500 nm e 400 nm, o qualsiasi altro valore che ritieni appropriato per rappresentare la diffrazione nei 3 canali di colore. È quindi possibile eseguire la media su alcune lunghezze d'onda diverse creando immagini per lambda diverse e quindi selezionando "processo", quindi "calcolatrice di immagini" e lì selezionare "Aggiungi". Puoi quindi aggiungere un'altra immagine a questo risultato e quando hai finito di aggiungere, puoi dividere per ottenere la media selezionando "process", quindi "matematica" e quindi "divide".