Rapide seuillage de l'image

Ce qui est une façon rapide et fiable de seuil images avec possibilité de brouillage et de non-uniforme de la luminosité?

Exemple (flou mais luminosité uniforme):

Rapide seuillage de l'image

Parce que l'image n'est pas garanti pour avoir une luminosité uniforme, il n'est pas possible d'utiliser un seuil fixe. Un seuil adaptatif fonctionne pas mal, mais à cause de l'effet de flou, il crée des pauses et des distorsions dans les caractéristiques (ici, les caractéristiques importantes sont le Sudoku chiffres):

Rapide seuillage de l'image

J'ai aussi essayé d'utiliser d'Égalisation d'Histogramme (à l'aide d'OpenCV est equalizeHist fonction). Il augmente le contraste, sans réduire les différences de luminosité.

La meilleure solution que j'ai trouvé est de diviser l'image en son morphologiques de clôture (crédit à ce post) pour rendre la brillance uniforme, puis effectuer une renormalisation, puis d'utiliser un seuil fixe (à l'aide de l'algorithme d'Otsu de choisir le seuil optimal de niveau):

Rapide seuillage de l'image

Voici le code à cet effet dans OpenCV pour Android:

Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(19,19));
Mat closed = new Mat(); //closed will have type CV_32F
Imgproc.morphologyEx(image, closed, Imgproc.MORPH_CLOSE, kernel);
Core.divide(image, closed, closed, 1, CvType.CV_32F);
Core.normalize(closed, image, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Imgproc.threshold(image, image, -1, 255, Imgproc.THRESH_BINARY_INV
    +Imgproc.THRESH_OTSU); 

Cela fonctionne très bien mais la commande de fermeture est très lent. La réduction de la taille de l'élément structurant augmente la vitesse, mais réduit la précision.

Edit: basé sur les contrôleurs de domaine de la suggestion, j'ai essayé à l'aide d'un filtre passe-haut. J'ai choisi le Laplacien de filtre, mais je m'attends à des résultats similaires avec Sobel et Scharr filtres. Le filtre capte le bruit haute fréquence dans les zones qui ne contiennent pas de caractéristiques, et souffre de distorsion similaire à l'adaptation du seuil en raison de l'effet de flou. elle prend également en tant que la clôture de l'opération. Voici un exemple avec un 15x15 filtre:

Rapide seuillage de l'image

Edit 2: sur la Base des AruniRC réponse, j'ai utilisé Habile de détection de contours sur l'image avec les paramètres suggérés:

double mean = Core.mean(image).val[0];
Imgproc.Canny(image, image, 0.66*mean, 1.33*mean);

Je ne suis pas sûr de la façon de manière fiable automatiquement affiner les paramètres pour se connecter chiffres.

Rapide seuillage de l'image

  • Vous pourriez essayer de seuil sur un passe-haut à l'image filtrée, en supposant que le brigthness changement se produit dans les basses fréquences. Je ne sais pas, toutefois, à quelle vitesse ces filtrer les opérations sont sur un appareil mobile, et je pense que vous auriez besoin d'un assez grand noyau.
  • Malheureusement, je ne pense pas que les filtres passe-haut sera travailler. Voir mon edit pour le post ci-dessus.
  • Étant donné que les caractéristiques qui vous intéressent dans la couverture de plusieurs pixels, comment sur la réduction de l'image à une résolution inférieure en premier? Vous pouvez ensuite revenir en arrière et obtenir plus de détails à la résolution d'origine, à l'aide de votre bas-res de la version comme un masque.
  • Pourriez-vous élaborer? Je ne vois pas comment réduire la résolution de l'aide.
  • Avec une résolution inférieure, il y aurait moins de pixels à traiter, de sorte qu'il devrait prendre moins de temps.
  • Oui, mais j'ai encore besoin de seuil les chiffres à haute résolution de sorte que je peux utiliser les chiffres de la reconnaissance. Quel est le but de seuillage à plus basse résolution de la première?
  • Votre image de l'échantillon est 480x480, mais les chiffres sont encore très distinctes sur 120x120 résolution. L'effet de flou et le bruit est beaucoup moins perceptible.
  • Réduire la résolution et l'utilisation de la petite image pour déterminer comment normilize la brigthness dans la zone correspondante dans la grande image, après la normalisation de procéder à filtre. Il devrait avoir plus de bruit que si vous ne la normalisation avec la grande image, mais il sera plus rapide. Nous espérons qu'avec le droit de seuil, il sera suffisant. C'est Juste une idée.
  • N'est-ce pas la question, juste une question de faire une recherche Google et d'analyse comparative de quelques techniques?
  • L'algorithme doit effectuer bien sur les images floues avec la variable de la luminosité, ce qui élimine la plupart des candidats. L'analyse comparative de la vitesse n'est pas le seul facteur. Avez-vous des suggestions?

InformationsquelleAutor 1'' | 2013-03-22