Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik

Die Seite wird erstellt Louis-Stefan Scholz
 
WEITER LESEN
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
Fachhochschule Nordwestschweiz (FHNW)
                      Abteilung für angewandte Informatik

                    Advanced BarCode Information

                                           PAX 0607 19

eingereicht von:   Pascal Bender
                   Philippe O. Wagner

eingereicht am:    Muttenz, 6. Juli 2007

Betreuer:          Herr Prof. Dr. Christoph Stamm
Assistent:         Herr Oliver Ruf
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
2
                                            Zusammenfassung
Diese Projektarbeit beschreibt die evaluierten Konzepte zur Dekodierung von handelsüblichen Barcodes, so-
wie den Weg zur Entscheidungsfindung der dafür angebrachten Methoden zur effizienten Erkennung dieser
Strichcodes mittels Auswertung von Pixeldaten über Computer Vision.
Desweiteren wurde als Grundlage die zu verwendende Soft- und Hardware analysiert und zur Erklärung und
Erläuterung aufkommender Sachverhalte herangezogen.
Die gewonnenen Einsichten und ausprogrammierten Algorithmiken wurden anschliessend in eine modulare
und erweiterbare Applikation eingebettet, welche das Abfragen von definierten Datenquellen über verschiede-
ne Transportprotokolle, Caching von Daten und weiteren Features ermöglicht. Diese Anwendung wurde zuerst
für Nokia Smartphones der Serie 60 entwickelt und anschliessend aus Performancegründen auf Desktop Sys-
teme plattformunabhängig portiert.

                                                                                                        ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
3

Inhaltsverzeichnis
1   Einleitung                                                                                                                                                                          6
    1.1 Auftrag . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 6
    1.2 Ausgangslage . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 7
    1.3 Projektplanung . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 8
         1.3.1 Analyse . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 8
         1.3.2 Entwurf . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 9
         1.3.3 Entwicklung . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 10
         1.3.4 Optimierung/Testen .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 11
         1.3.5 Dokumentation . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 12

2   Analyse und Konzeption                                                                                                                                                               13
    2.1 Mittelanalyse . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
        2.1.1 Python . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
        2.1.2 Nokia S60 (Model N93) .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
        2.1.3 Python für S60 . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
        2.1.4 Erkenntnisse . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
    2.2 Methodenanalyse . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
        2.2.1 Aufbau von Barcodes . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
        2.2.2 Computer Vision Konzepte               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
        2.2.3 Applikationskonzepte . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33

3   Entwurf & Realisierung                                                                                                                                                               39
    3.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
    3.2 Konzeptrealisierung / Entscheidungen . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
        3.2.1 Computer Vision Konzepte . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
        3.2.2 Applikationskonzepte . . . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
    3.3 Packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
    3.4 Klassen und Organisation . . . . . . . . . . . . . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
        3.4.1 Externe Daten . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
        3.4.2 Applikationseinstellungen . . . . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
        3.4.3 Dateneinstellungen . . . . . . . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
        3.4.4 E-Nummern Einstellungen . . . . . . . . . . . . . . . . . .                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
    3.5 Sequenzen / Ablauf . . . . . . . . . . . . . . . . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
    3.6 Barcode Dekoder Voraussetzungen . . . . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51
    3.7 Barcode Dekoder . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
        3.7.1 Präprozess . . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
        3.7.2 Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
        3.7.3 Validierung . . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
    3.8 Desktop Version – Implementation . . . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
        3.8.1 Grafischer Modus . . . . . . . . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
        3.8.2 Konsolen Modus . . . . . . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
    3.9 Zusatzinformationen zur Implementierung der evaluierten Konzepte                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
        3.9.1 Applikationsentwicklung . . . . . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
        3.9.2 Algorithmusentwicklung . . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64

                                                                                                                                                                             ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
4

4   Optimierung / Testen                                                                                                                                                               65
    4.1 Einleitung . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
    4.2 Testen . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
        4.2.1 Testbilder . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
    4.3 Applikationsoptimierung . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
    4.4 Scriptsprache vs. Algorithmik      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72

5   Ergebnisse                                                                                                                                                                         73

6   Ausblick                                                                                                74
    6.1 Erweiterungen der Algorithmik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
    6.2 Erweiterungen der Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

7   Inhalt der beiliegenden CD                                                                                                                                                         75

8   Glossar                                                                                                                                                                            76

Stichwortverzeichnis                                                                                                                                                                   80

Literatur                                                                                                                                                                              82

                                                                                                                                                                           ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
5

Vorwort
Die vorliegende Arbeit entstand am Institut für Informatik der Fachhochschule Nordwestschweiz (FHNW). Sie
begann mit ihrem KickOff am 23. Oktober 2006 und dauerte bis zum 6. Juli 2007. Dank unserem Auftraggeber,
dem Institut für mobile und verteilte Systeme (IMVS) der FHNW, durften wir einen interessanten und abwechs-
lungsreichen Einblick in die Welt der mobilen Applikationsentwicklung in Kombination mit der Anwendung
von Computer Vision auf Mobiltelefonen geniessen. An dieser Stelle möchten wir eben diesem Auftraggeber
herzlich dafür danken. Ebenso sprechen wir unserem Ansprechpartner, Oliver Ruf, für seine stetige Bereitschaft,
uns bei Problemen zur Seite zu stehen, unseren Dank aus. Desweiteren gebührt unserem betreuenden Dozenten
und Leiter des IMVS, Prof. Dr. C. Stamm, Dank für sein Engagement und seine Unterstützung. Auch unseren
Kommilitonen danken wir für die anregenden Gespräche und Meinungen.

                                                                                                       ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
6

1      Einleitung
1.1     Auftrag
Zur Klärung des Auftrages wird an dieser Stelle die Originalpassage aus dem Antrag für Projekt- und Diplom-
arbeiten herangezogen:
             ’Heutzutage haben fast alle der gängigen Mobiltelefone eine integrierte Kamera, welche hoch-
             auflösende Bilder liefert. Die Projektarbeit umfasst die Entwicklung einer Applikation, wel-
             che mit dieser Kamera Barcodes als Bilder erfasst und mittels Computer Vision (CV) verar-
             beitet.
             Aufgrund der nun erhaltenen Identifikation holt die Applikation zusätzliche Informationen
             zu dem Produkt/Artikel/etc. aus dem Internet und stellt diese dem Anwender zur Verfügung.
             Die zu verwendende Technologie ist die Python Programmiersprache, welche seit dem Januar
             2006 von Nokia für die S60 Serie als OpenSource Projekt [14] veröffentlich wurde.
             Die besondere Herausforderung dieses Projektes sind die Erkennung der Barcodes mittels CV
             und die Entwicklung einer modularen und erweiterbaren Umgebung.’
Die Ziele, welche mit diesem Auftrag erreicht werden sollen, setzen sich wie folgt zusammen:
      • Funktionierender Prototyp (zur Vorstellung bei potentiellen Kunden)
      • Benutzerdokumentation
      • Technische Dokumentation
Der angestrebte Zeitraum für das Projekt erstreckt sich über 36 Wochen und startet mit dem KickOff Meeting
vom 23.10.2006 bis hin zum Abgabedatum am 6.7.2007.

                                                                                                       ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
7

1.2     Ausgangslage
Im Vorfeld dieser Arbeit wurde nach bereits existierenden Implementationen geforscht. Um einen ersten Ein-
druck über die herrschenden Marktverhältnisse zu erlangen, werden hierzu die folgenden Projekte kurz erläutert:
      • ReadBarC / ReadBarJ
      • BaToo

      • CodeCheck

ReadBarC / ReadBarJ
Das ReadBar Projekt [9], welches als C++, sowie als Java Implementation von John A. Webb entwickelt wurde,
beinhaltet einen Algorithmus zum dekodieren von Barcodes auf Symbian basierten Mobiltelefonen. Da wir
unseren eigenen Algorithmus zur Dekodierung entwickeln wollten und dieser auf Python basieren sollte, wurde
darauf verzichtet eine Portierung von C++ (oder Java) auf Python vorzunehmen. Ebenso wenig wollten wir
die existierende Rechenvorschrift als C-Extension in Python einbinden und als Modul verwenden (Python-
Wrapping). Die Voraussetzung dafür wäre eine weitere Einarbeitung in die C-API und das proprietäre C-Umfeld
von Symbian gewesen. Dieses Konzept wird zu einem späteren Zeitpunkt in diesem Dokument aufgearbeitet
und erläutert.

BaToo
Das Barcode Recognition Toolkit [21] wurde an der ETH Zürich von Robert Adelmann entwickelt und existiert
als C++, sowie als Java Implementation. Der Ausblick auf einen eigens entwickelten, auf Python basierenden
Algorithmus, verwarf auch hier die Idee einer Implementation von Fremdcode.
Obwohl keines dieser beiden Projekte als ’Codelieferant’ diente, konnten wir uns anhand des frei verfügbaren
Codes und der Dokumentation dazu ein erstes Bild über allfällige Konzepte gemacht werden. Ausserdem hielten
wir Kontakt zum Entwickler von BaToo, Robert Adelmann, der uns mit seiner Meinung nützliche Tipps geben
konnte. Zum konkreten Inhalt und dessen Nutzen wird ebenfalls später in diesem Dokument eingegangen.

