Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1617:bilder_zu_bildern:protokolle:170216

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1617:bilder_zu_bildern:protokolle:170216 [2017/03/24 14:44]
isabelschwermer
ws1617:bilder_zu_bildern:protokolle:170216 [2017/04/06 20:21] (aktuell)
Chai_Tee.95-Cara
Zeile 1: Zeile 1:
 === Protokoll vom 16. Februar 2017 === === Protokoll vom 16. Februar 2017 ===
-Unser aktuelles ​Programm:+ 
 +Da heute der letzte Termin ist, haben wir uns vor allem damit beschäftigt,​ das Programm ​zu säubern und ein paar Kleinigkeiten zu verbessern. Somit ist folgender Code unsere finale Version, ohne kreative Ausgabe (Für die finale Version mit kreativer Ausgabe, siehe [[ws1617:bilder_zu_bildern:​protokolle:​170223|Protokoll vom Blocktermin (23./24. Februar 2017)]]).
 <code python> <code python>
 #​!/​usr/​bin/​env python #​!/​usr/​bin/​env python
Zeile 9: Zeile 10:
 from scipy import misc, ndimage, signal from scipy import misc, ndimage, signal
 import cv2 import cv2
-import scipy.misc as misc 
 import skimage.color as color import skimage.color as color
 import turtle import turtle
 import pickle import pickle
- 
-laenge=int(raw_input("​Geben Sie die Laenge der Niveaulinien an: ")) 
-percentile=int(raw_input("​Geben Sie die Staerke der Kanten an(max bis 100): ")) 
-  
-#​bild=misc.imread('​Heuchera.jpg'​) # bild einlesen 
-  
-cap = cv2.VideoCapture(0) #bei kamera bild wird zu bild2 
-res, bild = cap.read() ​   #bei kamera 
-  
-imgray =color.rgb2gray(bild) 
-  
 from skimage.measure import find_contours from skimage.measure import find_contours
 +
 +minimum=int(raw_input("​Minimum:​ "))
 +percentile=int(raw_input("​Staerke der Kanten (max bis 100): "))
 +
 +cap = cv2.VideoCapture(0)
 +res, bild = cap.read()
 +imgray = color.rgb2gray(bild)
 +
 res = [] res = []
-for value in np.linspace(np.min(imgray),​ np.max(imgray),​10):+for value in np.linspace(np.min(imgray),​ np.max(imgray),​30):
     res.extend(find_contours(imgray,​value))     res.extend(find_contours(imgray,​value))
-  + 
-cap.release() ​#wenn kamera +cap.release()  
- +
 def Isolux(): def Isolux():
-    #​a_als_farbbild = cv2.cvtColor(a,​ cv2.COLOR_GRAY2BGR) #a ist ein s/w-bild, um farbe überhaupt anzeigen zu können, wird es in ein bgr konvertiert 
     res2 = []     res2 = []
     for cont in res:     for cont in res:
-        if cont.shape[0]>​laenge#and ... Fkt.Check +        if cont.shape[0]>​minimum
-            for i,j in cont: +
-                cv2.circle(bild,​(int(round(j)),​int(round(i))),​1,​(1,​0,​0),​-1)+
             res2.append(cont)             res2.append(cont)
-    #​cv2.imshow("​Bild:",​bild) 
-    #​cv2.waitKey(0) 
-    #​cv2.destroyAllWindows() 
     return res2     return res2
-  + 
-res2 = Isolux() ​                ​# unsere Liste der gewünschten Contours res2 (ausgefiltert+res2 = Isolux() #unsere Liste der gewünschten Contours res2 (zu Kurze ausgefiltert) 
-  +
-#print res2                      # Contouren! +
-  +
-#for cont in res2: +
- # ​  print cont.shape ​           # Contourenanzahl +
-  +
-#​Kantenprogramm +
-import numpy as np +
-import matplotlib.pyplot as plt +
-from scipy import misc, ndimage +
-import cv2 +
-#​bild=misc.imread('​Heuchera.jpg',​mode='​F',​+
- +
 bild=ndimage.filters.gaussian_filter(bild,​1.5) bild=ndimage.filters.gaussian_filter(bild,​1.5)
  
