A matrix([[1, 2], [3, 4]])

Werbung
Vorlesung Grundlagen der Videotechnik
Gerald Schuller
Gerald. [email protected]
Assistent: Martin Herrmann
Webseite www.tu-ilmenau.de/mt
-> Lehrveranstaltungen
-> Bachelor für MT
-> Grundlagen der Videotechnik
Weiterhin haben wir eine Moodle2 Seite unter:
moodle2.tu-ilmenau.de, unter: EI - Fachgebiet Angewandte
Mediensysteme- Grundlagen der Videotechnik.
Zu Moodle2 und diese Vorlesung sollte sich jeder Teilnehmer
registrieren, um Zugang zu erhalten, und für die
gegenseitige Kommunikation.
Seminare: Die Seminare basieren auf dem Raspberry Pi
Kleinrechner, mit Raspian Linux als Betriebssystem.
Sie sind 2-woechentlich, mit Hausaufgaben in Python.
Die Punkte aus diesen Hausaufgaben zaehlen zu 30% in die
Endnote, 70% von der Abschlussklausur.
Das erste Seminar mit Hausaufgabe dient der Einübung oder
Auffrischung von Python . Jeder sollte entweder einen Raspberry
Pi mit Linux oder einen Rechner mit Linux darauf haben. Kein
Windows, das resultiert in zuvielen Software Problemen. Linux
laesst sich auch neben Windows leicht installieren, empfohlen ist
das beliebte Ubuntu Linux.
Anleitung z.B.:
http://www.everydaylinuxuser.com/2014/05/install-ubuntu-1404-alongside-windows.html
oder:
http://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/
In den Seminaren und in Moodle2 werden ProgrammierHausaufgaben aufgegeben, die im jeweils folgenden Seminar
kontrolliert und bepunktet werden.
Es gibt kleine Aufgaben im System Moodle2, die zu 25% zu den
Hausaufgaben zählen (im System anmelden), und die wöchentlich
nach den Vorlesungen aufgegeben werden, und nach einer Woche
fertig sein müssen.
Diese Aufgaben sind ein integraler Bestandteil der Veranstaltung.
Nur dadurch bekommt man die nötige Übung, um die
erforderlichen Fertigkeiten zum Bau von Video-Systemen zu
erwerben.
Die Veranstaltung hat zusammen 4 Leistungspunkte. Pro LP ist mit
2-3 Stunden Aufwand pro Woche zu rechnen, also zusammen
etwa 8-12 Stunden pro Woche.
Beachte: Abzüglich ca. 3 Stunden für die Vorlesungs- und
Seminartermine verbleiben also 5-9 Stunden pro Woche für die
Hausaufgaben, also ca. 1 Arbeitstag pro Woche!
Beachte: Die Skripten aus dem Copyshop sind nicht auf dem
aktuellen Stand. Auf dem Aktuellen Stand sind die Folien auf
Moodle2 (und evtl. der Webseite).
Beachte: Die Folien sollen kein Lehrbuch ersetzen, sondern sind
Erklaerungshilfe fuer die Vorlesung. Zum Sebststudium sind in den
Folien wiederholt Verweise auf Buecher und Webseiten.
Die Folien sind absichtlich im Editiermodus gehalten, weil sie wie
eine Tafel funktionieren sollen. Auf die Weise koennen wir flexibel
auf Fragen von Studenten eingehen, und die Antworten gleich
mit einpflegen. Einer der Hauptzwecke der Vorlesung soll sein,
Fragen zu beantworten.
Die neuesten Versionen der Folien erscheinen dann auf der
Vorlesungs-Webseite bzw. unter Moodle.
Ziel dieses Kurses:
-Die Techniken und Prinzipien der drahtlosen Übertragung von
Video-Streams und Audio-Streams kennen lernen und erfahren.
-Am Beispiel Raspberry Pi: Übertragung eines Bildes mittels Schall
Inhaltlicher Überblick:
-Geschichte, Python Einleitung
-Python Grundlagen
-Psycho-Physik ( Eigenschaften des Auges,
Sehen; Ohr: Hören)
-Digitale Filter
-Digitale Übertragung
- Steinzeit: Höhlenmalerei
-> Abbildung von 3 Dimensionen auf
eine 2-Dimensionale Fläche.
- Gehirn interpoliert daraus die ursprüngliche
3- Dimensionale Szenerie
- Römischer Reich: Wandzeitungen,
an öffentlichen Plätzen: Massenmedium
- Buchdruck: weitere Verbreitung
Neuzeit: Lochkamera
- Abbildung von 3D auf 2D durch Apparatur, nicht mehr von Hand.
– später: Lochplatte durch Linse für mehr Licht ersetzt
-> Zerlegung des Bildes in viele Bildpunkte, die einzeln
übertragen werden.
-> Gehirn/Auge interpoliert die einzelnen Bildpunkte zu
zusammen hängendem Bild
-> Aber unpraktisch, zu aufwändig.
-> Bild wird zeilenweise abgetastet und wieder aufgebaut.
-> Prinzip was benutzt wird.
Nicht nur örtliche Interpolation, sondern
auch zeitliche Interpolation!
D.h. schnelles Flackern wird wie konstantes
Licht wahrgenommen.
-> dadurch: Reduktion des Aufwands.
Begrenzung dieses mechanischen Systems: einige zig Zeilen
und ein paar Bilder pro Sekunde, also geringe Qualitaet.
Übertragung:
Hohe Trägerfrequenzen benötigt, wegen benötigter
Bandbreite.
TV analog ca. 5,5 Mhz Bandbreite
UHF: ca. 470-690 MHz, entspr. ca. 200 MHz, ca. 40 TV
Kanäle
S/W Fernsehen,
USA: 30, 40er Jahre
Deutschland breiter eingeführt in 50er Jahren
Farbfernsehen
-> Genutzt: Auge hat Rezeptoren nur für
3 verschiedene Grundfarben (RGB: Rot, Grün, Blau)
-> Nur die 3 Grundfarben brauchen übertragen zu werden
-> örtliche und zeitliche Auflösung der Farbwahrnehmung
geringer als bei der Helligkeitswahrnehmung.
-> Benötigte Bandbreite für Farbinformation ist geringer als
bei der Helligkeitsinformation
-> Fernsehen: durch die geringere Bandbreite ist es möglich,
die Farbinformation in die Lücken des S/W-Signals
einzubetten.
-> Farbfernsehen ist rückwärts kompatibel zum S/W
Fernsehen.
-> sehr wichtig für die Einführung eines neuen Systems.
Digitales Fernsehen:
DVB: Digital Video Broadcast:
– nicht rückwärts kompatibel
- aber: es benutzt die gleichen Frequenzen und Kanäle wie
das analoge Fernsehen
- Set-top Box zur Konvertierung ins analoge Fernsehen ist
relativ preisgünstig.
– Thüringen: Nov. 2005, Berlin war 2002
- Nutzt die höhere Informationsdichte der digitalen
Übertragung: 1 analoges Programm wird durch 3-5 digitale
Programme ersetzt.
– Auflösung analoges Fernsehen etwa wie VGA
Genau:
50 Hz Länder: 625 Zeilen, 25 Bilder pro Sek.
60 Hz Länder: 525 Zeilen, 30 Bilder pro Sek.
Stromversorgung Anzahl der
220 V, 50 Hz
Zeilen Pro
110 V, 60 Hz
Sekunde
ist ähnlich
-> Maßgeblich für
die ÜbertragungsBandbreite
Zusammenhang mit
Netzfrequenz um
Störungen
im Bild zu
vermeiden.
Digitales Fernsehen, HDTV
High Definition TV
- Ein analoger Kanal wird nicht durch 3-5 digitale Kanäle
gleicher Auflösung ersetzt, sondern durch einen digitalen Kanal
höherer Auflösung
- Auflösung etwa wie moderne Computermonitore. HDTV
Fernseher bereits erhältlich (siehe z.B. letzte Funkausstellung)
Betrieb: öffentlich in USA, Deutschland: Sky (ehem. Premiere).
– Satellitenprogramme: vielfältiges digitales Angebot.
– Technik für Aufnahme, Übertragung, Wiedergabe
vorhanden.
Monitore, Farbmischung:
Beispiel, Nahaufnahme eines LCD Monitors oder TV
Bildschirms (aufgenommen mit einem USB Mikroskop):
1 Pixel
Weitere Vergroesserung:
Beachte: Jedes Pixel („Picture Element“) besteht aus 3
kurzen Streifen in den Farben Blau, Gruen, Rot. Durch
Farbmischung, je nach anteiliger Stärke der 3 Farben,
entstehen die unterschiedlichen Farben der Pixel, und jedes
Pixel stellt einen kleinen Farbpunkt unseres Bildes dar.
Das Prinzip der Farbmischung findet man auch beim
Buchdruck. Beispiel einer Mikroskopaufnahme eines
gedruckten Farbbildes, gleiches Prinzip:
Kurze Python Einführung mit Numpy und Scipy
Python ist eine mächtige, Objektorientierte
Programmiersprache. Gleichzeitig braucht sie nicht
compiliert zu werden, sondern kann zur Laufzeit
interpretiert werden. Sie hat auch ein praktisches
Kommandozeilen Interface, wodurch einfaches
Ausprobieren von ein paar Programmzeilen möglich
wird. Zusätzlich gibt es eine enorme Vielfalt von
Programmpaketen oder Libraries dafür, und alles in
OpenSource! Durch den Kommandozeilen Interpreter
„ipython“ und die Pakete „Numpy“, „Scipy“ und
„matplotlib“ wird die Bedienung sehr ähnlich zu
Matlab. Matlab ist allerdings ein kommerzielles,
kostenpflichtiges Programm. Zusätzlich ist Python
aber mächtiger, es kann z.B. Audio- und VideoStreams in Echtzeit verarbeiten, was in Matlab nicht
geht.
Python Numpy und Scipy sind Pakete, die sehr ähnlich
zu Matlab sind, die generell in der Digitalen
Signalverarbeitung, und damit auch für die digitale
Videotechnik, zur Berechnung, Simulation und
Implementierung von Algorithmen eingesetzt
werden.
Wegen der weiten Verbreitung und der Wichtigkeit der
Fähigkeit in Matlab, bzw. hier in Numpy und Scipy
programmieren zu können, wird es auch für unsere
Hausaufgaben verwendet.
Octave ist die Open Source Version von Matlab,
allerdings langsamer und etwas weniger komfortabel.
Für (nicht-Echtzeit und nicht-Video) Berechnungen ist
es immer noch sehr komfortabel, allerdings werden
wir hier wegen der Einschraenkungen Python nutzen.
Numpy und Scipy sind Pakete, die unter Python
laufen, OpenSource sind, und auch auf dem Raspberry
Pi aus dem Software Center direkt installiert werden
koennen, als python-numy und python-scipy. Da sie
unter Python laufen, haben sie auch die erweiterten
Faehigkeiten von Python, wie z.B. Video Streaming
fuer Aufnahme und Wiedergabe, was wir nutzen
wollen.
Die komfortabelste und zu Matlab am aehnlichste
Umgebung erhaelt man mit iPython und der Option –
pylab, die automatisch numpy und Matplotlib laed,
und was auch unter dem Raspberry Pi laeuft.
Am Anfang die Installation von ipython im Linux
Konsolenfenster mit:
sudo apt­get install ipython
Start aus dem Konsolenfenster mit:
ipython ­­pylab
Die Option „--pylab“ ist aequivalent mit dem Aufruf
ipython
und dann innerhalb von ipython die Importe der
Libraries:
from numpy import *
from matplotlib.pyplot import *
Die meisten interessanten mathematischen
Funktionen sind in der Library „Numpy“. Wir koennen
auch sie in python mit
import numpy as np
importieren.
Das „as np“ bedeutet dass wir die Library „numpy“
nun als „np“ in abgekuerzter Form referenzieren
koennen, was einfach eine Vereinfachung beim
Schreiben bedeutet. Diese Referenzierung der Library
hat den Vorteil dass wir gleichnamige Funktionen aus
verscheidenen Libraries so unterscheiden koennen.
Wenn wir alle Funktionen in numpy ohne
Referenzierung haben wollen (wenn keine Duplikate
aus anderen Libraries da sind), nehmen wir
stattdessen
from numpy import *
Interessante Befehle:
help( funktionsname) : Hilfefunktion fuer den
Befehl
Beispiel:
help(sin)
In Python wird ein Bild wird als Array dargestellt, ein
Pixel besteht aus 3 Werten (je 1 Wert pro Grundfarbe).
Beispiel fuer die Eingabe eines Arrays (eines
Schwarz/Weiss Bildes) in Python:
C=array([[1,2],[3,4]])
oder auch, da es Teil der Library „numpy“ ist:
C=numpy.array([[1,2],[3,4]])
Fuer ein Farbbild erscheint fuer jeden Pixel nicht nur
ein Helligkeitswert, sondern ein array aus 3
Intensitaetswerten, einer pro Grundfarbe.
Beispiel:
C=numpy.array([[[1,2,3],[2,3,4]],[[3,4,5],
[4,5,6]]])
Die Intensitaeten der Grundfarben des Pixels an der
Position [0,0] (oben links) erhaelt man dann mit:
C[0,0] array([1, 2, 3])
Vom Pixel der Position [0,0] erhaelt man die
Intensitaet der Grundfarbe Rot mit:
C[0,0,2] 3
Achtung: Python unterscheidet zwischen Arrays und
Matrizen.
Beispiel fuer die Eingabe einer 2x2 Matrix in Python:
A=matrix([[1, 2],[3, 4]])
oder auch, da es Teil der Library „numpy“ ist:
A=numpy.matrix([[1, 2],[3, 4]])
A
matrix([[1, 2],
[3, 4]])
B=matrix([[5, 6],[7, 8]]) B
matrix([[5, 6],
[7, 8]])
Addition zweier Matrizen:
A+B matrix([[ 6, 8],
[10, 12]])
Multiplikation:
A*B matrix([[19, 22],
[43, 50]])
Elementweise Multiplikation:
multiply(A,B) matrix([[ 5, 12],
[21, 32]])
Inverse einer Matrix:
inv(A) matrix([[-2. , 1. ],
[ 1.5, -0.5]])
Alternative Schreibweise fuer die Matrix-Inversion:
A.I
Wir koennen uns die Dimension eines Arrays oder
einer Matrix anzeigen lassen mit der Funktion
„shape“:
shape(A)
oder
A.shape
Beispiel eines einfachen Python Skriptes:
Die Funktion y=2*a+3*b soll als Skript programmiert
werden. Erzeuge eine Datei mit der Endung .py z.B.:
testscript.py
Dazu ist ein sog. Text-Editor nötig. Ein gängiger
empfehlenserter Editor, der auch auf dem Raspberry
Pi läuft, ist „gedit“. Ggf. muss er isntalliert werden mit:
sudo apt­get install gedit
Den folgenden Inhalt tippen wir dort ein:
#Kommentar: Dies ist eine Testskript
a=4
b=5
y=2*a+3*b;
print y
Dies speichern wir dann (mit „save as“) ab unter dem
namen „testscript.py“.
Im Konsolen Fenster (auch „shell“) genannt, tippen wir
dann:
python testskript.py
Die Ausgabe ist dann:
>>23
Alternativ koennen wir auch innerhalb von Python
eine Funktion definieren.
Dazu schreiben wir eine Datei mit namen
„testfunktion.py“, die unsere Funktionen enthaelt (es
koennen auch mehrere sein), mit dem Inhalt:
def meinefunktion(a,b): """dies ist der help Text zur testfunktion...""" y=2*a+3*b; return y
Beachte die konstante Einrueckung unterhalb der
Funktionsdeklaration: Die hat in python die Funktion
von Klammern.
Dann starten wir ipython (oder haben es schon
gestartet):
ipython ­­pylab
In ipython koennen wir unsere Funktion(en)
importieren mit:
import testfunktion
Nun ist unsere Funktion Teil unserer eigenen Library
„testfunktion“. Unsere Funktion rufen wir in iPython
dann auf mit (bei a=7 und b=8):
testfunktion.meinefunktion(7,8)
Out[6]: 38
Beachte das vorausfuegen von „testfunktion“. Das hat
den Vorteil dass wir mehrere gleichlautende
Funktionen aus mehreren Dateien („Libraries“)
unterscheiden koennen.
Den Hilfetext unserer Funktion bekommen wir mit:
help(testfunktion.meinefunktion)
Help on function meinefunktion in module
testfunktion:
meinefunktion(a, b)
dies ist eine testfunktion...
Um das Vorausfuegen des Library Namens
„testfunktion“ zu vermeinden, wenn wir sicher sind
dass es keine Namenskonflikte gibt, koennen wir so
importieren:
from testfunktion import *
Dann erreichen wir unsere Funktion einfach mit:
meinefunktion(7,8)
38
Herunterladen