CodeCheck
Zu Roman Bleichenbacher, Initiant und Entwickler von CodeCheck [22], wurde zu Beginn ein intensiver Kon-
takt gepflegt. Sein Projekt hat nichts mit der Erkennung von Barcodes zu tun, vielmehr steht CodeCheck für
eine Datenbank mit einer enormen Menge an Produktinformationen. Hinzu kommen Allergikerinformationen,
auf welche anhand von E-Nummern zugegriffen werden kann. Die Idee unsererseits war es, anhand von detek-
tierten Barcodes auf diese Informationen zuzugreifen, um diese dem Benutzer zur Verfügung stellen zu können.
Nach einem Treffen und einer Projektvorstellung bei Roman Bleichenbacher, steuerte man eine gemeinsame
Zusammenarbeit mit CodeCheck an. Die Fülle an abrufbaren Informationen rundet den Datenteil des Projekts
ab.
Wie sich im Verlauf der Arbeit herausstellen musste, entwickelte sich eine Kooperation nur schleppend und
musste einige Tage vor Projektabgabe abgesagt werden.

                                                                                                        ABCinfo
Advanced BarCode Information - Fachhochschule Nordwestschweiz (FHNW) Abteilung f ur angewandte Informatik
8

1.3     Projektplanung
Um ein Projekt, welches 36 Wochen dauert und eine gewisse Komplexität mit sich bringt, erfolgreich durch-
zuführen, bedarf es einer Planung im Vorfeld.
Insgesamt besteht die Planung aus 5 Hauptphasen, welche in sich wiederum in Zwischenschritte aufgeteilt sind.
Gewisse Abschnitte werden als zyklisch beschrieben, da sie oftmals durchlaufen werden, bis die nächste Phase
beginnen kann. Im Folgenden werden diese Etappen beschrieben und reflektiert. Das hierzu herangezogene
Instrument ist das Gantt-Diagramm (8), welches die Planung visualisiert.

1.3.1   Analyse
Da dieses Projekt den Einsatz von neuen Technologien fordert, ist es in einem ersten Schritt von grosser Bedeu-
tung, sich mit den nötigen Werkzeugen und derer Handhabung vertraut zu machen. Dazu gehören das Installie-
ren von Entwicklungsumgebungen, das Durcharbeiten von Tutorials, das Schreiben von Testprogrammen sowie
das Lesen der Theorie, um sich über verschiedene Strategien und Konzepte zu informieren. Zusätzlich wird an
dieser Stelle auch darüber diskutiert und beschlossen, wie das Projekt angegangen und verwirklicht werden soll.
Die in dieser Phase gewonnenen Erkenntnisse werden im zweiten Abschnitt mit der Konzeptevaluierung näher
besprochen und erläutert.

                                                             Dauer            Start
                             Analyse                        20 Tage   Di, 24.10.06
                             Installation Software           3 Tage   Di, 24.10.06
                             Python kennenlernen             7 Tage   Fri, 27.10.06
                             Nokia API kennenlernen          4 Tage    Di, 7.11.06
                             Recherche Konzepte              6 Tage   Mo, 13.11.06
                                                      (a)

                                                      (b)

                                 Abbildung 1: Gantt-Diagramm Analysephase

Die exakte Ausführung dieser ersten Etappe bildet das Fundament für einen im darauffolgenden Schritt effizient
ausgearbeiteten Entwurf.
Insgesamt wurden für die Analysephase 20 Tage ausgelegt. Nach Abschluss dieses Schrittes musste man erken-
nen, dass eine Woche mehr Zeit für die Analyse angebracht gewesen wäre. Somit haben sich Teile der Analyse
mit dem Entwurf, insbesondere mit dem Schreiben von Testmodulen, vermischt. Diese Tatsache kann aber auch
als normaler Ablauf angesehen werden, da gewisse Eigenschaften der Programmiersprache und der Geräte erst
bei derem Praxiseinsatz erlernt werden können. Ansonsten konnte dieser Schritt erfolgreich und termingerecht
abgeschlossen werden.

                                                                                                      ABCinfo
9

1.3.2   Entwurf
Die zweite Phase der Projektplanung besteht darin, die Resultate der ersten Phase zu nutzen um sie bedürfnisgerecht
in einen konkreten Entwurf der kompletten Architektur umzusetzen.
Hierbei werden zuerst die verschiedenen Konzepte aus dem Analyseschritt herangezogen und weiter ausgear-
beitet. Dazu werden unter anderem Testmodule entwickelt, welche den praktischen Bezug zur Analyse herstel-
len und die Entscheidung für die richtige Strategie unterstützen. Nachdem dieser, sich wiederholende, Schritt
abgeschlossen wurde und die adäquatesten Methoden zur Umsetzung der Algorithmik und der Applikation aus-
gewählt und verfeinert wurden, kann damit begonnen werden, die Architektur mittels UML 2.0 8 und dessen
Werkzeuge zu planen und aufzuzeigen. Abschnitt 3 dieser Dokumentation erläutert den Entwurf konkret.

                                                             Dauer             Start
                            Entwurf                         41 Tage   Di, 21.11.06
                            Konzeptideen sammeln             5 Tage   Di, 21.11.06
                            Konzepte konkretisieren          5 Tage   Di, 28.11.06
                            Testmodule entwickeln           14 Tage     Di, 5.12.06
                            Image Controller                 2 Tage     Di, 5.12.06
                            EBV Controller                   2 Tage    Do, 7.12.06
                            Barcode Controller               2 Tage   Mo, 11.12.06
                            Algorithmik                      2 Tage   Mi, 13.12.06
                            Cache Controller                 2 Tage    Fr, 15.12.06
                            Database Controller              2 Tage   Di, 19.12.06
                            Parsing Controller               2 Tage   Do, 21.12.06
                            Konzeptentwurf                   2 Tage   Sa, 23.12.06
                            Architektur (UML, API, ...)      8 Tage   Di, 26.12.06
                            Konzept, definitiv               7 Tage       Fr, 5.1.07
                                                      (a)

                                                      (b)

                                Abbildung 2: Gantt-Diagramm Entwurfsphase

Der Abschluss des Entwurfschrittes besteht darin, zu wissen, welche Konzepte zur Umsetzung der Applikation
weiterverfolgt werden. Zusätzlich ist der konkrete Aufbau (Klassen) und der Ablauf (Sequenzen) bekannt. Mit
diesen Grundlagen kann damit begonnen werden, die Anwendung zu realisieren und alle Vorgaben zu imple-
mentieren.
Die Entwurfsphase schlägt in der Planung mit 41 Tagen zu Buche. Aufgrund der Erkenntnis, dass das zyklische
evaluieren der Konzepte bis zur Entscheidungsfindung Zeit beanspruchen würde, erliess man für diesen Schritt
eine längere Frist. Diese Planungsentscheidung stellte sich als angemessen heraus. Am Stichtag standen die
Konzepte und die Architektur wie geplant und es konnte mit der nächsten Phase begonnen werden.

                                                                                                       ABCinfo
10

1.3.3   Entwicklung
Nachdem in zwei Schritten die Mittel und Methoden analysiert und die Konzepte ausgearbeitet wurden, besteht
die dritte Phase, unter Einsatz der in Vorlesungen vermittelter Techniken und Anwendungen, aus der Realisie-
rung eben dieser Entwürfe und Strategien.
Die dabei entstehenden Probleme, welche in der Konzeption nicht vorhergesehen werden konnten, müssen an
dieser Stelle behoben werden. Dazu ist es unter Umständen notwendig, Konzepte zu erweitern, zu ergänzen oder
gar gänzlich zu ersetzen. Die praktische Implementierung von theoretischen Konzepten lässt diesem Schritt sei-
ne zyklische Eigenschaft zukommen. Verschiedene Module und Programmteile müssen mehrfach überarbeitet
werden bis das gewünschte Resultat erreicht wird.

                                                               Dauer           Start
                          Entwicklung                         55 Tage    Di, 16.1.07
                          Überarbeiten der Testmodule        13 Tage    Di, 16.1.07
                          Ergänzen der Module (zyklisch)     15 Tage     Fr, 2.2.07
                          Model-View-Controller               13 Tage    Fr, 23.2.07
                          Überarbeiten MVC (zyklisch)        14 Tage    Mi, 14.3.07
                                                      (a)

                                                      (b)

                              Abbildung 3: Gantt-Diagramm Entwicklungsphase

Um die Anwendungseigenschaften gemäss Auftrag zu entwickeln und somit den Mindestanforderungen die-
ses Projektes gerecht zu werden, wurden 55 Tage eingeplant. Die Applikation konnte in dieser Zeit abermals
korrigiert und um Features erweitert werden. Die veranschlagte Dauer von knapp 3 Monaten erwies sich als
ausreichend um eine erste Version der Anwendung & Algorithmik lauffähig zu gestalten.

                                                                                                      ABCinfo
