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/02/23 10:22]
Chai_Tee.95-Cara
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
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
- 
-#​Niveaulinien,​ bzw. Contours-Programm ; Kamera einlesen 
 import numpy as np import numpy as np
 import matplotlib.pyplot as plt import matplotlib.pyplot as plt
 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 pickle
 +from skimage.measure import find_contours
  
-laenge=int(raw_input("​Geben Sie die Laenge der Niveaulinien an: ")) +minimum=int(raw_input("​Minimum: ")) 
-percentile=int(raw_input("​Geben Sie die Staerke der Kanten ​an(max bis 100): "))+percentile=int(raw_input("​Staerke der Kanten (max bis 100): "))
  
-#bild=misc.imread('​Heuchera.jpg'bild einlesen+cap cv2.VideoCapture(0) 
 +res, bild = cap.read() 
 +imgray = color.rgb2gray(bild)
  
-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 
 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))
  
-#for cont in res: +cap.release() ​
- # ​  print cont.shape # alte Liste aller Contours! +
- +
-cap.release() ​#wenn kamera+
  
 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)
  
-#​plt.imshow(bild,​cmap=plt.get_cmap('​gray'​)) ​     #Original +b=ndimage.filters.sobel(imgray,​ axis=-1) #​Verschiebungsbild x 
-#​plt.show() +b2=ndimage.filters.sobel(imgray,​ axis=0) #​Verschiebungsbild y
- +
-# x +
-b=ndimage.filters.sobel(imgray,​ axis=-1) ​        ​#​Verschiebungsbildx +
-#​cv2.namedWindow("​Fenster 1") +
-#​cv2.imshow("​Fenster 1",​b) +
- +
-# y +
-b2=ndimage.filters.sobel(imgray,​ axis=0) ​         #​Verschiebungsbildy +
-#​cv2.namedWindow("​Fenster 2") +
-#​cv2.imshow("​Fenster 2",​b2) +
- +
-a=np.sqrt(b[1:,:​]**2+b2[:​-1,:​]**2) # b und b2 werden zum Kantenbild a verrechnet ​ #​Kantenbild +
-#​plt.imshow(a,​cmap=plt.get_cmap('​gray'​)) +
-#plt.show()+
  
-#cv2.waitKey(0) +a=np.sqrt(b[1:,:​]**2+b2[:​-1,:​]**2) #b und b2 werden zum Kantenbild a verrechnet
-#cv2.destroyAllWindows()+
  
 median2 = np.percentile(a,​percentile) median2 = np.percentile(a,​percentile)
Zeile 95: Zeile 56:
                 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
 +kant = kandidaten ​           ​
  
-def kurvenversuch(): ​  #Nur zum Veranschaulichen! 
-        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() 
- 
- 
-#print kandidaten 
- 
-#print len(kandidaten) #​Koordinaten x und y 
-#print len(a) ​         #​Helligkeitswerte 
- 
-#Allg. Aufbau: 
- 
-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
Zeile 136: Zeile 78:
 for cont in contouren: for cont in contouren:
     if check(cont, a):     if check(cont, a):
-        #print cont 
         beste_Werte.append(cont)         beste_Werte.append(cont)
- 
     else:     else:
         pass         pass
  
-#print beste_Werte +def smooth(kont):​
- +
-#turtle mod +
-#​!/​usr/​bin/​env python +
-# -*- coding: utf-8 -*- +
-+
-#  bewegeturtle.py +
- +
-#  This program is free software; you can redistribute it and/or modify +
-#  it under the terms of the GNU General Public License as published by +
-#  the Free Software Foundation; either version 2 of the License, or +
-#  (at your option) any later version. +
-+
-#  This program is distributed in the hope that it will be useful, +
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of +
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ​ See the +
-#  GNU General Public License for more details. +
-+
-#  You should have received a copy of the GNU General Public License +
-#  along with this program; if not, write to the Free Software +
-#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +
-#  MA 02110-1301, USA. +
-+
-+
- +
-import turtle +
-import pickle +
-import cv2 +
-import numpy as np +
-from scipy import misc +
- +
- +
-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))
Zeile 188: 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):​
 + tw=turtle_world(bild)
  
-#​______________________+ for kontour in kontouren:​ 
 + tw.t.penup() 
 + for p in kontour: 
 + tw.t.turn_and_move(tw.image_to_turtle(p)) 
 + tw.t.pendown() 
 + turtle.update()
  
 + no = int(raw_input("​Geben Sie eine natuerliche Zahl ein: "))
 + m = np.array([[0,​-1],​[1,​0]])
  
-def bewege_turtle_auf_bild(bild,​kontouren):​ + l = [] 
-    '''​Lässt Turtle auf Hintergrundbild laufen. + l2 = []
-    Dabei ist bild ein BGR-Bild (opencv-Farbbild) +
-    und kontouren eine Liste von Listen von Punkten.'''​+
  
-    ​tw=turtle_world(bild+ if no > 0: 
- + for i in range(no):​ 
-    ### Hier müsste die Bewegung der Turtle hin + tw.t.pendown() 
- + pos ​turtle.position() 
-    for kontour in kontouren: ​      #mac turtle:Hier Zähler einbauen, der alle 20Konturen einmal zeichnetdamit es nicht zu schnell geht + gradient = np.array((b[int(pos[0]),​int(pos[1])],​b2[int(pos[0]),​int(pos[1])])) ​#b 0 1 b2 0 1 
-        tw.t.penup() + winkel = np.arctan2(gradient[0],[1])*180/​np.pi 
-        for p in kontour: + tw.t.setheading(winkel+90
-            tw.t.turn_and_move(tw.image_to_turtle(p)) + tw.t.pencolor("​red"​) 
-            tw.t.pendown() + tw.t.pensize(2) 
-        turtle.update() ​            #nur  bei Mac turtle+  
 + 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+</​code>​
  
-if __name__ == '​__main__'​+Ergebnis
-        ​main()+{{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.
-</​code>​+
ws1617/bilder_zu_bildern/protokolle/170216.1487841745.txt.gz · Zuletzt geändert: 2017/02/23 10:22 von Chai_Tee.95-Cara