Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss16:einteilen
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
 
def filtern(bild, zeile, spalte, eps):
	spalten=[spalte]  # speichert die Spalten in einer Liste
	zeilen= [zeile]   # speichert die Zeilen in einer Liste
	while(True):
		summeZeilenmax=0
		summeZeilenmin=0
		summeSpaltenmax=0
		summeSpaltenmin=0
		for l in zeilen: # Überprüft für alle Zeilen, ob sie beim Maximum/Minimum der Spalten unter dem Grenzwert liegen
			if (bild[l, max(spalten)]-eps <= 0):
				summeZeilenmax +=1
			if (bild[l, min(spalten)]-eps <= 0):
				summeZeilenmin +=1
		for k in spalten:  # Überprüft für alle Spalten, ob sie beim Maximum/Minimum der Zeilen unter dem Grenzwert liegen
			if (bild[max(zeilen),k]-eps <= 0):
				summeSpaltenmax +=1
			if (bild[min(zeilen),k]-eps <= 0):
				summeSpaltenmin +=1
		if summeZeilenmax != len(zeilen): # fügt zur Liste der Spalten die nächste Spalte hinzu, falls die größte Spalte nicht komplett unter dem Grenzwert liegt
			spalten.append(max(spalten)+1)
		if summeZeilenmin != len(zeilen):# fügt zur Liste der Spalten die voherige Spalte hinzu, falls die kleinste Spalte nicht komplett unter dem Grenzwert liegt
			spalten.append(min(spalten)-1)
		if summeSpaltenmax != len(spalten): # fügt zur Liste der Zeilen die nächste Zeile hinzu, falls die größte Zeile nicht komplett unter dem Grenzwert liegt
			zeilen.append(max(zeilen)+1)
		if summeSpaltenmin != len(spalten):  # fügt zur Liste der Zeilen die voherige Zeile hinzu, falls die kleinste Zeile nicht komplett unter dem Grenzwert liegt
			zeilen.append(min(zeilen)-1)
		if (summeSpaltenmax+summeSpaltenmin) == 2* len(spalten) and (summeZeilenmax+summeZeilenmin)== 2* len(zeilen):  # falls der komplette Rahmen unter dem Grenzwert liegt, werden die sortierten Zeilen und Spalten übergeben
			zeilen.sort()
			spalten.sort()
			return zeilen, spalten
 
def partitionierung(bild, eps=8):
	bilder=[]
	#plt.imshow(bild, cmap="gray") #Befehle zum Anzeigen des Gesamtbildes
	#plt.show()
	#print bild.shape
	for i in range(bild.shape[1]):  # sucht einen Punkt des Bildes, der über dem Grenzwert liegt
		for j in range(bild.shape[0]):
			if bild[j,i]- eps > 0:
				zeilen,spalten = filtern(bild, j, i, eps)
				teilbild = np.zeros(((len(zeilen)),(len(spalten))))
				for p in range(len(zeilen)):
					for u in range(len(spalten)):  # nimmt die Werte aus dem original Bild und schreibt sie in das Teilbild
						teilbild[p,u] = bild[zeilen[p],spalten[u]]
						bild[zeilen[p],spalten[u]]=0  # löscht das Teilbild aus dem orignial Bild
				bilder.append(teilbild)
				#plt.imshow(teilbild,cmap="gray")  # Befehle zum anzeigen des Teilbildes
				#plt.show()
	return bilder
 
if __name__=="__main__":  # Aufruf der Funktion zum partitionieren mit Testbild
	bild=misc.imread("1+2.png")
	partitionierung(bild)
ss16/einteilen.txt · Zuletzt geändert: 2016/09/23 14:43 von victorbremer