11

1.3.4   Optimierung/Testen
Die letzte Phase beschäftigt sich mit dem Testen und der Optimierung der Applikation. Dabei werden in ers-
ter Linie alle möglichen Benutzereingaben geprüft und abgefangen, sowie alle Fehler- und Zustandsszenarios
durchgespielt. Ebenso werden möglichst viele Referenzvorlagen für das Testen der Algorithmik eingespielt.
Die gewonnenen Ergebnisse dienen anschliessend zur Optimierung der Anwendung und der Algorithmik. Die-
ser Schritt ist, wie bereits die Entwurfsphase, zyklisch ausgelegt. Das Programm und seine Rechenvorschrift
werden somit Schritt für Schritt verbessert. Eine Einschränkung besteht fast nur durch die zeitliche Begrenzung
des Projektes, sowie durch gewisse grundlegende Eigenschaften der Mittel und Methoden. In Abschnitt 3.6
werden diese Grenzen behandelt und dargelegt.

                                                               Dauer            Start
                            Testen / Optimierung              46 Tage      Di, 3.4.07
                            Komponententesten                 15 Tage      Di, 3.4.07
                            Testen der Einzelmodule            9 Tage      Di, 3.4.07
                            Optimierung der Einzelteile        6 Tage     Sa, 14.4.07
                            (zyklisch)
                            Gesamttesten                      31 Tage    Mo, 23.4.07
                            Testen der Anwendung               5 Tage    Mo, 23.4.07
                            Optimierung der Applikation       21 Tage    Mo, 30.4.07
                            (zyklisch)
                            Bugfixing (zyklisch)              5 Tage      Di, 29.5.07
                                                       (a)

                                                       (b)

                         Abbildung 4: Gantt-Diagramm Optimierungs- und Testphase

Das Bewusstsein darüber, dass dieser Schritt nicht unterschätzt werden darf, liess ihm 46 Tage zur Vervollständigung
zukommen. Das Testen brachte Fehler zum Vorschein, die in dieser Phase behoben werden konnten. Gleichzei-
tig wurde die Applikation optimiert. Konkret bedeutet dies, dass die Zeit genutzt werden konnte, um Features,
welche nicht im Pflichtenheft erscheinen, einzubauen. Diese erhöhen die Bedienerfreundlichkeit und verbessern
gleichzeitig die Performance. Neue Ideen traten zum Vorschein, welche schliesslich nur aufgrund Zeitmangels
nicht vollständig umgesetzt werden konnten. Mehr dazu in Abschnitt 6 – Ausblick.
Das Ziel des Projektes war es die Applikationsversion auf den Status eines Prototyps zu bringen. Dazu reichte
die Dauer dieser Phase aus.

                                                                                                         ABCinfo
12

1.3.5   Dokumentation
Um die geleistete Arbeit einem Betrachter auf schlüssige Weise darlegen zu können, ist eine verständliche Do-
kumentation die wichtigste Arbeit überhaupt. Sie beinhaltet alle Punkte, welche unter 1.3 – Projektplanung
angesprochen werden, im Detail. Dabei wird die Eigenleistung ausgeleuchtet und kritisch hinterfragt. Die Me-
thodenkompetenz, mit welcher die Arbeit angegangen und gehandhabt wurde, soll ebenso ersichtlich sein, wie
die Fachkompetenz, mit welcher Aufgaben- und Problemstellungen gelöst wurden. Ebenso muss die Planung
ersichtlich sein und reflektiert werden, was im bisherigen Text das Hauptthema war.

                                                               Dauer           Start
                         Dokumentation                        27 Tage     Di, 5.6.07
                         Arbeitsbucheinträge verarbeiten      2 Tage     Di, 5.6.07
                         Konzepterkenntnisse verarbeiten       2 Tage     Do, 7.6.07
                         Zusammentragen                        3 Tage    Mo, 11.6.07
                         Ergänzen / Korrigieren (zyklisch)   14 Tage    Do, 14.6.07
                         Latex                                 2 Tage     Di, 3.7.07
                         Präsentation vorbereiten             2 Tage     Do, 5.7.07
                                                      (a)

                                                      (b)

                            Abbildung 5: Gantt-Diagramm Dokumentationsphase

Rückblickend kann man die Projektplanung als erfolgreich betrachten. Es wurden alle Schritte so detailiert
geplant, wie es im Vorfeld machbar war. Der Zeitplan konnte für fast alle Termine eingehalten werden und barg
keine Überraschungen negativer Art. Ausgenommen ist die Analyse, welcher man 1-2 Wochen mehr Zeit hätte
einräumen können. Dieser Punkt hat uns gezeigt, dass ein Projekt dieser Dauer und in diesem Umfang mehr
Forschung vorweg benötigt hätte.
Diese Erkenntnis und das Wissen über die Wichtigkeit guter Planung werden uns in weiteren Projekten mit
Sicherheit erfolgreich begleiten.

                                                                                                      ABCinfo
13

2       Analyse und Konzeption
2.1     Mittelanalyse
2.1.1    Python
Die komplette Applikation soll laut Auftrag die Python Technologie verwenden. Zum Einblick und dem besse-
ren Verständnis wird Python an dieser Stelle vorgestellt.
Python ist eine Programmiersprache, welche in den 90er Jahren in Amsterdam entwickelt wurde. Sie unterstützt
objektorientierte, aspektorientierte und funktionale Programmierung. Es existiert eine umfangreiche Standard-
bibliothek mit nützlichen Modulen für viele verschiedene Arten von Anwendungen.
Python ist sehr eifach und übersichtlich gehalten. Die Lesbarkeit von Code steht im Vordergrund und erlaubt
es Programmierern, sich ohne grossen Aufwand in eine fremde Applikation einzuarbeiten. Dies fördert die
Erweiterbarkeit auch in einem teamorientierten Sinne.
Die automatische Speicherbereinigung von Python hält das Speicherkontingent stets auf optimalem Niveau.
Datentypen werden nicht, wie etwa in C++, statisch typgeprüft (d.h. vor der Programmausführung), sondern
dynamisch verwaltet. Durch diese ’dynamische Typisierung’ wird erst zur Laufzeit entschieden, welcher Inhalt
den Datentypen zugeordnet wird.
Ein weiterer Unterschied zu anderen Programmiersprachen besteht darin, auf welche Art Python Leerzeichen
behandelt. Das Einrücken von Codeblöcken dient als Strukturierungselement und trägt eine semantische Rele-
vanz. Auf das Gliedern mit Klammern wird hingegen verzichtet.

Ein Beispiel:

                                    Listing 1: Codestrukturierung mit C++
i n t add ( i n t a , i n t b )                                                                              1
{                                                                                                            2
      r e t u r n a+b ;                                                                                      3
}                                                                                                            4

                                  Listing 2: Codestrukturierung mit Python
d e f add ( a , b ) :                                                                                        1
      r e t u r n a+b                                                                                        2

Übrigens: Python wurde nicht etwa nach der gleichnamigen Schlangenart, sondern nach der britischen Komi-
kertruppe Monty Python benannt.
Teile von Google sowie die komplette YouTube Umgebung wurden in Python realisiert. Auch Programme wie
der offizielle BitTorrent-Client machen von Python Gebrauch.

Python vs. Java vs. C++
So bestechend die Einfachheit von Python ist, so kritisch muss die Performance gegenüber anderen Program-
miersprachen hinterfragt werden. Nachfolgend werden verschiedene Aspekte von Python mit ihrem Äquivalent
in Java und C++ verglichen.

Komplexität Wenn es darum geht die Komplexität von geschriebenem Code zu vergleichen, ist Python der
eindeutige Gewinner. Python-Code ist kürzer, intuitiver und schneller programmiert als Java oder gar C++ Code.
Testprogramme, die für Benchmarks geschrieben wurden, enthalten in Python 921 Bytes, in Java 2’742 Bytes.

Allgemeine Programm Performance Um den Initialisierungs Overhead zu messen, wurde der minimalste
Code geschrieben, mit welchem die verschiedenen Programmiersprachen ihre Umgebung starten können. In
Python ist dies schlichtweg eine leere Datei. In Java und C++ ist es die Klassen- und Main-Instanzierung.

                                                                                                     ABCinfo
14

Dabei hat Python seinen Interpreter in einer Zeit von 0.04 Sekunden gestartet. Java benötigt 0.25 Sekunden.
Dies bedeutet, dass Python seine Umgebung 6.3 mal schneller starten kann als Java, was vor allem bei kleineren
Programmen einen Geschwindigkeitsvorteil bringt. Bei grösseren Applikationen ist diese Zeit eher von geringer
Bedeutung.
Nachdem der Interpreter resp. die virtuelle Maschine ihren Start vollzogen hat, kann die Objektallokation vergli-
chen werden. Dabei wird eine leere Klasse erzeugt und mehrfach instanziert. Python benötigt für die Allokation
von 1 Mio. Instanzen 211.11 Sekunden, wohingegen Java nur 23.65 Sekunden braucht. Dies entspricht einem
8-fachen Vorsprung in Java. Python wird während der Programmausführung und der häufigen Instanzierung von
Klassen demnach Geschwindigkeit einbüssen.

