Intensität Normalisierung des Bildes mit Python+PIL - Speed Probleme

Ich bin auf ein kleines problem in meinem sparetime Einbeziehung der Analyse von einigen Bildern, die durch ein Mikroskop. Es ist ein wafer mit ein paar Sachen hier und da, und letztendlich möchte ich ein Programm um zu erkennen, Wann bestimmte Materialien zu zeigen.

Sowieso, der erste Schritt ist die Normalisierung der Intensität über das Bild, da die Linse nicht geben einheitlichen Blitz. Derzeit verwende ich ein Bild, mit keine Sachen auf, nur der Untergrund, als hintergrund, oder als Referenz, Bild. Ich finde das maximum von drei (Intensitäts -) Werte für RGB.

from PIL import Image
from PIL import ImageDraw

rmax = 0;gmax = 0;bmax = 0;rmin = 300;gmin = 300;bmin = 300

im_old = Image.open("test_image.png")
im_back = Image.open("background.png")

maxx = im_old.size[0] #Import the size of the image
maxy = im_old.size[1]
im_new = Image.new("RGB", (maxx,maxy))


pixback = im_back.load()
for x in range(maxx):
    for y in range(maxy):
        if pixback[x,y][0] > rmax:
            rmax = pixback[x,y][0]
        if pixback[x,y][1] > gmax:
            gmax = pixback[x,y][1]
        if pixback[x,y][2] > bmax:
            bmax = pixback[x,y][2]


pixnew = im_new.load()
pixold = im_old.load()
for x in range(maxx):
    for y in range(maxy):
        r = float(pixold[x,y][0]) / ( float(pixback[x,y][0])*rmax )
        g = float(pixold[x,y][1]) / ( float(pixback[x,y][1])*gmax )
        b = float(pixold[x,y][2]) / ( float(pixback[x,y][2])*bmax )
        pixnew[x,y] = (r,g,b)

Den ersten Teil des Codes legt die maximale Intensität der ROT -, GRÜN-und BLAU-Kanäle, pixel für pixel, der hintergrund-Bild, aber muss nur einmal gemacht werden.

Den zweiten Teil übernimmt das "echte" Bild (mit Sachen drauf), und normalisiert die ROT -, GRÜN-und BLAU-Kanäle, pixel für pixel, nach dem hintergrund. Dies dauert einige Zeit, 5-10 Sekunden für einen 1280x960-Bild, das ist viel zu langsam, wenn ich brauche, um dies zu tun, um mehrere Bilder.

Was kann ich tun um die Geschwindigkeit zu verbessern? Ich dachte, der Umzug alle Bilder in numpy-arrays, aber ich kann nicht scheinen zu finden, eine schnelle Möglichkeit, dass Sie für RGB-Bilder.
Ich möchte lieber nicht Weg von python, da mein C++ ist ziemlich low-level, und immer eine funktionierende FORTRAN-code würde wahrscheinlich länger dauern, als ich jemals sparen in Bezug auf die Geschwindigkeit 😛

  • Dies ist wahrscheinlich gehört zur codereview.stackexchange.com mehr als hier.
  • Ich denke, es ist eine Grauzone. Die Frage ist in Bezug auf eine bestimmte Technologie, nachdem alle.
  • Lösegeld: Wie funktioniert die "spezielle Technologie" machen Sie Grau? Es ist code. Überprüft werden.
  • vielleicht hast du Recht, es ist nicht Grau, nachdem alle. Ich habe gerade wieder-die FAQ gelesen und ich sehe nicht ein einziges problem mit dieser Frage.
  • haben Sie sich Gedanken über OpenCV? Es ist ein leistungsfähiges Bildverarbeitungs-Bibliothek mit Python bindings. Es ist schnell mit Lesen und schreiben, und hat, zum Beispiel, eine adaptiveThreshold Algorithmus.
InformationsquelleAutor Happy | 2011-09-14
Schreibe einen Kommentar