Question

Je suis en train de développer un algorithme de focalisation d'image pour certains travaux d'automatisation des tests. J'ai choisi d'utiliser AForge.net, car il semble un bon système convivial matures .net.

Malheureusement, je ne peux pas sembler trouver des informations sur la construction d'algorithmes de mise au point automatique à partir de zéro, donc je lui ai donné mon meilleur essai:

image prise. appliquer le filtre de Sobel de détection de bord, qui génère un contour de bordure en niveaux de gris. générer un histogramme et enregistrez le dev standard. déplacer la caméra un peu plus au sujet et prendre une autre photo. si le dev norme est plus petite que la précédente, nous obtenons plus au point. Sinon, nous avons passé la distance optimale à prendre des photos.

est-il une meilleure façon?

Mise à jour: faille énorme dans ce domaine, par la manière. comme je l'ai passé le point de mise au point optimale, ma valeur « image mise au point » continue de croître. vous attendez une fonction parabolique ish regardant la valeur de mise au point à distance /, mais en réalité, vous obtenez quelque chose qui est plus logarithmique

Mise à jour 2: D'accord, alors je suis retourné à cela et la méthode actuelle nous explorons est donné quelques bords connus (d'accord, donc je sais exactement ce que les objets dans l'image sont), je fais une intensité de pixel manuel Comparaison. comme le graphique résultant devient plus raide, je reçois plus au point. Je posterai le code une fois l'algorithme de base se Matlab porté à partir en c # (oui, Matlab ..: S)

Mise à jour 3: yay mise à jour finale. est revenu à ce nouveau. le code final ressemble à ceci:

Étape 1: obtenir une image de la liste des images (j'ai pris une centaine de photos par le point ciblé)

Étape 2: trouver un avantage pour l'objet que je me concentre (Dans mon cas, est un objet rectangulaire qui est toujours au même endroit, donc je recadre un rectangle haut et étroit d'un bord)

Étape 3: les HorizontalIntensityStatistics (classe Aforge.net) pour cette image recadrée

.

étape 4: obtenir le Histogramme (gris, dans mon cas)

Étape 5: calculer la dérivée des valeurs de l'histogramme

Étape 6: lorsque votre pente est la plus grande, est quand vous êtes dans le point le plus concentré

.
Était-ce utile?

La solution

Il peut être un peu simpliste pour vos besoins, mais je l'ai eu de bons résultats avec un algorithme simple qui ressemble à la différence aux pixels voisins. La somme de la différence de pixels 2-away semble être une mesure raisonnable de contraste de l'image. Je ne pouvais pas trouver le document original par Brenner dans les années 70, mais il est mentionné dans http://www2.die.upm.es/im/papers/Autofocus.pdf

Un autre problème est lorsque l'image est extrêmement flous, il y a très peu d'informations de mise au point, il est donc difficile de dire de quelle manière est « se rapproche » ou pour éviter un maximum local.

Autres conseils

Vous pouvez jeter un oeil à la technique utilisée dans le Rover de la NASA Curiosity Mars.

La technique est décrite dans cet article

EDGETT, Kenneth S., et al. (MAHLI) Curiosité de Mars main Objectif Imager Investigation. Avis en sciences spatiales , 2012, 170.1-4:. 259-317

qui est disponible en PDF ici .

Je cite l'article:

  

7.2.2 mise au point automatique

     

mise au point automatique est prévu pour être la principale méthode par laquelle est MAHLI   concentré sur Mars. La commande de mise au point indique la caméra de se déplacer à   une position de départ spécifiée de comptage de moteur et de recueillir une image, déplacer un   nombre spécifié d'étapes et de recueillir une autre image, et continuer à le faire   jusqu'à atteindre un nombre total d'images commandé, chacun séparé par un   spécifié incrément de comptage du moteur. Chacune de ces images est JPEG   comprimé (Groupe mixte d'experts en photographie, voir CCITT (1993)) avec   le même facteur de qualité de compression appliquée. La taille du fichier de chaque   image compressée est une mesure de détail de la scène, qui est dans un tour   la fonction de mise au point (mise au point d'une image montre plus en détail d'un trouble,   hors de la vue de mise au point de la même scène). Comme cela est illustré sur la figure 23., La   caméra détermine la relation entre la taille de fichier JPEG et le moteur   compter et se glisse une parabole aux trois tailles de fichier maximales voisines.   Le sommet de la parabole fournit une estimation de la meilleure mise au point   la position de comptage du moteur. Ayant pris cette décision, MAHLI déplace la   groupe de lentilles de mise au point à la meilleure position de moteur et acquiert une image;   cette image est enregistrée, les images antérieures utilisées pour déterminer la   position de mise au point automatique ne sont pas enregistrées.

     

