In einer Universitätsvorlesung hatte ich ein Problem damit, den Schwellenwert mithilfe der P-Kachel-Methode zu finden, und implementierte ihn daher mit Python3.
Es ist ein Algorithmus, der den Punkt bestimmt, der die Fläche im Histogramm durch X% als Schwellenwert teilt.
ptile.ipynb
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
file = "./sample.png "
#Funktion, die einen Schwellenwert zurückgibt
def decideTh(area, ret):
#Schwelle
th = 0
#Hintergrund
background = 0
#Flächenverhältnis
bg_ratio = 1 / 2
count = 0
#Ich suche Hintergrund
for i in ret[0]:
background += i
if background == 0:
ratio = 0
else:
ratio = background /area
#Ersetzen Sie den Helligkeitswert, bis der Hintergrund das Flächenverhältnis überschreitet
if ratio <= bg_ratio:
th = ret[1][count]
count+=1
return th
#Eine Funktion, die ein Bild als Histogramm und als Schwellenwert konvertiert
def binari(filename):
#Bereich des Histogramms
area = 0
#Konvertieren Sie das Bild in Graustufen und weisen Sie der Funktion den Helligkeitswert zu
img = np.array(Image.open(filename).convert("L")).reshape(-1,1)
#Konvertieren Sie den Helligkeitswert in ein Histogramm und ersetzen Sie ihn
ret = (plt.hist(img, bins=255))
#Suchen Sie den Bereich des Histogramms
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))
Für diesen Code zitiere ich @ seigots Anzeigen eines Histogramms der Bildhelligkeitswerte in Python.
Recommended Posts