Netzwerk / IO Performance Wenn es um Input/Output Operationen auf Dateiebene geht, sind Python und
Java praktisch gleichwertig. Bei Netzwerkverbindungen liegt der Flaschenhals bei der Abindung und nicht bei
der Applikation selbst.

System-Level Performance Wenn systemnahe Funktionen und algorithmische Berechnungen ausgeführt wer-
den, zeigt C++ seine innere Performance. Um eine Liste mit 3 Millionen Einträgen zu füllen, benötigt Python 31
Sekunden. C++ erledigt diese Aufgabe in nur 0.19 Sekunden. Ebenso liegt Python weit zurück wenn es darum
geht, eine leere Loop 20 Millionen mal zu durchlaufen. In nur 0.18 Sekunden absolviert C++ diesen Test, wobei
es bei Python 31.81 Sekunden bedarf.

                                                                                                       ABCinfo
15

2.1.2    Nokia S60 (Model N93)
Die zu verwendende Hardware besteht aus dem Mobiltelefon Nokia N93, welches zur Serie 60 der Nokia
Smartphones gehört. Die Software Grundlage bildet das Betriebssystem Symbian. Dieses ist zur Zeit in der
Version 9.2 (3rd Edition) erhältlich und wurde von Nokia für seine eigenen Geräte entwickelt.

                                                  (a) Nokia N93

                               Abbildung 6: Applikationsplattform - Nokia N93

Eigenschaften Die, für das Projekt wichtigsten, Eigenschaften des Nokia N93 umfassen:
    • 3.2 Megapixel CMOS Sensor
    • Carl-Zeiss Optik mit 3-fach optischem Zoom
    • Autofokus
    • WLAN, UMTS 8
    • 50 MB interner Speicher

CPU 8
        Prozessor-Typ:
        Texas Instruments OMAP 2420
        Architektur:
        ARM-11 (330 MHz)
Für das N93 liefert Texas Instruments den Single-Chip Prozessor OMAP 2420, welcher alle Mobilstandards und
eine Vielzahl von Multimedia Anwendungen unterstützt. Die mit 330 MHz getaktete Zentraleinheit ermöglicht
die parallele Verarbeitung von Funktionen. Weitere Features sind der 2D/3D Grafikbeschleuniger und die Un-
terstützung aller gängigen Peripheriestandards.
Die ARM-11-Architektur beinhaltet eine Floating Point Unit, welche Floating Point Operationen auf Mikro-
kontrollerebene realisieren kann. Dies ist keine Selbstverständlichkeit, da die meisten bisherigen Nokia Mobil-
telefone Float-Operationen auf Softwarebasis emulierten.

                                                                                                      ABCinfo
16

                                                    (a)

                             Abbildung 7: OMAP High-Performance Prozessor

Nokia S60 Symbian Programmierschnittstelle Die wohl leistungsfähigste Variante um Anwendungen für
ein 3rd Edition Smartphone von Nokia zu schreiben, ist die Nutzung der Nokia C-API unter Verwendung von
C++. Leider ist sie nicht die effizienteste und wohl auch die unbequemste (sofern nur High-Level Program-
miersprachen betrachtet werden). Mit Hilfe der öffentlich zugänglichen und gut dokumentierten C-API ist es
möglich fast alle Features des Mobiltelefons zu nutzen. An dieser Stelle möchten wir Robert Adelmann der
ETH Zürich zitieren. Er wurde von uns auf den Aufwand seines C++ Projektes zur Barcodedekodierung (1.2)
angesprochen.
      ’J2ME Version ging sehr schnell (...) Mit C++ Symbian sieht die Sache ganz anders aus. Nach 6
      Monaten wird man in diesem doch sehr speziellen C++ Dialekt so langsam warm.’

                                                                                                   ABCinfo
17

2.1.3   Python für S60
Seit dem Januar 2006 existiert das von Nokia ins Leben gerufene OpenSource Projekt Python für S60 (PyS60).
Dem Entwickler steht damit fast die komplette Standardbibliothek von Python zur Verfügung. Auf diese Weise
ist es nun auch möglich auf Mobilgeräten sehr produktives Software Development zu betreiben. In kurzer Zeit
kann, wie auch mit Python, viel erreicht werden. Desweiteren existieren eine Menge externer Module für PyS60,
wie etwa XML Parser oder Bildverarbeitungsfunktionen.
PyS60 selbst kommt mit einigen nützlichen Modulen für den Mobilbereich. Für dieses Projekt besonders in-
teressant ist beispielsweise die Kamera API, die jedoch noch immer keinen Autofokus und bis vor kurzem
auch keinen Viewfinder unterstützt hat. Der Viewfinder ist das Live-Bild resp. der Sucher, welcher nach der
Initialisierung der nativen Mobiltelefonkamera auf dem Bildschirm erscheint. Obwohl die Nokia C-API die
Ansteuerung der Autofokus Hardware seit kurzem ermöglicht, wurde diese noch nicht in die neuste PyS60 Ver-
sion implementiert. Somit bleibt diese Pendenz beim Entwickler, der Funktionen, welche auf die automatische
Schärfentiefeneinstellung Einfluss nehmen, in C++ schreiben muss.
Die Möglichkeit die Nokia C-API in Python zu nutzen, bezeichnet man als C-Extension Programmierung.
Diese ist nicht ganz trivial und wird in den Applikationskonzepten (2.2.3) beim Problem der Bildaufnahme
näher beschrieben. Um einen Eindruck über die Performance von Python auf dem Mobilgerät zu gewinnen,
wurde ein Integer Benchmark auf verschiedenen Plattformen durchgeführt. Dabei werden die Fibonacci Zahlen
in 5 Messreihen mit einer Rekursionstiefe von 30 berechnet. Auf den getesteten Plattformen wurde der Standard
Interpreter von Python verwendet.

                          Plattform (Mobil)                      Zeit (in Sekunden)
                          Nokia N93 (3rd)                                     80.47
                          Nokia N73 (3rd)                                    192.77

                          Plattform (Desktop)
                          PowerPC G4*                                            7.13
                          Hewlett-Packard Pavilion dv6000**                      1.58
                          Hewlett-Packard Pavilion dv6000                        0.09
                          mit Psyco JIT Modul***
                                                      (a)

Abbildung 8: Benchmark; * 1.5GHz, 1.25GB RAM; ** Dual-Core2 1.83GHz, 2GB RAM; *** das Psyco JIT
Modul ist ein Just-in-Time Compiler für Python, welcher die Codeausführung 4-100 mal beschleunigt.

Schon zu diesem Zeitpunkt erkennt man die grosse Schwachstelle von systemnahen Operationen mit Python
auf dem Mobiltelefon. Der Wert, den der PowerPC G4 mit 1.5 GHz liefert, liegt für Desktopsysteme im guten
Mittelfeld. Da der HP Pavilion mit einem Dual-Core Prozessor der zweiten Generation ausgestattet ist, läuft der
Test dementsprechend performant. Das erwähnte und getestete Psyco Modul wird zu einem späteren Zeitpunkt
näher erläutert. Die Erkenntnis, dass Psyco eine hohe Leistungssteigerung auf x86 Systemen bewirken kann,
spielt im Verlaufe des Projektes eine nicht unwichtige Rolle.
In Abschnitt 2.1.1 wurde Pythons System-Level Performance zum ersten Mal angesprochen. Die Befürchtung,
dass Python, wie es bereits im Vergleich zu anderen Programmiersprachen auf Desktopsystemen der Fall war,
die Geschwindigkeit auch auf Mobilgeräten enorm bremsen würde, scheint sich an diesem Punkt zu bestätigen.

                                                                                                      ABCinfo
18

