diff --git a/docs/Images/Photos/BicubicExample.png b/docs/Images/Photos/BicubicExample.png new file mode 100644 index 0000000..35e9f6c Binary files /dev/null and b/docs/Images/Photos/BicubicExample.png differ diff --git a/docs/Images/Photos/BicubicExample.png:Zone.Identifier b/docs/Images/Photos/BicubicExample.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Photos/BicubicExample1.webp b/docs/Images/Photos/BicubicExample1.webp new file mode 100644 index 0000000..e9ff2d6 Binary files /dev/null and b/docs/Images/Photos/BicubicExample1.webp differ diff --git a/docs/Images/Photos/BicubicExample1.webp:Zone.Identifier b/docs/Images/Photos/BicubicExample1.webp:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Photos/BicubicExample2.webp b/docs/Images/Photos/BicubicExample2.webp new file mode 100644 index 0000000..bd81374 Binary files /dev/null and b/docs/Images/Photos/BicubicExample2.webp differ diff --git a/docs/Images/Photos/BicubicExample2.webp:Zone.Identifier b/docs/Images/Photos/BicubicExample2.webp:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Photos/InterpolationExemple.png b/docs/Images/Photos/InterpolationExemple.png new file mode 100644 index 0000000..cbe9ef3 Binary files /dev/null and b/docs/Images/Photos/InterpolationExemple.png differ diff --git a/docs/Images/Photos/InterpolationExemple.png:Zone.Identifier b/docs/Images/Photos/InterpolationExemple.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Photos/TresholdExemple1.webp b/docs/Images/Photos/TresholdExemple1.webp new file mode 100644 index 0000000..6f03ed3 Binary files /dev/null and b/docs/Images/Photos/TresholdExemple1.webp differ diff --git a/docs/Images/Photos/TresholdExemple1.webp:Zone.Identifier b/docs/Images/Photos/TresholdExemple1.webp:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Photos/TresholdExemple2.webp b/docs/Images/Photos/TresholdExemple2.webp new file mode 100644 index 0000000..6f03ed3 Binary files /dev/null and b/docs/Images/Photos/TresholdExemple2.webp differ diff --git a/docs/Images/Photos/TresholdExemple2.webp:Zone.Identifier b/docs/Images/Photos/TresholdExemple2.webp:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/index.md b/docs/index.md index 3a76647..a720aa9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -762,19 +762,65 @@ Voici un sommaire des methodes utilisées et comment elles fonctionnent. *Tresholding* +Cette methode sert à passer d'une image en couleurs à une image binaire noir blanc. +C'est une étape très importante pour l'OCR car elle permet (si bien faite) d'isoler du texte de son background. + +Un exemple ici : + +!["Exemple treshold"](./Images/Photos/TresholdExemple1.webp) + +Le fonctionnement est assez simple mais il peut être fait de différentes manières mais dans mon cas voici comment l'algorythme fonctionne sachant qu'il demande en entrée la Bitmap que l'on veut modifier ainsi que la valeur de Treshold : + +1. On parcours chaque pixel de l'image +2. On convertir la couleur du pixel en une valeur de gris pour avoir la même valeur en R,G et B (Formule utilisée : grey = R x 0.3 + G x 0.59 + B x 0.11) +3. Si le résultat de la valeur de gris est au dessus de la valeur de treshold, le pixel est passé en blanc complet et dans le cas contraire il est passé en noir complet +4. On retourne la Bitmap modifiée + +Un algorythme pas forcément complexe mais qui peut augmenter de manière titanesque les chances de réussir une OCR + *Resize* -*Dilatation* +Cette methode sert à augmenter la résolution d'une image pour améliorer la précision de l'algorythme de Tesseract. En effet, avec trop peu de pixels, la matrice de convolution n'est pas toujours aussi efficace. -*Erosion* +Il ne faut pas confondre cette methode d'augmentation de la taille avec une simple interpolation. En effet une augmentation de taille interpolée ne vas pas vraiment changer la résolution, l'image sera toujours aussi pixelisée, seulement, les pixels seront composées de plus de pixels comme dans l'exemple ci dessous : -*GrayScale* +!["Interpolation exemple"](./Images/Photos/InterpolationExemple.png) + +Dans mon projet j'utilise de l'interpolation bicubique qui va créer de l'information pour tenter de combler le vide et produire une image réellement plus grande et avec plus de details mais en ajoutant du flou. + +!["bicubic exemple"](./Images/Photos/BicubicExample.png) + +Le but est d'aller chercher dans les pixels alentours les couleurs qui sont déja présente et de jouer avec des poids pour tenter de faire une prédiction de ce que ce pixel aurait été si l'image avait plus de detail. + +Voici un exemple assez parlant : + +!["bicubic demonstration"](./Images/Photos/BicubicExample1.webp) + +!["bicubic demonstration"](./Images/Photos/BicubicExample2.webp) + +On pourrait croire que c'est inutile mais dans le contexte de Tesseract ajouter des détails pour tenter de simuler une meilleure résolution même en créant du flou est intéressant pour mieux remplir la matrice de convolution. + +Mais il est possible de réduire ce flou avec d'autres méthodes également. + +(Dans mon code je n'ai pas utilisé du code fait main mais j'utilise une librairie qui me permet de le faire) + +Il faut simplement faire attention car c'est un procédé assez lourd en performances. + +*Dilatation* et *Erosion* + +Cette methode et la suivante font partie des methodes de transformation morphologiques. + +Ces methodes sont utilisées pour accentuer les formes et les epaissir ou les réduire et les affiner. Elles possèdent l'aventage également de retirer le flou d'une image ce qui est très pratique si utilisé après l'utilisation de methodes comme *Resize*. + +Je ne vais pas trop rentrer dans les détails de ces methodes car leur fonctionnement est un peu plus lourd en math si on veut faire une véritable explication du pourquoi et du comment ca marche aussi bien. Pour notre projet je dirais que l'important est de savoir que ce sont deux outils très pratiques pour changer la morphologie des lettres et des chiffres et qu'on peut les utiliser pour corriger du flou et/ou des artéfacts apparus lors de la binarisation de l'image ou de la suppression de fond. *Remove Background* -Il y aussi d'autre methodes comme un filtre Gaussien ou *Highlight countour* que j'ai du développer mais que je n'ai pas utilisé donc je ne vais pas en parler ici +Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente à celle d'un pixel de fond il est passé en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues. -### Lecture des images +Une variante spécialisée pour la reconnaissance des pneus appelée affectueusement *Remove Useless* cherche à atteindre le même bu mais est bien plus soffistiquée et spécialisée pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus. + +Il y aussi d'autre methodes comme un filtre Gaussien ou *Highlight countour* que j'ai du développer mais que je n'ai pas utilisé donc je ne vais pas en parler ici. ### Interprétation des données