2016-06-11 8 views
4

Ich habe eine C# (Emgu CV) -Anwendung, wo ich mehrere Bilder der gleichen Szene mit unterschiedlichen Brennweiten erfassen. Nun möchte ich ein Multifokusbild ähnlich wie in diesem Artikel http://blog.patdavid.net/2013/01/focus-stacking-macro-photos-enfuse.htmlFokus-Stapeln mit OpenCV/Emgu CV

erstellen Ich konnte keinen Ansatz finden, es mit OpenCV zu tun. konnte ich Schärfe Karten für meine Bilder mit diesem Code

private Image<Gray, float> GetFocusMask(string imgfile) 
    { 
     var img = new Image<Bgra,byte>(imgfile); 

     Image<Gray, byte> imgGray = img.Convert<Gray, byte>(); 
     Image<Gray, float> roughSharpness = imgGray.Laplace(5); 
     roughSharpness = roughSharpness.Dilate(2); 
     roughSharpness._SmoothGaussian(3); 

     return roughSharpness; 
    } 

Leider stecke ich bin jetzt schaffen und weiß nicht, wie diese Masken zu verwenden, um ein einzelnen Depth of Field Bild der ursprünglichen Fokus Bildsammlung zu berechnen .

Antwort

0

Ich habe etwas Ähnliches getan, eine andere Metrik als die Laplace verwenden, aber die Idee ist die gleiche:

  1. eine Schärfe Punktzahl für jede Tiefe Berechnen Sie die Laplace oder ähnliches verwendet wird.

  2. Erstellen Sie eine Tiefenkarte. Die Karte hat die gleiche Größe wie das Bild. Jedes Pixel enthält den Index der Tiefe mit dem größten Schärfewert an diesem Punkt.

  3. Den Tiefenindex mit einem Medianfilter (z. B. 5x5) filtern. Dies reduziert die Anzahl der fehlerhaften Tiefenwerte.

  4. Erstellen Sie das zusammengeführte Bild. Wählen Sie an jedem Punkt das Pixel aus dem Tiefenbild aus, das dem Index an diesem Punkt entspricht.