2.1.4   Erkenntnisse
Python ist eine starke und einfach zu nutzende High-Level Programmiersprache. Da Advanced BarCode Infor-
mation modular und erweiterbar aufgebaut sein soll, ist die Wahl der Sprache angemessen. Ausserdem kann
damit in 36 Wochen viel erreicht werden.
Die Kehrseite liegt darin, dass ein Grossteil der Applikation aus Algorithmik bestehen wird. Für dieses maschi-
nennahe Programmieren ist Python weniger geeignet. Die Benchmarks der letzten Abschnitte haben gezeigt,
dass Python durch seine fast schon zu sehr auf High-Level ausgelegte Architektur, alle systemnahen Operatio-
nen verlangsamt. Auf dem Mobilgerät kommt dieser Nachteil noch deutlicher zum Vorschein.
Mit Rücksichtnahme darauf, dass ein Mobiltelefon nicht mit einem Computer verglichen werden darf, leistet das
Nokia N93 beachtliches. Seine Multimediafähigkeiten und die Hardware sind auf dem neusten Stand der Tech-
nik. Das Betriebssystem Symbian OS ist vielfältig, weist allerdings Schwachstellen im Memory Management
auf (diverse Komplettabstürze in nativen Applikationen, sowie in Drittanwendungen. Beispielsweise stürtzt die
Kameraapplikation nach 25 Aufnahmen ab). Ausserdem wurde die Sicherheitspolitik in der dritten Edition von
Symbian dermassen verschärft, dass es als Entwicklerplattform oftmals sehr mühsam zu handhaben ist.
Python für S60 ist in seiner Verwendung sehr bequem. Leider existiert es noch nicht sehr lange (2006), was sich
anhand der vielen Fehlern des Interpreters erkennen lässt. Ausserdem sind einige Teile und Module, welche im
Projekt benötigt gewesen wären, nicht in PyS60 vorhanden.
Wie und welche Werkzeuge und Mittel bei der Umsetzung der Applikation genutzt werden und warum man
sich für oder gegen sie entschieden hat, wird der Abschnitt der Konzeption und des Entwurfes zeigen.

                                                                                                      ABCinfo
19

2.2     Methodenanalyse
Als nächstes werden die Methoden, durch welche die Anwendung entstehen soll, analysiert. Dabei geht es
einerseits darum, verschiedene Verfahren zur Bildverarbeitung und Barcodeerkennung in Betracht zu ziehen,
andererseits wird ein Vorwissen zum Aufbau der Barcodes geschaffen, welches zum Verständnis der Dekodie-
rung unabdingbar ist. Desweiteren werden Ideen zur Applikationsarchitektur erforscht und ausgewertet. In der
Realisierungsphase (Entwurf & Realisierung, siehe Seite 39), werden anschliessend die adäquatesten Konzepte
ausgewählt und für die Realisierung der Anwendung eingesetzt.

2.2.1    Aufbau von Barcodes
Geschichte
Die Grundlagen zur Arbeit mit Barcodes wurden bereits 1949 von Joseph Norman Woodland und Bernard Silver
erarbeitet. Knapp 25 Jahre später, im Jahr 1973, wurde in den Vereinigten Staaten der UPC Barcode (Universal
Product Code) eingeführt. Ein Jahr später wurde in einer Filiale der amerikanischen Supermarktkette ’Marsh’
das erste, mit einem Strichcode markierte Produkt, eine 10er Packung ’Juicy Fruit’ des Herstellers ’Wrigley’,
von einer Scannerkasse erfasst und verkauft. [25] Europa hat im Jahr 1976 die ’European Article Number’
(EAN) eingeführt. Heute ist sie unter dem Namen ’International Article Number’ bekannt.
Im Handel wird auch heute noch vorwiegend der EAN Barcode (2.2.1) eingesetzt, wobei dieser mittelfristig
durch RFID 1 Chips verdrängt wird. Noch schneller wird der Code39 (2.2.1), welcher vor allem in der Industrie
und Medizin eingesetzt wurde, durch die DataMatrix abgelöst (2.2.1). Der Hauptgrund für diese Entwicklung
ist die Tatsache, dass mehr Informationen auf einer kleineren Fläche abgebildet werden können. Der ’Barcode’
entwickelt sich somit vom Identifkationsmedium zum Informationsmedium. Dieser Fortschritt hat bereits Ende
der achtziger Jahre begonnen und schreitet unaufhaltsam fort. In der Gegenwart werden auch spezielle Codes
wie der Shotcode 2.2.1 als Marketinginstrument eingesetzt. Blogger 2 verwenden Matrixcodes wie den QR
Code 2.2.1 zur Erstellung von Offlineblogs. Trotz den neuen Arten und Einsatzgebieten, sind die klassischen,
eindimensionalen Barcodes nach wie vor fester Bestandteil unseres Alltags.

Typen und Spezifikationen
Lineare Barcodes, Eindimensionale Barcodes Lineare, eindimensionale Barcodes sind nach allgemeiner
Formulierung ein Muster aus parallel angeordneten, alternierend hellen und dunkeln Linien und Lücken mit
unterschiedlichen Dicken. Lineare Barcodes, auch Strichcodes genannt, sind die einfachste, kostengünstigste
und flexibelste Methode, Objekte maschinell zu kennzeichnen. Durch die Standardisierung ist ein weltweit
funktionierendes Identifikationssystem geschaffen worden.

EAN EAN ist die Abkürzung für European Article Number und ist die veraltete Bezeichnung für International
Article Number.
EAN ist ein Code, bestehend aus numerischen Zeichen zwischen 0 (null) und 9 mit einer fixen Länge von 8 oder
13 Zeichen. Die EAN Codes werden zentral verwaltet und auf Anfrage an Hersteller für ihre Produkte vergeben.
Die europäische Artikel Nummer ist nach der DIN Norm 66236 festgesetzt.

      EAN13 Die 13 Ziffern der EAN13 bedeuten:
      • 7 Ziffern: Global Location Number bestehend aus:
        3 Ziffern EAN-Ländercode der GS1
        4 Ziffern Hersteller Nummer
    1 RFID = Der englische Begriff Radio Frequency Identification (RFID) bedeutet im Deutschen ’Identifizierung über Radiowellen’. RFID

ist ein Verfahren zur automatischen Identifizierung von Gegenständen und Lebewesen. Neben der berührungslosen Identifizierung und der
Lokalisierung von Gegenständen steht RFID auch für die automatische Erfassung und Speicherung von Daten. [26]
    2 Ein Blog (engl. Wortkreuzung aus Web und Log), ist ein digitales Journal. Der Herausgeber dieses Journals wird Blogger genannt.

                                                                                                                            ABCinfo
20

                           7       623900     205080               5449     2387
                                       (a) EAN13                     (b) EAN8

               Abbildung 9: Abbildung 2.2.1 zeigt einen EAN13 und 2.2.1 eine EAN8 Barcode.

    • 5 Ziffern für die Artikelnummer

    • 1 Ziffern für die Prüfziffer

    EAN8 Der EAN8 Code besteht nur aus zwei Blöcken zu je 4 Zeichen aus den Zeichensätzen A (linker
Teil) und C (rechter Teil). Die 8 Ziffern der EAN8 bedeuten:
    • 2 Ziffern für die Global Location Number
    • 3 Ziffern für die Hersteller Nummer
    • 3 Ziffern für die Artikelnummer, inkl. Prüfziffer

    ISBN ISBN ist die Abkürzung für ’International Standard Book Number’. Dieser Code besteht aus einem
adaptierten EAN13 Barcode. Die Ziffern 0, 1 und 2 werden dabei durch die Zeichenfolgen ’978’ oder ’979’
ersetzt.

    Instore Barcodes Instore Barcodes sind EAN kodierte Barcodes, welche nicht in der globalen Datenbank
registriert sind. Diese Barcodes sind nicht eindeutig und dürfen nur im eigenen Warenhaus für Eigenprodukte
wie Back- und Frischwaren verwendet werden. Diese Barcodes sind nicht eindeutig und beginnen mit einer 0
oder einer 2.

Aufbau eines EAN Barcodes Die Spezifikation der EAN Barcodes ist offen und frei verfügbar. Sie kann
beim Schweizer Kompetenzzentrum für Standards (GS1) unter [32] und [33] als PDF Datei bezogen werden.
Der Aufbau und die Kodierung der Barcodes können aus diesen Standards entnommen werden. In den folgen-
den Abschnitten werden die Eigenschaften von EAN beleuchtet, bevor die Kodierung und Dekodierung der
Barcodes näher beschrieben werden.

Grundbegriffe Um eine Abhandlung zum Aufbau und zur Handhabung von Barcodes zu ermöglichen, bedarf
es im Voraus der Klärung gewisser Grundbegriffe.

Modul Ein Modul ist die kleinstmögliche Einheit eines Barcodes. Ein Zeichen (beispielsweise 6’) besteht
                                                                                             ’
    immer aus 2 Balken und 2 Lücken, welche insgesamt aus 7 Modulen bestehen (1 Zeichen = 7 Module).
    Beispiele solcher Module werden in der Abbildung 10 dargestellt.
Balken Ein Balken ist ein sichtbarer, dunkel gedruckter Verbund, bestehend aus einem oder mehreren Modulen.
     Synonyme: Strich, Bar, Linie.

Lücke Eine Lücke ist die Inverse eines Balkens. Sie erscheint im Kontrast zum Balken hell und besteht aus un-
      bedruckter Fläche. Eine Lücke kann ein oder mehrere Module breit sein. Synonyme: Space, unsichtbarer
      Strich.

                                                                                                     ABCinfo
21

Zeichen Ein Barcode besteht aus Zeichen, welche numerischen oder alphanumerischen Naturen sein können.
Zeichensatz Ein Zeichensatz definiert die möglichen Zeichen, die ein Barcode kodieren kann. Ein Barcodetyp
     kann mehrere Zeichensätze verwenden.
