Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss16:einteilen [2016/09/15 15:41] henrikfrenzel angelegt |
ss16:einteilen [2016/09/23 14:43] (aktuell) victorbremer |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | <code python> | ||
import numpy as np | import numpy as np | ||
from scipy import misc | from scipy import misc | ||
Zeile 4: | Zeile 5: | ||
def filtern(bild, zeile, spalte, eps): | def filtern(bild, zeile, spalte, eps): | ||
- | spalten=[spalte] | + | spalten=[spalte] # speichert die Spalten in einer Liste |
- | zeilen= [zeile] | + | zeilen= [zeile] # speichert die Zeilen in einer Liste |
while(True): | while(True): | ||
summeZeilenmax=0 | summeZeilenmax=0 | ||
Zeile 11: | Zeile 12: | ||
summeSpaltenmax=0 | summeSpaltenmax=0 | ||
summeSpaltenmin=0 | summeSpaltenmin=0 | ||
- | for l in zeilen: | + | 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): | if (bild[l, max(spalten)]-eps <= 0): | ||
summeZeilenmax +=1 | summeZeilenmax +=1 | ||
if (bild[l, min(spalten)]-eps <= 0): | if (bild[l, min(spalten)]-eps <= 0): | ||
summeZeilenmin +=1 | summeZeilenmin +=1 | ||
- | for k in spalten: | + | 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): | if (bild[max(zeilen),k]-eps <= 0): | ||
summeSpaltenmax +=1 | summeSpaltenmax +=1 | ||
if (bild[min(zeilen),k]-eps <= 0): | if (bild[min(zeilen),k]-eps <= 0): | ||
summeSpaltenmin +=1 | summeSpaltenmin +=1 | ||
- | if summeZeilenmax != len(zeilen): | + | 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) | spalten.append(max(spalten)+1) | ||
- | if summeZeilenmin != len(zeilen): | + | 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) | spalten.append(min(spalten)-1) | ||
- | if summeSpaltenmax != len(spalten): | + | 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) | zeilen.append(max(zeilen)+1) | ||
- | if summeSpaltenmin != len(spalten): | + | 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) | zeilen.append(min(zeilen)-1) | ||
- | if (summeSpaltenmax+summeSpaltenmin) == 2* len(spalten) and (summeZeilenmax+summeZeilenmin)== 2* len(zeilen): | + | 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() | zeilen.sort() | ||
spalten.sort() | spalten.sort() | ||
Zeile 36: | Zeile 37: | ||
def partitionierung(bild, eps=8): | def partitionierung(bild, eps=8): | ||
bilder=[] | bilder=[] | ||
- | #plt.imshow(bild, cmap="gray") | + | #plt.imshow(bild, cmap="gray") #Befehle zum Anzeigen des Gesamtbildes |
#plt.show() | #plt.show() | ||
#print bild.shape | #print bild.shape | ||
- | for i in range(bild.shape[1]): | + | for i in range(bild.shape[1]): # sucht einen Punkt des Bildes, der über dem Grenzwert liegt |
for j in range(bild.shape[0]): | for j in range(bild.shape[0]): | ||
if bild[j,i]- eps > 0: | if bild[j,i]- eps > 0: | ||
Zeile 45: | Zeile 46: | ||
teilbild = np.zeros(((len(zeilen)),(len(spalten)))) | teilbild = np.zeros(((len(zeilen)),(len(spalten)))) | ||
for p in range(len(zeilen)): | for p in range(len(zeilen)): | ||
- | for u in range(len(spalten)): | + | 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]] | teilbild[p,u] = bild[zeilen[p],spalten[u]] | ||
- | bild[zeilen[p],spalten[u]]=0 | + | bild[zeilen[p],spalten[u]]=0 # löscht das Teilbild aus dem orignial Bild |
bilder.append(teilbild) | bilder.append(teilbild) | ||
- | #plt.imshow(teilbild,cmap="gray") | + | #plt.imshow(teilbild,cmap="gray") # Befehle zum anzeigen des Teilbildes |
#plt.show() | #plt.show() | ||
return bilder | return bilder | ||
- | if __name__=="__main__": | + | if __name__=="__main__": # Aufruf der Funktion zum partitionieren mit Testbild |
bild=misc.imread("1+2.png") | bild=misc.imread("1+2.png") | ||
partitionierung(bild) | partitionierung(bild) | ||
+ | </code> |