import cv2read as cread import matplotlib.pyplot as plt import numpy as np def avg_stdabw(array): # berechnet die Standartabweichung des Bildes avg = np.mean(array) # Durchschnittswert des Bildes bestimmen std = 0 for y in range(0,array.shape[0]): for x in range(0,array.shape[1]): # Standartabweichung bei jedem Pixel berechnen std = std + ((array[y][x] - avg) ** 2) / (array.size -1) # quadratischer Fehler std = np.sqrt(std) # da std mit ² berechnet wurde, benötigt man jetzt noch die Wurzel return avg, std # gibt durchschnittswert und Standartabweichung zurück def subimg(img): # Teilt das Graustufenbild in die einzelnen Graustufen auf # mindestens 10 pixel differenz zwischen den werten, # da die übergänge nicht exakt gerade sind return npframe[:,0:110],npframe[:,120:260],npframe[:,280:410],npframe[:,420:560],npframe[0:460,570:640] frame = cread.bildoeffnen("../Bilder/graustufen_korrigiert.png") npframe = np.array(frame, dtype=np.uint8) subimgs = [] # korrigiertes Graustufenbild einlesen und aufspalten subimgs = subimg(npframe) for img in subimgs: # Mittelwert und Standartabweichung des Bildes ausgeben avg, std = avg_stdabw(img) print(str(avg) + " & " + str(std))
def getimgmean(filename): # berechnet das durchschnittsbild avg = np.zeros((480, 640), dtype=np.double) # zu beginn ein Schwarzes Bild for i in range(1, 11): # alle 10 aufgenommenen Bilder mit gewichtung 1/10 # zu einem durchschnitts Bild zusammen addieren. avg = avg + cread.bildoeffnen("../Bilder/" + filename + str(i) + ".png") / 10 return avg
import numpy as np import dunkelbild as dk import cv2read as cvread import matplotlib.pyplot as plt import cv2 darkimg = dk.getimgmean("dunkelbild_") # Dunkelbild durchschnitt whiteimg = dk.getimgmean("weissbild_") # Weissbild durchschnitt wimg_cmp = whiteimg - darkimg # Weissbild ohne thermisches Rauschen whiteNorm = wimg_cmp / np.mean(wimg_cmp)# Weissbild Normiert #-------Bild zur korrektur einlesen img2 = np.array(cvread.bildoeffnen("../Bilder/graustufen.png")) # original Bild img = (img2 - darkimg) # PixelOffset abziehen for x in range(0,img.shape[1]): for y in range(0,img.shape[0]): if not whiteNorm[y][x] == 0: # keine Division durch 0 zulassen # Pixelweise durch Weissbild teilen, Sensitivität anpassen img[y][x] = img[y][x] / whiteNorm[y][x] cv2.imwrite("../Bilder/graustufen_korrigiert.png", img) # korrigiertes Bild