Modulgruppe Eine Modulgruppe ist ein Verbund von Modulen, welche zusammen einen Balken oder eine
    Lücke bilden.
Barcode Ein Barcode ist eine Menge von Zeichen die eine Kontextinformation bilden. Er wird durch Modul-
     gruppen von Balken und Lücken kodiert.

Verschlüsselung der Symbolzeichen Die nachfolgende Tabelle zeigt die Zeichensätze A, B und C, welche
für die Verschlüsselung der Ziffern im EAN Code verwendet werden.

                                  Tabelle 1: EAN Zeichensätze in Modulbreiten
                         Ziffer    Zeichensatz A    Zeichensatz B     Zeichensatz C
                                   L B L B L B L B B L B L
                           0       3 2 1 1 1 1 2 3 3 2 1 1
                           1       2 2 2 1 1 2 2 2 2 2 2 1
                           2       2 1 2 2 2 2 1 2 2 1 2 2
                           3       1 4 1 1 1 1 4 1 1 4 1 1
                           4       1 1 3 2 2 3 1 1 1 1 3 2
                           5       1 2 3 1 1 3 2 1 1 2 3 1
                           6       1 1 1 4 4 1 1 1 1 1 1 4
                           7       1 3 1 2 2 1 3 1 1 3 1 2
                           8       1 2 1 3 3 1 2 1 1 2 1 3
                           9       3 1 1 2 2 1 1 3 3 1 1 2

Die Zeichensätze beschreiben den Aufbau der Ziffern 0 – 9, indem die Anzahl Module für Lücken (L) und
Balken (B) definiert werden. Die Ziffer 0 (null) beispielsweise, wird im Zeichensatz A durch 3 Module des
Typs Lücke, 2 Module des Typs Balken und je einem Modul Lücke und Balken kodiert. Diese Folge erzeugt
eine eindeutig identifizierbare Modulgruppe für die Ziffer 0 (null). Eine Lücke kann als Folge binärer ’False’
(0), ein Balken als Folge binärer ’True’ (1) interpretiert werden.
Der Zeichensatz B besteht aus einem gespiegelten Zeichensatz A. Der Zeichensatz C besteht aus einem Abbild
des Zeichensatzes A, in welchem die Lücken und Balken invertiert werden. Die besagte Ziffer 0 (null) wird im
Zeichensatz A als binäres 0001101 kodiert. Der Zeichensatz C beschreibt die Ziffer 0 (null) mit 1110010
(Zeichensatz A invertiert). Tabelle 2 zeigt die Zeichensätze in binärer Form.

                                            (a) Beispiel und Direktver-
                                            gleich für die Ziffer 0, im
                                            Zeichensatz A, B und C

Abbildung 10: Visualisierung der Ziffer 0 in den verschiedenen Zeichensätze, Zeichensatz A (oben), Zeichen-
satz B (mitte) und Zeichensatz C (unten).

                                                                                                       ABCinfo
22

                                   Tabelle 2: EAN Zeichensätze in binärer Form
                          Ziffer     Zeichensatz A Zeichensatz B Zeichensatz C
                            0           0001101         0100111             1110010
                            1           0011001         0110011             1100110
                            2           0010011         0011011             1101100
                            3           0111101         0100001             1000010
                            4           0100011         0011101             1011100
                            5           0110001         0111001             1001110
                            6           0101111         0000101             1010000
                            7           0111011         0010001             1000100
                            8           0110111         0001001             1001000
                            9           0001011         0010111             1110100

Verschlüsselung der Hilfszeichen Jeder Barcode hat gewisse Hilfszeichen, beim EAN handelt es sich dabei
um ein Start- und Endzeichen, sowie um ein Trennzeichen, welches die linke und die rechte Barcodeseite trennt.

                                        Tabelle 3: Die EAN Hilfszeichen
                      Hilfszeichen      Anzahl Module       Elementbreite        Binär
                                                          L B L B L
                      Startzeichen              3              1 1 1              101
                      Trennzeichen              5         1 1 1 1 1              01010
                      Endzeichen                3              1 1 1              101

Paritätswechsel Anhand der Parität wird die Leserichtung eines Barcodes definiert. Die folgende Tabelle
wird bei der Kodierung, resp. Dekodierung eines Barcodes benötigt und kommt im Folgenden zum Einsatz.

                                          Tabelle 4: EAN Paritätstabelle
                                   führende Ziffer Position Symbolzeichen
                                                      1 2 3 4 5 6
                                          0           A A A A A A
                                          1           A A B A B B
                                          2           A A B B A B
                                          3           A A B B B A
                                          4           A B A A B B
                                          5           A B B A A B
                                          6           A B B B A A
                                          7           A B A B A B
                                          8           A B A B B A
                                          9           A B B A A A

Ländercodes Ein mit einer EAN identifiziertes Produkt trägt den Ländercode des Herstellerlandes, welcher
aus drei Ziffern besteht und an den Postionen 1, 2 und 3 abgespeichert wird.
Die Webadresse zur vollständigen GS1 Ländercode Liste ist unter [8] vermerkt.

                                                                                                    ABCinfo
23

                                          Tabelle 5: EAN Ländercode
                                           300 - 379 Frankreich
                                           400 - 440 Deutschland
                                           760 - 769 Schweiz
                                           800 - 839 Italien
                                           900 - 919 Österreich

                       Tabelle 6: Zusammenfassung zum Aufbau des EAN13 Barcodes
                                       Format des EAN13 Barcodes
              Bezeichnung Ländercode        Hersteller     Artikelnummer    Prüfziffer
              Position        0 1      2   3 4 5 6 7 8 9 10 11                   12
              Zeichensatz                A oder B                      C

EAN Kodierung Zur Veranschaulichung des folgenden Sachverhaltes, wird der Barcode mit der Kontextin-
formation 1234567890128 betrachtet. Um den Barcode in einem ersten Schritt zu analysieren, wird seine
Kontextinformation in zwei Sechsergruppen und eine Einergruppe zerlegt. Es entstehen dabei die folgenden
Gruppen:

1 + 234567 + 890128

Zunächst wird die zweite Sechsergruppe 890128 betrachtet. Sie bildet den rechten Teil eines Barcodes. Diese
Seite wird stets mit dem Zeichensatz C aus der Tabelle 1 kodiert. Um den Aufbau der ersten Ziffer 8 dieser
Gruppe zu verstehen, wird die besagte Tabelle konsultiert. Sie definiert den Aufbau der Ziffer 8 mit L=1, B=2,
L=1, B=3. Die Ziffer 8 wird also durch ein Modul Lücke, zwei Module Balken, ein Modul Lücke und drei
Module Balken kodiert. Die Summe der beiden Lücken und Balken muss eine Modulanzahl von 7 aufweisen
um komplett zu sein.
Die erste Sechsergruppe 234567 wird entweder mit dem Zeichensatz A oder dem Zeichensatz B kodiert und
bildet den linken Teil des Barcodes. Grund für die unterschiedliche Nutzung von Zeichensätzen ist die spätere
Berechnung der Einergruppe 1, welche die Paritäten des linken Teils beschreibt.
Durch diese Paritätsziffer am Anfang des Barcodes wird in Kombination mit der Tabelle 4 die Benutzung des
jeweiligen Zeichensatzes A oder B für die Kodierung der entsprechenden Position bestimmt. Die Paritätsziffer
1 beschreibt die Nutzung der folgenden Datensatzvorschrift: AABABB. Die erste Ziffer der ersten Sechsergrup-
pe, wird somit durch den Zeichensatz A kodiert, die zweite Ziffer ebenfalls. Die dritte Ziffer wird durch den
Zeichensatz B etc. beschrieben. Bei der Dekodierung eines Barcodes, wird die Einergruppe vorerst ignoriert. Es
werden nur die beiden Sechsergruppen dekodiert. Anhand der Paritäten des linken Teils (erste Sechsergruppe),
kann die Paritätsziffer errechnet werden. Ein Barcode kodiert also nicht 13 Zeichen, sondern lediglich 12. Die
erste Ziffer wird aus den ersten 6 Zeichen berechnet. Dies ermöglicht zugleich die Ermittlung der Leserichtung
anhand der Parität.

UPC Der UPC Barcode ist mit dem EAN Barcode Aufbau identisch. Er kann jedoch nur 12 zeichen kodieren.
Wird dem UPC Barcode eine Null vorangestellt ist er kodierungstechnisch kompatibel mit dem EAN13 Barcode,
die Kontextinformation ist aber nicht offiziell registriert (Instore Barcode). UPC Barcodes sind hauptsächlich in
den USA und in Kanada verbreitet.

Code39 Code39 ist ein alphanumerischer Barcode mit folgendem Zeichenvorrat:
A .. Z, 0 .. 9, $, %, /, +, ., -
Er ist unter ISO/IEC 16388 spezifiziert [25]. Das Start- und Endzeichen wird mit einem *-Zeichen identifiziert.
Code39 besitzt eine Erweiterung mit welcher es möglich ist, beinahe den gesamten ASCII Zeichensatz darzu-

                                                                                                        ABCinfo
