Déterminer le seuil à l'aide de la méthode P-tile en python

Contexte

Dans une conférence universitaire, j'ai eu un problème pour trouver le seuil en utilisant la méthode de tuile P, donc je l'ai implémenté en utilisant python3.

Quelle est la méthode p-tile?

C'est un algorithme qui détermine le point qui divise la zone par X% dans l'histogramme comme seuil.

code

 ptile.ipynb



from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
file = "./sample.png "

#Fonction qui renvoie un seuil
def decideTh(area, ret):
    #Seuil
    th = 0
    #Contexte
    background = 0
    #Rapport de surface
    bg_ratio = 1 / 2
    count = 0
    #Recherche de fond
    for i in ret[0]:
        background += i
        if background == 0:
            ratio = 0
        else:
            ratio = background /area
        #Remplacez la valeur de luminosité jusqu'à ce que l'arrière-plan dépasse le rapport de surface
        if ratio  <= bg_ratio:
            th = ret[1][count]
        count+=1

    return th

#Une fonction qui convertit une image en histogramme et en seuil
def binari(filename):
    #Zone de l'histogramme
    area = 0
    #Convertit l'image en échelle de gris et attribue la valeur de luminosité à la fonction
    img = np.array(Image.open(filename).convert("L")).reshape(-1,1)
    #Convertir la valeur de luminosité en histogramme et la remplacer
    ret = (plt.hist(img, bins=255))
    #Trouvez la zone de l'histogramme
    for i in ret[0]:
        area += i
    
    th = decideTh(area,ret)
    return th

print(binari(file))

img = np.array(Image.open(filename).convert("L")).reshape(-1,1)
    ret = (plt.hist(img, bins=255))

Pour ce code, je cite [Afficher un histogramme des valeurs de luminosité d'image en python] de @ seigot (https://qiita.com/seigot/items/c60087b3f7812d2d6dc7).

référence

Filtre de binarisation de la méthode P-tile

Recommended Posts

Déterminer le seuil à l'aide de la méthode P-tile en python
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Tweet à l'aide de l'API Twitter en Python
Apprenez le modèle de conception "Méthode de modèle" en Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
J'ai essayé la méthode des moindres carrés en Python
Pour remplacer dynamiquement la méthode suivante en python
Apprenez le modèle de conception "Méthode d'usine" en Python
Pré-traiter l'index en Python à l'aide de ScriptUpdateProcessor de Solr
Essayez d'implémenter la méthode Monte Carlo en Python
Essayez d'utiliser l'API DropBox Core avec Python
Méthode Simplex (méthode unique) en Python
Méthode privée en python
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Utilisation de l'application LibreOffice en Python (1) Où sont les macros?
Approximer une courbe de Bézier à travers un point spécifié en utilisant la méthode des moindres carrés en Python
Suppression des substitutions de méthode en Python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Comment utiliser la méthode __call__ dans la classe Python
Obtenez le type MIME en Python et déterminez le format de fichier
[Python] Régression LASSO avec contrainte d'équation utilisant la méthode du multiplicateur
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
J'ai regroupé le yen dollar en utilisant la méthode k-medoids en python et j'ai trouvé le taux de réponse correct.
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Programmation GUI en Python avec Appjar
Obtenir l'API arXiv en Python
Précautions lors de l'utilisation de Pit avec Python
python Remarque: déterminez si l'argument de ligne de commande est dans la liste
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Un débutant en Python a essayé Hello World en 30 secondes en utilisant le microframework Flask
Obtenez le chemin du bureau en Python
Essayez d'utiliser LevelDB avec Python (plyvel)
Obtenez le chemin du script en Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Implémentation de la méthode de propagation d'étiquettes en Python
Utilisation de variables globales dans les fonctions python
Simuler la méthode Monte Carlo en Python
Accédez à l'API Web en Python
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Méthode Hash (méthode d'adresse ouverte) en Python
Extraire le fichier targz en utilisant python
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python
Examiner la classe d'un objet avec python
Obtenez le chemin du bureau en Python
Essayez d'utiliser le module Python Cmd
Obtenez le nom d'hôte en Python
Reconnaissance de caractères manuscrits à l'aide de KNN en Python