Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1314:turtlemod.py

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1314:turtlemod.py [2014/02/13 12:18]
stefanborn angelegt
ws1314:turtlemod.py [2016/05/10 14:46] (aktuell)
Zeile 1: Zeile 1:
 ====== turtlemod.py ====== ====== turtlemod.py ======
 +
 +Seht euch den Test in main() an, um zu verstehen, wie man das Turtle-Modul benutzt. Die kleine Komplikation,​ die Bildkoordinaten jeweils in Turtle-Koordinaten umrechenen zu müssen, ließ sich leider nicht ohne größeren Aufwand vermeiden.
  
 <code python> <code python>
  
-import ​numpy as np +import ​turtle
-import scipy.signal as sig +
-import scipy+
 from scipy import misc from scipy import misc
 +import pickle  ​
 import cv2 import cv2
 +import numpy as np
  
-def schwarzweiss(bild_grau, schwelle): +def smooth(kont): 
- '''​Stellte ein Schwarzweiss Bild aus einem Grauwertbild her: + for i in range(1,len(kont)-1)
- Alle Punkte mit Grauwert über der Schwelle schwelle bekommen + kont[i]=1/3.*(kont[i-1]+kont[i]+kont[i+1])
- 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): +class MyTurtle(turtle.Turtle): 
- for j in range(0,spalten): +  
- if(bild_grau[i][j] < schwelle): + def turn_and_move(self,p): 
- bildschwarzweiss[i][j] = 0+ self.setheading(self.towards(p)
- else: + self.goto(p) 
- bildschwarzweiss[i][j] = 1. +  
- return bildschwarzweiss+class turtle_world(object):​
  
-def glaetten(bild,n): + def __init__(self,bild): 
- '''​Glaetten durch Faltung'''​ + '''​Richtet ein Turtle-Fenster mit dem Hintergrundsbild bild ein. 
- if n==3: + Die Funktion erwartet ein opencv-Farbbild. Dabei ist zu beachten, 
- return sig.convolve2d(bild, 1/​16.*np.array([[1,2,1],[2,4,2],[1,2,1]]),mode='​same'​+ dass opencv statt RGB die Bilder BGR speichert.'''​ 
- elif n==5: + misc.imsave("​bild_fuer_turtle.gif",​bild[:,:,[2,1,0]]) 
- 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'​+ self.screen=turtle.Screen(
- elif n==9: + self.xsize=bild.shape[1] 
- return sig.convolve2d(bild, (1/792.)\ + self.ysize=bild.shape[0] 
- *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],​\ + turtle.screensize(self.xsize,self.ysize) 
- [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],​\ + turtle.bgpic("​bild_fuer_turtle.gif"​) 
- [1,2,​5,​6,​8,​6,​5,​2,​1]]),mode='same') + self.t=MyTurtle(
- else: + self.t.pensize(2) 
- raise Exception("​Faltung ​mit n=%s nicht implementiert"​%(str(n)))+ self.t.pencolor("​red"​) 
 + self.t.shape("​turtle"​
 +  
 +  
 + def image_to_turtle(self,​point):​ 
 + '''​Rechnet die Koordinaten des Bild-Arrays auf die Turtle-Koordinaten um. 
 + Returns: Koordinatentupel.'''​ 
 +  
 + return ​(point[1]-(self.xsize//​2),(self.ysize//​2)-point[0]) 
 +  
 + def turtle_to_image(self,point)
 + ''​'​Rechnet die Turtle-Koordinaten auf Bild-Array-Koordinaten ​ 
 + um.  
 + Returns: numpy-Vektor ​mit Bildkoordinaten'''​
   
- + return np.array([self.ysize//2-point[1], point[0]+self.xsize//​2]) 
-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(): def main():
- l=misc.lena()/255. + '''​Kleiner Test'''​ 
- cv2.imshow("​Lena",​ l) + l=misc.lena() 
- cv2.imshow("​Lena,​ glatt",​ glaetten(l,3)+ bild_farbbild=cv2.cvtColor(np.uint8(l),cv2.cv.CV_GRAY2BGR
- cv2.imshow("​Lenaglatter",​ glaetten(l,​5)) + tw=turtle_world(bild_farbbild)
- cv2.imshow("​Lena,​ glattest",​ glaetten(l,​9)) +
- cv2.imshow("​Lena,​ Laplace",​ laplace(l)+
- cv2.imshow("​Lena,​ Gradient",​ gradient(l)) +
- cv2.waitKey(0)+
   
 + punkte=[[50,​50],​[70,​400],​[200,​100],​[300,​300]]
 + tw.t.penup()
 + for p in punkte:
 + tw.t.turn_and_move(tw.image_to_turtle(p))
 + tw.t.pendown()
 +
  return 0  return 0
  
 if __name__ == '​__main__':​ if __name__ == '​__main__':​
  main()  main()
 +
 +
  
 </​code>​ </​code>​
ws1314/turtlemod.py.1392290329.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)