24

stellen. Da ein ASCII Zeichen aus zwei Zeichen des Barcodes besteht, ergibt sich dabei jedoch eine geringe
Informationsdichte.
Aufgrund des einfachen Aufbaus und der hohen Drucktoleranz geniesst Code39, trotz seines Status als ältester
alphanumerischer Barcode, immernoch eine hohe Bedeutung.

Zweidimensionale Barcodes Die Überschrift dieses Abschnittes ist nur bedingt korrekt. Zweidimensionale
Barcodes bestehen nur selten wirklich aus Bars. Die meisten 2D Codes basieren auf dem Prinzip der Matrixco-
dierung.

Stapelcode Der Stapelcode ist eine Übergangslösung zwischen linearen Barcodes und 2D Matrixcodes. Der
Vorteil besteht aus den Vorzügen der zweidimensionalen Kodierung und der gleichzeitigen Verwendung von
alten Geräten wie dem Handscanner oder CCD Lesegeräten.

PDF417 PDF ist die Abkürzung für ’Portable Data File’. Das Einsatzgebiet bezieht sich hauptsächlich auf
die Logistik. Dieser Code eignet sich ideal dazu Zusatzinformationen anzubringen, wie beispiesweise Zustell-
adresse, Versand- und sonstige Informationen. PDF417 teilt sich für jede Zeile dasselbe Start- und Endzeichen.
Damit sind alle alphanumerischen Zeichen kodierbar.

Matrixcode Mit der Verwendung von Matrixcodes ist es möglich ein vielfaches an Informationsdichte zu
erhalten. Da das Gesamtbild des Codes benötigt wird, sind Matrixcodes nur mit CCD-Scannern und –Kameras
dekodierbar. Aufgrund der geringen optischen Auflösung und der mechanischen Strahlablenkung, scheidet die
Verwendung von Lasergeräten aus. Zudem reicht die Entnahme einer einzelnen Scanline zur anschliessenden
Auswertung nicht mehr aus.

QR Code Der zweidimensionaler QR Code wurde in Japan von der Firma ’Denso’ im Jahre 1994 entwickelt.
Er wurde ursprünglich in der Automobilindustrie eingesetzt, ist aber heute sehr weit verbreitet. Mittlerweilen hat
er den Sprung nach Europa geschafft, wo Firmen wie ’kaywa’ [10] in Kooperation mit ’Swisscom Mobile’ ihre
Dienstleistungen mit Hilfe des QR Codes anbieten. QR steht für Quick Response. Über drei Eckmarkierungen
wird das Lesegerät kalibiert. Die folgende Auflistung zeigt die hohe Informationsdichte von QR Codes.
    • binäre Daten: 23624 Bits
    • numerische Daten: 7089 numerische Zeichen
    • alphanumerische Daten: 4296 alphanumerische Zeichen

DataMatrix Der DataMatrix Code wird hauptsächlich in der Elektronik- und Autoindustrie eingesetzt. Er ist
mit allen gängigen Drucktechniken, insbesonders mit der Direktmarkierung 3 , aufzubringen. Zur Orientierung
beim Lesen der vier Sektoren dieses Codetyps befindet sich am linken, sowie am unteren Rand je ein Balken.

Aztec Code Dieser Code ist zweidimensional und nicht standardisiert. Er wird von der Deutschen Bahn sowie
der SBB für die Online Bahntickets eingesetzt. Mit dem Aztec Code können bis zu 3750 numerische, oder 3000
alphanumerische Zeichen kodiert werden. Dabei beherrscht er den kompletten ASCII-Zeichensatz. Abhängig
von der Modulgrösse, liegt die Fehlerkorrektur zwischen 25% und 40%. [24] Das Lesegerät orientiert sich am
Quadrat im Zentrum.
   3 Mit Direktmarkierung ist gemeint, dass Produkte direkt mittels Lasergravur oder Nadelgravur, wie auch mittels Prägung markiert

werden, das heisst es wird keine Etikette verwendet und der Code ist fix mit der Objekt dauerhaft verbunden.

                                                                                                                         ABCinfo
25

                      (a) QR Code                                (b) Cheeseburger in Japan

Abbildung 11: Abbildung 11(a) zeigt einen QR Code mit der Kontextinformation ’ABCinfo’ , Abbildung 11(b)
zeigt eine Fastfood Verpackung.

                                                     (a) Aztec
                                                     Code

       Abbildung 12: Abbildung 12(a) zeigt einen Aztec Code mit der Kontextinformation ’ABCinfo’.

MaxiCode Firmen wie UPS verwenden den MaxiCode zum Einsatz in ihrer Logistik. Dieser Code ist rasch
dekodierbar und weist eine sechseckige Form auf. Das Lesegerät kalibriert sich an den Zentrumsmarkierungen.

ShotCode Der ShotCode [23] ist ein von der Cambridge University im Jahr 1999 entwickelter, kreisförmiger
Barcode. Er wird von einer Kamera eines mobilen Telefons oder einer Webcam erkannt und ausgewertet. Der
ShotCode besteht aus einem zentralen Punkt, welcher von mehreren Ringsegmenten umgeben ist. Die Erken-
nungssoftware misst den Abstand und den Winkel zwischen den Blöcken und zum zentralen Punkt und erstellt
so ein Bitmuster. Hierfür ist die Kamera eines Mobiltelefons oder eine Webcam ausreichend. Das Bitmuster
wird anschliessend an einen Server übertragen, welcher die passende Kontextinformation zurückliefert. Meis-
tens handelt es sich hierbei um Webadressen.

Barcode Lesegeräte
Was für die Vielfalt an Barcodetypen und Anwendungen im Bereich der Barcodelösungen zutrifft, gilt gleicher-
massen auch für den Bereich der Dekodierung, der mit einer grossen Vielfalt an Lesegeräten ausgestattet ist.
Es wird zwischen drei Gruppen unterschieden, auf welche nachfolgend näher eingegangen wird. Dabei wird
jeweils lediglich die technische Funktionsweise erläutert und auf Fakten wie Preis und Schnelligkeit verzichtet.

Lesestift Eine Leuchtdiode (LED) im Wellenlängenbereich von Rot und eine Leuchtdiode im Infrarotbereich
bestrahlen die zu lesende Oberfläche. Das reflektierte Licht wird durch eine Linse an den Fototransistor geleitet.
Von dort übernimmt die Dekodierhardware die Daten.

                                                                                                         ABCinfo
26

CCD Scanner Ein CCD Scanner arbeitet mit einer oder mehreren Leuchtdioden, welche den Barcode mit
Licht bestrahlen. Eine Abbildung des Barcodes wird anschliessend an eine Reihe von Fotozellen übertragen.
Anstatt die Balken und Lücken in Folge zu interpretieren, erstellt der Scanner ein binäres Muster aller Fotozellen
die Informationen über Helligkeitswerte enthalten.

Laserscanner Der Laserscanner projiziert einen Laserstrahl über Polygonspiegel direkt auf den Barcode. Das
vom Barcode reflektierte Licht wird über Spiegel und Linsen an einen Fototransistor geleitet. Theoretisch ist es
möglich Barcodes mit einer Raumbewegung von 2.5 m   s zu dekodieren. Daher eignet sich der Laserscanner sehr
gut für Warenhäuser oder Gepäckabfertigungen.

Probleme
Nicht nur die Architektur von beispielsweise CMOS Sensoren4 lassen ein Bild bei der Transformation von der
Objekt- in die Bildebene an Qualität verlieren. Oft ist es der Fall, dass bereits das Objektbild eine schlechte Güte
besitzt. Der Ursprung dafür liegt entweder im schlechten Aufdruck des Barcodes auf seinen Artikel, oder darin,
dass der Barcode aufgrund der Verpackungseigenschaft zerknittert oder verzerrt ist. Mobilgerätekameras haben
zwar einen grossen technischen Fortschritt hinter sich, noch ist das ’Snap-and-Go’, wie man es von Spiegelre-
flexkameras her kennt, jedoch nicht gegeben. Eine ruhige Hand des Anwenders ist immernoch gefragt um eine
optimale Bildqualität zu erhalten. Die folgenden Abbildungen visualisieren das angesprochene Güteproblem.

   (a) Fehlende Pixel, falsche Breiten der (b) Zerstörte und/oder fehlende Informati-            (c) Schlechte Druckqualität
   Balken und Lücken                      on durch Blitzlicht oder Reflektionen.

Abbildung 13: In den Bilder 13(a), 13(b) und 13(c) werden einige Problematiken bezüglich des Eingangsbildes
visualisiert.

