Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1314:bildoperationen.py

bildoperationen.py

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()
ws1314/bildoperationen.py.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)