Domanda

Sto cercando di progettare un sistema di auto-focus per un microscopio a basso costo USB. Ho sviluppato il lato hardware con un motore PAP precisione che è in grado di regolare la manopola del fuoco nella microscopio , e ora sono nella parte più difficile.

Ho riflettuto su come implementare il software. L'hardware ha due porte USB, una per la fotocamera microscopio ed un altro per il motore. La mia idea iniziale è quella di scrivere un programma in C # che è in grado di ottenere l'immagine dal microscopio e di spostare il motore avanti e indietro, fin qui tutto bene:)

Ora ho bisogno di un po 'di aiuto con l'auto-focus, come implementarlo? C'è qualsiasi algoritmo buono per questo? O forse una libreria di elaborazione delle immagini che aiuterà il mio nel mio compito?

Sono stato googleling ma senza successo ... Io apprezzo qualsiasi aiuto / idea / raccomandazione!

Molte grazie :)

EDIT:. Grazie ragazzi per le vostre risposte, cercherò tutte le opzioni e tornare qui con i risultati (o forse più domande)

È stato utile?

Soluzione

Il pezzo più importante è il codice che ti dice quanto fuori fuoco l'immagine è. Dato che un'immagine sfocata perde i dati ad alta frequenza mi piacerebbe provare qualcosa di simile al seguente:

long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  for(int y = 0; y<height-1; y++)
    for(int x=0; x<width-1; x++)
    {
      sum += Square(pixels[x+1, y] - pixels[x, y]);
      sum += Square(pixels[x, y] - pixels[x, y+1]);
    }
  return sum;
}

int Square(int x)
{
  return x*x;
}

Questo algoritmo non funziona bene se l'immagine è rumorosa. In questo caso si potrebbe ad downsample, o usare un algoritmo più complesso.

O un'altra idea sta calcolando la variazione dei valori dei pixel:

long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  long sumOfSquares = 0;
  for(int y=0; y<height; y++)
    for(int x=0; x<width; x++)
    {
      byte pixel=pixels[x,y];
      sum+=pixel;
      sumofSquares+=pixel*pixel;
    }
  return sumOfSquares*width*height - sum*sum;
}

Queste funzioni sulle immagini monocromatiche, per le immagini RGB basta sommare i valori per i canali.

Con questa modifica la funzione di messa a fuoco cercando di massimizzare CalculateFocusQuality. Aumentare lo stepsize se diversi tentativi consecutivi migliorato la qualità, e diminuire e invertire la direzione se il passo ridotto la qualità.

Altri suggerimenti

messa a fuoco automatica a microcoscope è un argomento di lunga data nel campo della ricerca ottica.
Si può imparare un po 'sugli algoritmi coinvolti qui .

I problemi coinvolti sono non solo come meassure sfocatura, ma anche come spostare l'asse ottico in modo ottimale, e come correggere le aberrazioni residue algoritmico.

HTH!

C'è un po 'di informazioni sulla Wikipedia

  

Tecnicamente può essere implementato come   filtro passa alto e qualche sistema che   coscienziosamente si muove intorno alla lente   punto dove uscita del filtro è più alta.   L'elaborazione digitale non è necessario

Inoltre, 5 dei primi 6 partite che ricevo da usare Google per "messa a fuoco automatica algoritmo" sembrano avere le informazioni pertinenti e utili (anche se in uno o due casi tutti i dettagli di carte richiede il pagamento)

solo alcune delle mie esperienze cercando di risolvere compito simile. Sul mio sistema è utilizzato un magnificatin 200x. resolutin Stepper in direzione Z 0.001um.

I problemi che ho dovuto affrontare: -Shaking. L'immagine sulla posizione teoricamente migliore potrebbe essere valutata peggio a causa di un tratto agitazione. Come le API del mio sistema non ha permesso di spostare Z-axix e rendere le immagini in parallelo, ho dovuto spostare a passi e la cattura sequenttially. Ogni mossa-stop causato agitazione. È interessante notare che l'agitazione erano più grave mentre si muove verso il basso rispetto salendo.

imprecisioni meccanici. Realizzazione di una scansione e trasferirsi teoricamente migliore posizione possono recare un errore, perché stepper-posizione di controllo può non essere la stessa della posizione meccanica.

-Esposizione: A seconda dell'applicazione, la luminosità dell'immagine può variare, in modo che l'esposizione deve essere regolata. Seconda algoritmo fuoco-valutazione (se la luminosità è coinvolto nel calcolo o meno) l'esposizione può essere richiesto da fissare. Che si traduce nel problema di pollo-uovo - come l'esposizione di impostazione, se la luminosità dell'immagine è sconosciuto e come mettere a fuoco, se l'esposizione richiesta è sconosciuta.

Infine, per evitare problemi meccanici Sono (ri) migliore immagine memorizzata trovato mentre ci si concentra e restituito alla fine. Riguardante l'algoritmo per fuoco valore, la migliore cercava bordi combinati con tutta numero di colori (istogramma larghezza). Ma di causa, dipende dal tipo di immagine che si procede.

Saluti, Valentin Heinitz

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top