Die linke Abbildung zeigt einen Barcode mit ungenauen Modulwerten. Balken und Lücken, welche laut Spezi-
fikation dieselbe Breite haben müssten, weisen diese Eigenschaft nicht auf. Eine schlechte Druckqualität oder
die perspektivische Verzerrung bei der Bildaufnahme sind die Ursache dieses Problems. Oft bringen Flaschen
und Verpackungen aus Plastik und Papier diese Eigenschaften mit sich.
Die mittlere Abbildung zeigt einen Barcode mit zerstörten Bildinformationen durch Blitzlicht und Reflektionen.
Schlimmstenfalls sind nicht mehr alle benötigten Informationen zur Dekodierung vorhanden und das Bild wird
unbrauchbar. Die Ausleuchtung des Barcodes soll deshalb ohne Blitz nur durch die Nutzung des Umgebungs-
lichtes erfolgen.
Die rechte Abbildung zeigt ein Beispiel eines mangelhaften Druckbildes. Die dabei ins Papier diffundierte Farbe
birgt Probleme bei der späteren Binarisierung eines Bildes. Dasselbe Problem tritt auf, wenn sich Farbe auf einer
Oberfläche (meist Plastik) zusammenzieht und sich Lücken innerhalb von Balken bilden.
Umgebungselemente auf dem Bild, wie beispielsweise Inhaltsstoffangaben, können die Algorithmik zur Deko-
dierung ebenfalls beeinträchtigen, da diese oft dieselbe Charakteristik wie der Barcode selbst haben.

    4 Complementary Metal Oxide Semiconductor (CMOS, dt. komplementärer Metall-Oxid-Halbleiter) ist eine Logikfamilie aus der Elek-

tronik. Ein Active Pixel Sensor (APS, deutsch: aktiver Pixelsensor) ist ein Halbleiterdetektor zur Lichtmessung, der in CMOS-Technologie
gefertigt ist und deshalb oft als CMOS-Sensor bezeichnet wird.

                                                                                                                             ABCinfo
27

In den folgenden Konzepten wird aufgezeigt, wie und womit diese Probleme vermindert oder gelöst werden
können. Dies gelingt nicht immer und lässt die Erkenntnis zu, dass nicht jedes Bild, welches vom Auge als
qualitativ ausreichend bewertet wird, auch tatsächlich verwendet werden kann.

                                                                                                  ABCinfo
28

2.2.2   Computer Vision Konzepte
Punktoperationen
Unter dem Begriff der Punktoperatoren versteht man Verfahren zur Änderungen von Pixelwerten im Allgemei-
nen, dies kann zum Beispiel eine Kontrastverstärkung, Gamma- oder Helligkeitskorrektur sein. Sie verdanken
ihren Namen der Tatsache, dass bei allen Verfahren jedes Pixel eines Bildes nur in Abhängigkeit von seinem
Farb- oder Grauwert und seiner Position im Bild ein neuer Farb- oder Grauwert berechnet wird, ohne dass eine
Nachbarschaft, seine Umgebung oder gar das Gesammtbild betrachtet wird. Die Bildgrösse und die Position des
Pixels ändert sich nicht. Punktoperationen stellen meistens den ersten Schritt der Vorverarbeitung dar, um den
Bildkontrast zu verstärken oder Belichtungsfehler bei der Bildaufnahme auszugleichen.

Grauwertkonvertierung Grauwertbilder, auch als Intensitätsbilder bezeichnet, verfügen über einen Hellig-
keitskanal, welcher die Helligkeit, die Intensität oder die Dichte des Bildes beschreibt. Die Darstellung erfolgt
im Format 0 · · · (2k − 1). Ein Grautwertbild enthält also nur positive Werte. Der Wert 0 (null) beschreibt die
minimale Helligkeit: schwarz. Bei einer Auflösung von 8bit/Pixel, beschreibt der Wert 255 die maximale Hel-
ligkeit: weiss.

Histogrammanalyse In der digitalen Bildverarbeitung beschreibt ein Histogramm die statistische Häufigkeit
der Grauwerte, beziehungsweise der Farbwerte in einem Bild. Das Histogramm eines Bildes erlaubt eine Aus-
sage über die vorkommenden Grau- oder Farbwerte und über den Kontrastumfang und die Helligkeit des Bil-
des. In einem Farbbild kann ein Histogramm entweder über alle drei Farbkanäle oder für jeden Kanal einzeln
erstellt werden. Die Bildverarbeitung arbeitet meist mit Grauwertbildern und arbeitet darum nur mit einem
Histogramm.

Schwellwertbildung Der Schwellwert, auch häufig als Threshold (engl.) anzutreffen, beschreibt eine defi-
nierte Grenze zur Verarbeitung eines Signals. Bei Unterschreitung des Schwellwertes, wird das Signal in einen
neuen Ausgabewert umgewandelt. Meist ist dieser Wert 0 (null). Bei Überschreitung des Wertes, wird das Si-
gnal auf einen konstanten Wert gehoben. Dieser ist meist 1 um nur Werte von 0 oder 1 zu erhalten, oder bei
Grauwertbildern (8bit) 0 oder 255. Diese Trennung der Signale resultiert in einer Binarisierung der Werte. Es
existieren nur noch zwei unterschiedliche Zustände für einen grossen Wertebereich. Diese Eigenschaft kann
man sich zur Trennung eines Barcodes vom Hintergrund mittels einer Schwellwertoperation zu nutzen machen.
Die Grundlagen hierzu sind die Helligkeitswerte der einzelnen Bildpunkte. Bei ungleichmässiger Ausleuchtung
eines Bildes, kann es sinnvoll sein, den Schwellwert dynamisch anzupassen. Die Helligkeits- und Kontrast-
verhältnisse der Umgebung sind dabei massgeblich.
                                            (
                                              1 falls pixelin ≥ Schwellwert
                                 pixelout =                                                                (1)
                                              0 falls pixelin < Schwellwert

                                                                                                        ABCinfo
29

Lokale Operationen
Lokale Operatoren sind Verfahren, welche Pixelwerte abhängig von ihrer Umgebung oder des ganzen Bildes,
verändern. Diese Verfahren werden in der Regel mittels Filter auf ein Bild angewandt.

Filter Operationen, welche ein Eingangsbild mit Hilfe einer mathematischen Operation in ein Ausgangsbild
überführen, werden als Filter bezeichnet. Die folgenden Filter beziehen sich im Wesentlichen auf Rasterbilder.
Das Ziel einer Filterung ist die Verbesserung eines vorhandenen Musters. Dies kann eine Reduktion störender
Bildanteile, die Hervorhebung von informativen Bildanteilen oder die Restauration eines idealen Musters sein.
Die Bildgeometrie ändert sich bei der Anwendung eines Filters nicht, das heisst, die Koordinaten bleiben erhal-
ten.

    Filtermatrix, -maske Filter bestehen in der Regel, aber nicht zwingenderweise, aus einer m · n Ma-
trix. Jeder Eintrag dieser Matrix enthält einen Filterkoeffizienten, welcher das Gewicht beschreibt mit dem die
Nachbarpixel des zu transformierenden Pixels multipliziert werden. Ein Pixel g(x, y) im Ausgangsbild besteht
demnach aus dem Wert, welcher sich durch das Gewichten, Summieren und Dividieren durch die Gesamtsum-
me der Filtergewichte seines Ursprungswertes mit den entsprechenden Nachbarspixeln ergibt. Die Filtermatrix
muss zur Berechnung nicht zwingend mit ihrem Zentrum über das Eingangspixel gelegt werden. Dieser soge-
nannte ’Hotspot’ kann innerhalb der Matrix frei gewählt werden. Damit wird erreicht, dass nicht alle umliegen-
den Pixel in die Berechnung miteinbezogen werden. Die Filtermatrix kann sowohl positive, wie auch negative
Werte beinhalten.

   Anwendung des Filters
                                            X
                              pixelout ←             pixelin (u + i, v + j) · Filter(i, j)                    (2)
                                           (i,j)R

   [27], [36]

Kantenhervorhebung

    Laplace-Filter Zur Hervorhebung der Kanten in einem Bild kann ein sogenannter Laplace Filter einge-
setzt werden. Dieser schärft das Bild mit einer speziellen Filtermatrix. Dabei kann beispielsweise eine 3 · 3
Matrix eingesetzt werden. Wird nur eine Bildzeile gefiltert, bietet sich die Verwendung eines Filtervektors 4 an.
                                                                  
                                                     1 1 1
                                            1/1 ∗  1 −4 1                                                   (3)
                                                     1 1 1
                                                                    
                                            1/1 ∗ −1 2 −1                                                     (4)

    Canny-Algorithmus Dieser Algorithmus wurde von John Canny entwickelt und beschreibt ein Verfahren
zur Kantendetektion in Grauwertbildern. Der Canny-Algorithmus besteht aus diversen Faltungsoperationen und
liefert ein Ausgangsbild der Kanten des Eingangsbildes. Dabei werden die Kanten hell, der Hintergrund dunkel
dargestellt. Das Bild wird zuerst mit einem Gauss Filter geglättet und anschliessend mit einem Sobeloperator
gefaltet. Das daraus resultierende Ausgangsbild enthält die horizontalen und vertikalen Gradienten (Kanten) des
Eingangsbildes.

                                                                                                       ABCinfo
Sie können auch lesen