Dies ist eine alte Version des Dokuments!
import numpy as np import scipy.signal as sig import scipy from scipy import misc import cv2 def schwarzweiss(bild_grau, schwelle): '''Stellte ein Schwarzweiss Bild aus einem Grauwertbild her: Alle Punkte mit Grauwert über der Schwelle schwelle bekommen den Wert 1., die übrigen 0. Beachte: In OpenCV werden Fließkomma-Array so interpretiert, dass 0.= schwarz, 1.=weiß, ganzzahlige Arrays dagegen 0= schwarz, 255=weiß. Die Funktion geht von Fließkommabildern aus.''' bildschwarzweiss=np.zeros_like(bild_grau,dtype=np.float32) zeilen,spalten = bild_grau.shape for i in range(0,zeilen): for j in range(0,spalten): if(bild_grau[i][j] < schwelle): bildschwarzweiss[i][j] = 0. else: bildschwarzweiss[i][j] = 1. return bildschwarzweiss def glaetten(bild,n): '''Glaetten durch Faltung''' if n==3: return sig.convolve2d(bild, 1/16.*np.array([[1,2,1],[2,4,2],[1,2,1]]),mode='same') elif n==5: return sig.convolve2d(bild, (1/256.)*np.array([[1,4,6,4,1],[4,16,24,16,4],[6,24,36,24,6],[4,16,24,16,4],[1,4,6,4,1]]),mode='same') elif n==9: return sig.convolve2d(bild, (1/792.)\ *np.array([[1,2,5,6,8,6,5,2,1],[2,4,10,12,16,12,10,4,2],[5,10,25,30,40,30,25,10,5],[6,12,30,36,48,36,30,12,6],\ [8,16,40,48,64,48,40,16,8],[6,12,30,36,48,36,30,12,6],[5,10,25,30,40,30,25,10,5],[2,4,10,12,16,12,10,4,2],\ [1,2,5,6,8,6,5,2,1]]),mode='same') else: raise Exception("Faltung mit n=%s nicht implementiert"%(str(n))) def laplace(bild): '''Laplace-Faltung, hebt Kanten hervor, aber sehr rauschanfällig''' return sig.convolve2d(bild, np.array([[1,1,1],[1,-8,1],[1,1,1]]),mode='same')*10. def gradient(bild): '''Berechnet den Betrag des Gradienten: Die Komponenten des Gradienten werden durch Faltung bestimmt''' bild_gradx=sig.convolve2d(bild, np.array([[1,0,-1],[2,0,-2],[1,0,-1]]),mode='same') bild_grady=sig.convolve2d(bild, np.array([[1,0,-1],[2,0,-2],[1,0,-1]]).T,mode='same') return(np.sqrt(bild_gradx*bild_gradx+bild_grady*bild_grady)) def main(): l=misc.lena()/255. cv2.imshow("Lena", l) cv2.imshow("Lena, glatt", glaetten(l,3)) cv2.imshow("Lena, glatter", glaetten(l,5)) cv2.imshow("Lena, glattest", glaetten(l,9)) cv2.imshow("Lena, Laplace", laplace(l)) cv2.imshow("Lena, Gradient", gradient(l)) cv2.waitKey(0) return 0 if __name__ == '__main__': main()