Ich arbeite derzeit an der Implementierung eines Schwellenwertalgorithmus namens Bradley Adaptive Thresholding
.Bradley adaptive Schwellenwertalgorithmus
Ich habe hauptsächlich zwei Links verfolgt, um herauszufinden, wie dieser Algorithmus implementiert werden kann. Ich war auch erfolgreich in der Lage, zwei andere Schwellenalgorithmen zu implementieren, hauptsächlich Otsu's Method und Balanced Histogram Thresholding.
Hier sind die zwei Links, die ich verfolgt habe, um den Bradley Adaptive Thresholding
Algorithmus zu erstellen.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.420.7883&rep=rep1&type=pdf
Bradley Adaptive Thresholding Github Example
ist hier der Abschnitt meines Quellcodes in Python
, wo ich den Algorithmus leite und das Bild speichern. Ich benutze die Python Imaging Library
und keine anderen Tools, um zu erreichen, was ich tun möchte.
def get_bradley_binary(inp_im):
w, h = inp_im.size
s, t = (w/8, 0.15)
int_im = Image.new('L', (w, h))
out_im = Image.new('L', (w, h))
for i in range(w):
summ = 0
for j in range(h):
index = j * w + i
summ += get_pixel_offs(inp_im, index)
if i == 0:
set_pixel_offs(int_im, index, summ)
else:
temp = get_pixel_offs(int_im, index - 1) + summ
set_pixel_offs(int_im, index, temp)
for i in range(w):
for j in range(h):
index = j * w + i
x1,x2,y1,y2 = (i-s/2, i+s/2, j-s/2, j+s/2)
x1 = 0 if x1 < 0 else x1
x2 = w - 1 if x2 >= w else x2
y1 = 0 if y1 < 0 else y1
y2 = h - 1 if y2 >= h else y2
count = (x2 - x1) * (y2 - y1)
a1 = get_pixel_offs(int_im, y2 * w + x2)
a2 = get_pixel_offs(int_im, y1 * w + x2)
a3 = get_pixel_offs(int_im, y2 * w + x1)
a4 = get_pixel_offs(int_im, y1 * w + x1)
summ = a1 - a2 - a3 + a4
temp = get_pixel_offs(inp_im, index)
if temp * count < summ * (1.0 - t):
set_pixel_offs(out_im, index, 0)
else:
set_pixel_offs(out_im, index, 255)
return out_im
Hier ist der Teil meiner Code, der die Umsetzung dieser Satz und bekommen Methoden zeigt, dass Sie noch nie zuvor gesehen haben.
def get_offs(image, x, y):
return y * image.size[0] + x
def get_xy(image, offs):
return (offs % image.size[0], int(offs/image.size[0]))
def set_pixel_xy(image, x, y, data):
image.load()[x, y] = data
def set_pixel_offs(image, offs, data):
x, y = get_xy(image, offs)
image.load()[x, y] = data
def get_pixel_offs(image, offs):
return image.getdata()[offs]
def get_pixel_xy(image, x, y):
return image.getdata()[get_offs(image, x, y)]
Und schließlich, hier sind die Eingabe- und Ausgabebilder. Dies sind die gleichen Bilder, die in der ursprünglichen Forschungsarbeit im ersten Link, den ich Ihnen zur Verfügung gestellt habe, verwendet werden. Hinweis: Das Ausgabebild ist fast vollständig weiß, und es ist möglicherweise schwer zu erkennen, aber ich habe es trotzdem bereitgestellt, falls jemand es wirklich als Referenz haben möchte.
Was nicht funktioniert, um die richtige Ausgangsbilderzeugung? Haben Sie nicht-visuelle Tests? – Ashalynd
Ja, die korrekte Ausgabe der Bilderzeugung funktioniert nicht, ich habe das exakt gleiche Bild verwendet, das die Forschungsarbeit für ihren Test benutzt, und das Ausgabebild ist komplett weiß und sieht nicht so aus wie das Ausgabebild der Forschungspapiere.Was die nicht-visuellen Tests betrifft, bin ich mir nicht sicher, was Sie meinen. –