-# x +b=ndimage.filters.sobel(imgray,​ axis=-1) #​Verschiebungsbild x 
-b=ndimage.filters.sobel(imgray,​ axis=-1) ​        ​#​Verschiebungsbildx +b2=ndimage.filters.sobel(imgray,​ axis=0) #​Verschiebungsbild y 
-  + 
-# y +a=np.sqrt(b[1:,:​]**2+b2[:​-1,:​]**2) #b und b2 werden zum Kantenbild a verrechnet 
-b2=ndimage.filters.sobel(imgray,​ axis=0) ​         #​Verschiebungsbild+
-  +
-a=np.sqrt(b[1:,:​]**2+b2[:​-1,:​]**2) # b und b2 werden zum Kantenbild a verrechnet ​ #​Kantenbild +
- +
 median2 = np.percentile(a,​percentile) median2 = np.percentile(a,​percentile)
 z = a.shape[0] #y z = a.shape[0] #y
 z2 = range(0,z) z2 = range(0,z)
- +
 s = a.shape[1] #x s = a.shape[1] #x
 s2 = range(0,s) s2 = range(0,s)
- +
 alle_koordinaten = [] alle_koordinaten = []
 for i in z2: for i in z2:
         for j in s2:         for j in s2:
                 alle_koordinaten.append((i,​j))                 alle_koordinaten.append((i,​j))
-  + 
-kandidaten = [ p for p in alle_koordinaten ​  if a[p[0],​p[1]]>​median2 ​  ​] ​#​Rumspielbar...mit Schwellenwert +kandidaten = [ p for p in alle_koordinaten ​  if a[p[0],​p[1]]>​median2 ​  ] 
-  + 
-  +contouren = res2 #Liste in Listen 
-def kurvenversuch(): ​  #Nur zum Veranschaulichen! +kant = kandidaten ​            
-        a_als_farbbild = cv2.cvtColor(a,​ cv2.COLOR_GRAY2BGR) #a ist ein s/w-bild, um farbe überhaupt anzeigen zu können, wird es in ein bgr konvertiert +
-        for i,j in kandidaten:​ +
-                cv2.circle(a_als_farbbild,​(j,​i),​1,​(1,​0,​0),​-1) +
-        cv2.imshow("​1:",​a_als_farbbild) +
-        cv2.waitKey(0) +
-        cv2.destroyAllWindows() +
-  +
-contouren = res2                   ​#Liste in Listen +
-kant = kandidaten ​                 #hat Schwellenwert +
-                                   #Kantenbild = a+
 Schwellw = np.median(a) Schwellw = np.median(a)
 beste_Werte = [] beste_Werte = []
- +
 def check(cont, Kant): def check(cont, Kant):
-    hell = 0.                      ​#auf 0 gesetzt+    hell = 0.                      ​
     for pkt in cont:     for pkt in cont:
-        try:                       ​# try aufgrund der Rundungsfehlerüber 319 +        try: #try, da es hier oft zu Rundungsfehlern kommt 
-            hell += a[int(round(pkt[0])),​int(round(pkt[1]))] ​ #​werden aufgerechnet+            hell += a[int(round(pkt[0])),​int(round(pkt[1]))]
         except:         except:
             pass             pass
-  
     if hell > Schwellw*len(cont):​     if hell > Schwellw*len(cont):​
             return True             return True
-  
     else:     else:
             return False             return False
- +
 for cont in contouren: for cont in contouren:
     if check(cont, a):     if check(cont, a):
         beste_Werte.append(cont)         beste_Werte.append(cont)
-  
     else:     else:
         pass         pass
-  + 
-def smooth(kont): ​#?+def smooth(kont):​
         for i in range(1,​len(kont)-1):​         for i in range(1,​len(kont)-1):​
                 kont[i]=1/​3.*(kont[i-1]+kont[i]+kont[i+1])                 kont[i]=1/​3.*(kont[i-1]+kont[i]+kont[i+1])
-  + 
-class MyTurtle(turtle.Turtle): ​#?+class MyTurtle(turtle.Turtle):​
         def turn_and_move(self,​p):​         def turn_and_move(self,​p):​
                 self.setheading(self.towards(p))                 self.setheading(self.towards(p))
                 self.goto(p)                 self.goto(p)
- +
 class turtle_world(object):​ class turtle_world(object):​
     def __init__(self,​bild):​ #pencv speichert die Bilder als BGR!     def __init__(self,​bild):​ #pencv speichert die Bilder als BGR!
Zeile 132: Zeile 96:
         self.xsize=bild.shape[1]         self.xsize=bild.shape[1]
         self.ysize=bild.shape[0]         self.ysize=bild.shape[0]
