TU Chemmnitz

Universitätsrechenzentrum

TU Chemnitz > URZ > Lehre > Mmn > Scripte > Video


Übung: Video


Aufgabe 1:

Schreiben Sie ein kleines Programm, um ein Bild in RGB-Farbrepräsentation in eine Graustufendarstellung der Luminanzkomponente Y zu konvertieren. Die Luminanzdarstellung soll der PAL TV-Norm entsprechen. Beachten Sie, daß ein Computermonitor nur das RGB-Farbmodell darstellen kann. Als Grafikformat wird PPM (ASCII) empfohlen, Konvertierung via gimp .

Hinweis: Das PPM-Bildformat (ASCII) besteht aus 4 Zeilen Kopfinformationen gefolgt von RGB-Triplets für jeden Bildpunkt. D.h. jeder Bildpunkt wird durch 3 Zeilen Rot-, Grün- und Blauwert repräsentiert.
#! /usr/bin/env python
#
# Konverter: RGB -> Y
#

import string
import sys

f=open(sys.argv[1], 'r')

# read PPM-Header
MagicKey = f.readline()
if (MagicKey[0:2] != 'P3'):
        print "Sorry, wrong MagicKey."
        sys.exit(255)

Comment  = f.readline()
Size     = string.split(f.readline())
MaxColor = eval(f.readline())

x=eval(Size[0])
y=eval(Size[1])

# write PPM-Header
print MagicKey[0:2]
print "# CREATOR: ",sys.argv[0]
print x,y
print MaxColor

# read every RGB-Triplet
for i in range(0,x*y):
        red = eval(f.readline())
        green = eval(f.readline())
        blue = eval(f.readline())
        ............................
        ............................

f.close()

Lösung 1:

Quellcode: ppm2y.py

Aufgabe 2:

Generieren Sie ein kleines Bild 16x16 Pixel (weiss mit schwarzen Punkten) und speichern Sie dieses in einem verlustfreiem Bildformat (PPM raw). Konvertieren Sie das Bild in das JPEG-Format und in das JPEG2000-Format. Vergleichen Sie die Ergebnisse (Vergrößerung).

Hinweis:JPEG und JPEG2000-Konverter
# Konvertieren in JPEG
convert -quality 50 quadrat_16x16.ppm quadrat_16x16.jpg

# Konvertieren in JPEG2000
setenv CLASSPATH ~anhe/PUBLIC/java/jj2000-4.1.jar

java JJ2KEncoder -i quadrat_16x16.ppm -o quadrat_16x16.jpeg2000 -rate 50
java JJ2KDecoder -i quadrat_16x16.jpeg2000 -o quadrat_16x16_j2k.ppm

Lösung 2:

JPEG- und JPEG2000-Kompression (vergrössert)

Aufgabe 3:

Als Quelle für Bewegtbildkodierung soll eine Menge Einzelbilder dienen. Downloaden Sie eine der empfohlenen Einzelbildserien, entpacken Sie diese im Verzeichnis /tmp/.../ und wenden Sie eine Motion-JPEG-Kodierung auf die Bildserie an. Die entstandene Bildserie kann mit animate betrachtet werden.

Hinweis:Bildkonvertierung mit Shellscript
# bash
for i in *.ppm
do
...........
done

Lösung 3:

# Konvertieren
for i in *.ppm
do
convert $i $(basename $i ppm)jpg
done

# Betrachten
animate *.jpg

# alternativ
mencoder -mf on -ovc copy -o output.avi \*.jpg
    

Aufgabe 4:

Kodieren Sie die Bildfolge aus Aufgabe 3 in einem MPEG1-Datenstrom. Als Werkzeug wird mpeg_encode empfohlen. Vergleichen Sie die Größe der Ausgangsdaten, der Motion-JPEG- und der MPEG1-Kodierung. Als MPEG1-Betrachter kann gtv verwendet werden.

Hinweis: Das Werkzeug mpeg_encode liest alle Optionen aus einem Paramterfile. Als Vorlage kann /usr/doc/mpeg_encode-1.5b/docs/template.param dienen.

Lösung 4:

Parameterfile: mpeg_encode.param

Zusatzaufgabe:

Erstellen Sie aus den MPEG1-Datenstrom aus Aufgabe 4 einen MPEG4-Datenstrom (Divx). Als Koder kann mencoder und für die Darstellung [g]mplayer verwendet werden. Vergleichen Sie die Filegrößen.

Lösung:

mencoder output.mpg -ovc lavc -lavcopts vcodec=mpeg4 -o output.avi
    

Aufgabe 5:

Löschen Sie Ihre Arbeitsdaten aus dem /tmp/-Verzeichnis.


Andreas Heik
25. November 2003
Technische Universität Chemnitz, Straße der Nationen 62, 09107 Chemnitz
Impressum - Copyright © 2005 by TU Chemnitz, URZ, alle Rechte vorbehalten.
Druckansicht