L'autofocus peut être effectuée sur la   tout le champ de vue Machli ou elle peut être effectuée sur un sous-châssis qui   correspond à la partie de la scène qui comprend l'objet (s) à   être étudié. En fonction de la nature du sujet et la connaissance des   les incertitudes dans le bras robotique de positionnement de Machli, les utilisateurs peuvent   choisir d'acquérir une mise au point automatique centrée sous-cadre ou ils pourraient choisir   une sous-trame de mise au point automatique excentrée si la connaissance de positionnement est   suffisante pour déterminer où doit se trouver le sous-châssis. utilisation de   sous-cadres pour effectuer mise au point automatique est fortement recommandé car cela   se traduit généralement par le sujet étant en meilleure mise au point que ce qui est le cas   lorsque mise au point automatique est appliqué à la pleine CCD; en outre, la résultante   la position de comptage du moteur de mise au point automatique en utilisant une sous-trame se traduit habituellement   dans une détermination plus précise de la distance de travail de l'échelle des pixels.

Voici Figure 23:

Cette idée a également été suggéré dans cette réponse: https://stackoverflow.com/a/2173259/15485

Cela peut être utile. Il est comment le système de caméra AF fonctionne réellement - passif mise au point automatique

  

mesure de contraste

     

mesure de contraste est obtenue par   contraste de mesure dans un capteur   champ, à travers la lentille. L'intensité   différence entre pixels adjacents de   le capteur augmente naturellement avec   correcte mise au point de l'image. l'optique   le système peut ainsi être ajustée jusqu'à ce que   le contraste maximum est détecté. Dans   cette méthode, AF ne comporte pas   la mesure de la distance réelle du tout et   est généralement plus lente que la phase   systèmes de détection, en particulier lorsque   fonctionnant sous faible lumière. Comme il le fait   ne pas utiliser un capteur séparé, cependant,   détection de contraste autofocus peut être plus   flexible (tel qu'il est mis en oeuvre en   logiciels) et potentiellement plus   précis. Ceci est une méthode courante dans   caméras vidéo et niveau de consommation   appareils photo numériques qui ne disposent pas de volets et   un miroir reflex. Certains reflex numériques (y compris   Olympus E-420, Panasonic L10, Nikon   D90, Nikon D5000, Nikon D300 dans Trépied   Mode, Canon EOS 5D Mark II, Canon EOS   50D) utiliser cette méthode lors de la focalisation dans   leurs modes live view. Un nouveau   système de lentille interchangeable, Micro   Four Thirds, utilise exclusivement le contraste   mise au point automatique de mesure, et l'on dit   offre des performances comparables à la phase   systèmes détecter.

Je n'ai pas construit moi-même, mais ma première pensée serait de faire une DFT 2D sur une partie de l'image. Lorsque de mise au point, les hautes fréquences disparaîtront automatiquement.

Pour un prototype paresseux, vous pouvez essayer de compresser une région de l'image avec JPEG (haute qualité), et regardez la taille du flux de sortie. Un gros fichier signifie beaucoup de détails, ce qui implique l'image est mise au point. Attention que l'appareil photo ne devrait pas être trop bruyant, et que vous ne pouvez pas comparer la taille des fichiers à travers différentes scènes bien sûr.

Alors que le Sobel est un bon choix, je choisirais probablement faire un calcul de magnitude de bord sur les projections dans les directions x et y sur plusieurs petites régions représentatives. Un autre choix .NET basé sur OpenCV amical est @ http://www.emgu.com/ wiki / index.php / Main_Page .

Je me demande si l'écart type est le meilleur choix: Si l'image devient plus nette, l'image du filtre Sobel contiendra des pixels plus lumineux sur les bords, mais en même temps moins de pixels lumineux, car les bords sont maigris. Peut-être vous pouvez essayer d'utiliser une moyenne des valeurs les plus élevées de pixels de 1% dans l'image Sobel?

Une autre saveur pour le système métrique de mise au point pourrait être:

Grab plusieurs images et les moyenner (réduction du bruit). Ensuite, l'image FFT en moyenne et en utilisant le haut vers bas fréquences rapport d'énergie. Plus cette ration meilleure mise au point. Une démo Matlab est disponible (hors étape de moyenne) dans les démonstrations de la boîte à outils:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top