-        turtle.screensize(self.xsize,​self.ysize) +        turtle.screensize(self.xsize,​self.ysize) ​
-        misc.imsave("​zwischenbild_.gif",​bild) +
-        #​turtle.bgpic("​zwischenbild_.gif"​) ​         #Setzt das Hintergrudbild weg+
         self.t=MyTurtle()         self.t=MyTurtle()
         self.t.pensize(1)         self.t.pensize(1)
-        self.t.pencolor("​blue")+        self.t.pencolor("​black")
         self.t.shape("​turtle"​)         self.t.shape("​turtle"​)
         self.t.speed(0)         self.t.speed(0)
-        self.t.tracer(0,​delay=0) ​      #nur 0 für Mac turtle, 1 bei normal +        self.t.tracer(0,​delay=0) 
- +
     def image_to_turtle(self,​point):​     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])         return (point[1]-(self.xsize//​2),​(self.ysize//​2)-point[0])
- +
     def turtle_to_image(self,​point):​     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])         return np.array([self.ysize//​2-point[1],​ point[0]+self.xsize//​2])
-  +       
-#​______________________ +
-  +
- +
 def bewege_turtle_auf_bild(bild,​kontouren):​ def bewege_turtle_auf_bild(bild,​kontouren):​
-    '''​Lässt Turtle auf Hintergrundbild laufen. + tw=turtle_world(bild) 
-    Dabei ist bild ein BGR-Bild (opencv-Farbbild) + 
-    und kontouren eine Liste von Listen von Punkten.'''​ + for kontour in kontouren:​ 
-  + tw.t.penup() 
-    ​tw=turtle_world(bild) + for p in kontour: 
-  + tw.t.turn_and_move(tw.image_to_turtle(p)) 
-    for kontour in kontouren: ​      #mac turtle:Hier Zähler einbauen, der alle 20. Konturen einmal zeichnet, damit es nicht zu schnell geht + tw.t.pendown() 
-        tw.t.penup() + turtle.update() 
-        for p in kontour: + 
-            tw.t.turn_and_move(tw.image_to_turtle(p)) + no = int(raw_input("​Geben Sie eine natuerliche Zahl ein: ")) 
-            tw.t.pendown() + m = np.array([[0,​-1],​[1,​0]]) 
-        turtle.update() ​            ​#nur  bei Mac turtle + 
- + l = [] 
 + l2 = [] 
 + 
 + if no > 0: 
 + for i in range(no):​ 
 + tw.t.pendown() 
 + pos = turtle.position() 
 + gradient = np.array((b[int(pos[0]),​int(pos[1])],​b2[int(pos[0]),​int(pos[1])])) ​#b 0 1 b2 0 1 
 + winkel = np.arctan2(gradient[0],​[1])*180/​np.pi 
 + tw.t.setheading(winkel+90) 
 + tw.t.pencolor("​red"​) 
 + tw.t.pensize(2) 
 +  
 + tw.t.fd(50) 
 + tw.t.lt(45) 
 + tw.t.fd(50) 
 +  
 + l.append(pos) 
 + else: 
 + print "Das ist keine natuerliche Zahl!"​ 
 +  
 + turtle.update() 
 def main(): def main():
-        #​l=misc.ascent() + bild_farbbild=cv2.cvtColor(np.uint8(imgray),​cv2.cv.CV_GRAY2BGR) 
-        ​bild_farbbild=cv2.cvtColor(np.uint8(imgray),​cv2.cv.CV_GRAY2BGR) + kontouren=beste_Werte 
-        #​kontour=[[50,​50],​[70,​400],​[200,​100],​[300,​300]] #hier Konturen übergeben?​ + bewege_turtle_auf_bild(bild_farbbild,​kontouren) 
-        ​kontouren=beste_Werte + return 0 
-  + 
-        ​bewege_turtle_auf_bild(bild_farbbild,​ kontouren) +main()
-        return 0 +
-  +
-if __name__ == '​__main__':​ +
-        ​main()+
 </​code>​ </​code>​
  
 Ergebnis: Ergebnis:
-{{feb_16.png}}+{{feb_16.png}} ​\\ 
 + 
 +Am Ende haben wir uns außerdem Gedanken darüber gemacht, wie man die Ausgabe gestalten kann. Dem wollen wir uns dann am Blocktermin zuwenden.
ws1617/bilder_zu_bildern/protokolle/170216.1490363041.txt.gz · Zuletzt geändert: 2017/03/24 14:44 von isabelschwermer