7
votes

Normalisation locale à OpenCV

J'essaie de mettre en œuvre dans OpenCV un algorithme de normalisation local pour réduire la différence d'éclairage dans une image. J'ai trouvé un MATLAB Fonction , et je l'ai mise en œuvre dans OpenCV . Cependant, le résultat que je reçois est différent de celui donné par la fonction MATLAB.

Ceci est mon code: xxx

la fonction norminv Est la mise en œuvre C ++ donnée par EUAN DEAN dans Ce message .

Ce qui suit montre le résultat que je reçois et le résultat théorique, pour les mêmes valeurs de sigma1 et sigma2 (2.0 et 20.0, respectivement)

http://s9.postimage.org/ 3xfdf8f8f / résultats.jpg

J'ai essayé d'utiliser différentes valeurs pour sigma1 et sigma2 , mais aucun d'entre eux ne semble fonctionner. J'ai également essayé de faire blu1 = 0 et blu2 = 0 dans la fonction gaussienne, mais cela ne fonctionne pas non plus.

Toute aide serait appréciée . Merci d'avance.


0 commentaires

3 Réponses :


11
votes

Vous devez normaliser l'image entre 0 et 255 avant de la convertir en CV_8UC1


1 commentaires

Merci pour votre réponse, qui a résolu mon problème. J'ai changé la ligne Flatgray = 255.0 * Flatgray et CV usagé :: Normaliser (Flatgray, Res, 0, 255, Norm_Minmax, CV_8UC1) et cela fonctionne maintenant. Je pensais que la multiplication de 255 normaliserait l'image, mais j'avais tort. Merci.



7
votes

Voici mon implémentation (j'utilise sigma1 = 2 , sigma2 = 20 ): xxx

le résultat comme prévu:

normalisé_image

Notez que vous pouvez spécifier la taille du noyau comme taille (0,0) et il sera calculé à partir des valeurs Sigma.


1 commentaires

Merci, c'est très utile aussi. Je voterai votre réponse dès que j'obtiendrai une plus grande réputation.



1
votes

Il s'agit de la mise en oeuvre Python du même algo ci-dessus: xxx

sortie:

 Entrez la description de l'image ici


0 commentaires