    Stand: 24.03.1999
    ----------------------------------------------------------------------

    NoAd: Keine Werbung auf dem Viorekorder: PC Steuerung
    Copyright (C) 1999 Peter Richert (Richert@FH-Muenster.DE)

    Telefon +49 2551 9-62125, Fax -62391

    Fachhochschule Mnster, Fachbereich Elektrotechnik
    eLKaTe - Labor Kommunikationstechnik
    Stegerwaldstrasse 39, 48565 Steinfurt, GERMANY

    ----------------------------------------------------------------------
 
Software

Das gesamte Projekt besteht aus einem Hard- und einem Softwareteil. Da der 
Hardwareteil erst zu Ende des Diplomarbeit realisiert und nur auf das 
Ntigste beschrnkt wurde, ist der grte Teil der Aufgabe als reine 
Softwarearbeit zu sehen.


Problemanalyse

Mit dem Programm "NoAd" soll zwischen einer Werbesendung und dem 
Fernsehprogramm unterschieden werden knnen. Zu diesem Zweck bedient sich 
das entwickelte Programm einer zur TV-Karte mitgelieferten Software 
namens "Hauppauge Win/TV". Von diesem Programm erhlt die erstellte 
Anwendung das gesamte, oder auch nur Auszge des empfangenen, 
Fernsehbildes. 

Die verwendeten Algorithmen verwenden ausschlielich optische 
Erkennungsmerkmale zur Unterscheidung. Die Steuerung ist mglichst 
einfach gehalten worden und mit wenigen Tastenkombinationen zu 
bedienen. Die Steuerung des Videorecorders wird mit einem Nachbau 
einer Infrarotfernbedienung realisiert. 


Pflichtenheft

Die Mglichkeit verschiedene Gerte mit Hilfe des PC zu steuern erffnet 
viele Mglichkeiten. Wie bei allen Softwareprojekten knnen diese in 
drei Kategorien unterteilt sein:

- Notwendig, hier listen sich alle zur einwandfreien Bedienung bentigten 
  Funktionen auf
- Praktisch, die Funktionen, die einen komfortableren Umgang ermglichen
- "Nice to have", diesem Bereich knnen alle zustzlichen Funktionen 
 zugeordnet werden


Systemumgebung

Das gesamt Programm ist auf einem Pentium 90 mit 32 MB Arbeitsspeicher 
realisiert worden. Es wird zustzlich zu den blichen Peripheriegerten 
noch folgende Ausstattung bentigt:

1 freier PCI Steckplatz fr die Hauppauge TV Karte
1 freie serielle Schnittstelle

Die Anwendung luft auf dem Betriebssystem Windows 95 und hher und fr 
einem komfortablen Umgang sollte ein Prozessor ab 486 benutzt werden. 

Der Quellcode wurde in der Hochsprache Visual BASIC 5.0 von Microsoft erstellt.


Aufgabenstellung

Das Programm mu folgende Funktionen erfllen:

 1) Es mu auswhlen, welche Erkennungmethode angewendet werden kann
 2) Das Senderlogo mu im Fernsehbild gefunden werden
 3) Die Auswahl der zur Messung bentigten Punkte mu automatisch erfolgen
 4) Es mu eine eindeutige Entscheidung geben, ob das Logo mitgesendet 
    wird oder nicht
 5) Die Austastzeilen mssen, falls vorhanden, vermessen werden
 6) Die Austastzeilen mssen eindeutig identifiziert werden
 7) ber die serielle Schnittstelle mu die Hardware konfiguriert werden knnen
 8) Der Sendeteil mu die zu sendenden Impulse von der Software bermittelt 
    bekommen
 9) Die Aufnahme mu zeitabhngig erfolgen
10) Programmierung des Videorecorders ggf. vom PC


Bedieneroberflche
			
Die Bedieneroberflche wurde bewut einfach gehalten. Die geringe Breite 
des Fensters verhindert ein berlappen von NoAd und Hauppauge. Dieses 
wrde zu falschen Mewerten bei der bertragung vom Fernsehbild fhren. 
Die Anzeigen der Formen zur Programmierung (Form5), der Video- und 
Fernsehfernbedienung (Form 3 und 4) werden erst bei Bedarf ein- und 
ausgeschaltet.

Das Bedienungsmen gliedert sich nach folgendem Schema:


Modul 1

Deklarationen & Initialisierung

Die zu Beginn eines jeden Programmes ausgefhrte Variablendeklaration 
dient dazu, den Namen und den gltigen Wertebereich der benutzten 
Variablen zu definieren. Ferner sind dort Konstanten, benutzerdefinierte 
Datentypen und deren Gltigkeitsraum festgelegt.


Umrechnung der Farbwerte

Die Farbwerte in Visual BASIC werden durch eine Ganzzahl von Typ "Long" 
dargestellt. Das bedeutet 24 Bit pro Farbe oder 8 Bit pro Grundfarbe. 
Um aus diesem 24 Bit Wert die Komponenten der Grundfarben zu ermitteln 
wird die 24 Bit Zahl mit verschiedenen Zahlenkombinationen maskiert.
Ein Farbwert, welcher aus einem Rotanteil von 64, einem Grnanteil von 
128 und einem Blauanteil von 192 besteht hat als Longzahl der Wert 
12615744dez (=20*64+28*128+216*192 bzw. C08040hex). Je nachdem, 
welche Grundfarbe man haben mchte, ist die zum Maskieren benutzte 
Zahl 0000FFhex fr Rot, 00FF00hex fr Grn und FF0000hex fr Blau. Bei 
Rot hat man nach der Maskierung bereits eine Zahl zwischen 0 und 255, 
die entstandenen Werte bei Grn und Blau mssen noch um 8 bzw. 16 Bit 
nach rechts verschoben werden um Werte ebenfalls von 0 bis 255 zu erhalten.
Die Funktionen "Long_Helligkeit" und "Helligkeit_Long" benutzen 
dieses Verfahren, um die Transformation vom dreidimensionalen in den 
eindimensionalen Zustandsraum zu errechnen. 


Finden des Logos

Bevor Logos im aktuellen Fernsehbild festgestellt werden knnen mssen 
ihre Position und ihre statistischen Eigenschaften ermittelt werden. 
Die Funktion "Logo_finden" ermittelt die X&Y Koordinate des Logos per 
Mittelwertbildung. Das von der Hauppauge Applikation dargestellte 
Fernsehbild wird um den Faktor 10 verkleinert und nur mit seinem 8 Bit 
Grauwert dargestellt. Die Verkleinerung bedeutet eine Reduzierung der 
Pixelzahl, und damit eine Verringerung von Rechenzeit, um der Faktor 100. 
Die Umwandlung in Grauwerte dient dazu, den aufflligsten Punkt nur nach 
einem Kriterium, seiner Helligkeitsabweichung vom Durchschnitt, 
festzustellen.  
	
Wird die Hauppauge Applikation im maximierten Modus mit dem Seitenverhltnis 
4:3 dargestellt, besitzt das Fernsehbild die Gre 768x568 Pixel. Da 
aber die Logos nicht am ueren Rand des Fernsehbildes zu finden sind, 
wird nur die Gre von 750x550 Pixel mit Hilfe der Funktion 
CaptureWindow() in das Hilfsbild "picture2" geschrieben. Die 
PaintPicture-Methode von Visual BASIC komprimiert dann das 750x550 Bild 
auf die Mae 75x55.
Es wird nun eine Schleife gebildet in der die Helligkeit jedes Punkt des 
verkleinerten Bildes ermittelt wird und mit seinem jeweiligen 
Vorgnger(n) zu einem gemittelten Wert in Punkt2 geschrieben wird.
Um festzustellen, wie hoch die mittlere Helligkeit des gesamten Bildes 
ist, wird die Variabel m ermittelt. Diese wird zur Referenz, um den 
aufflligsten Punkt zu finden. 

In jedem Durchlauf wird ein X-Y Punkt ermittelt, dessen Helligkeit sich 
am meisten von der durchschnittlichen Helligkeit m unterscheidet. Ein 
weiteres  Kriterium, welche seine Koordinaten erfllen mssen, ist  die 
Lage auerhalb eines sogenannten Fensters. Sollte durch ungnstige 
Umstnde ein besonders heller oder dunkler Punkt sich innerhalb der 
Bildschirmmitte befinden, werden seine Koordinaten nicht als Logopunkte 
benutzt. Dieses kann man ausschlieen, da sich die Logos immer am Rand, 
nie aber in der Bildmitte, befinden.

Es hat sich gezeigt, da undurchsichtige Logos schneller gefunden werden 
als transparente. Dieses ist dadurch zu erklren, da bei einer 
Mittelwertbildung ein Punkt nicht mehr als aufflligster in Frage kommen 
kann, wenn seine Helligkeit einmal unter der des tatschlichen Logos 
gekommen ist.
Um dem Benutzer einen optischen Hinweis zu geben, wo sich z.Zt. der 
aufflligste Punkt  befindet, wird abhngig von seiner Helligkeit ein 
weies oder schwarzes Fadenkreuz eingezeichnet. Stimmt sein Schnittpunkt 
mit dem tatschlichen Logo berein, kann mit Hilfe des Stopp-Buttons die 
Suche nach dem Logo manuell beendet werden. Verschiedene Messungen haben 
ergeben, da die Dauer bis zum Finden des Logos stark von dem jeweiligen 
Fernsehbild abhngt. Fr den praktischen Einsatz werden 50 Bilder
(ca. 1,5 sec/Bild) als ausreichend angenommen, um die genaue Position 
der Senderkennung zu ermitteln.


Eigenschaften des Logos

Die Position des Logos ist nun erkannt worden. Da nun nur noch ein 
kleiner Bildausschnitt untersucht werden mu, kann auf die Verkleinerung 
um den Faktor 10 verzichtet werden. Ferner wird nun auch wieder, um 
keinen Informationsverlust zu bekommen, der komplette, dreidimensional 
Farbraum benutzt. 
Vom Prinzip wird in diese Routine das gleiche gemacht wie bei der 
Funktion "Logo_finden". Es wird eine Mittelwertbildung gestartet, welche 
eine Flche von 100x100 Pixel rund um Logo aufspannt. In dieser Funktion 
wird nun aber nicht die mittlere Helligkeit, sondern die mittlere 
Helligkeit der Grundfarben, ermittelt und in die Variabeln mhr, mhg und 
mhb geschrieben.
Auch der Erfolg dieser Routine hngt stark von den statistischen 
Eigenschaften des gesendeten Fernsehprogrammes ab, deshalb wird auch 
hier eine relativ groe Medauer als Maximum vorgegeben, welche bei 
gnstigen Hintergrnden vom Benutzer wieder per Hand gestoppt werden kann.


Mepunkte ermitteln

Nachdem das Logo im Fernsehbild gefunden wurde, seine statistischen 
Eigenschaften durch eine Mittelwertbildung festgestellt wurde, sollen 
nun die Punkte identifiziert werden, an denen sich das Logo eindeutig 
von jedem beliebigen Fernsehbild unterscheidet. Die gefundenen Mepunkte 
werden dann, nach Grundfarben getrennt, in die entsprechenden Variablen 
hineingeschrieben. 

Dieses geschieht nach folgendem Algorithmus: 

- Nach mehreren Durchlufen pendeln sich die statistisch unabhngigen 
  Bildpunkte einem Grauwert entgegen. Diese Punkte bilden spter die 
  Referenzpunkte zur Logoidentifizierung.

- Je nachdem, welche Farbwerte das willkrliche Fernsehbild in der Mezeit 
  hatte, sind nach Beendigung des Mevorganges diese Grauwerte durch 
  einen RGB-Anteil gekennzeichnet. Der theoretische Endwert liegt bei 
  genau der Hlfte des mglichen Wertbereiches, dafr wren aber unendlich 
  viele Messungen erforderlich. Um die Toleranz zu bercksichtigen, welche 
  in praktischen Messungen vorkommt, werden die bereits ermittelten mhr, 
  mhg und mhb Werte benutzt. 

- Zu Beginn dieser Routine werden die Koordinaten links, rechts, oben und 
  unten genau in die Mitte des 100 x 100 Pixel groen Fensters gelegt. 
  Ihre Bedeutung wird spter erklrt. 
  Die Helligkeit und die Farbtoleranz, von denen sich ein Mepunkt von 
  einem anderen Punkt des Bildes unterscheidet, wird mit 51 (%) angegeben.

- Die Flche  von 100 x 100 Pixel wird nun mehrmals gescannt. Die 
  Schleifenbedingungen lauten: Es sind noch weniger als 3000 Mepunkte 
  ermittelt worden und die Helligkeitstoleranz ist noch grer als 30%. 
  Ferner ist es natrlich auch mglich, den Vorgang per Stopp-Button zu 
  beenden. 

- Punkte, die als Mepunkte in Frage kommen, mssen zuerst mehrere 
  Kriterien erfllen. Sie drfen nicht zu dunkel sein (vgl.) und nicht 
  bereits als Mepunkt benutzt werden. Besitzt der aktuelle Punkt diese 
  Eigenschaften mu weiter seine Helligkeit von der gesamten Bildhelligkeit 
  um eine dynamischen Toleranzbereich abweichen.

- Um nicht spter versehentlich Punkte des Logos als Referenzpunkte zu 
  benutzen, werden die Rnder des Logos in die Variablen links, recht, 
  oben und unten geschrieben. Nur Punkte auerhalb dieses Viereck kommen 
  spter als Referenzpunkte in Frage.

- Sind alle diese Hrden genommen kommt nun die Auswahl, welche Farbe bei 
  dem Punkt zur Messung genommen werden kann. Als Ma dient wieder die 
  Toleranz, welche auch schon bei der Helligkeit zum tragen kam. Sind 
  seine Farbwerte, entsprechend der Logoeigenschaft hell/dunkel, ber oder 
  unterhalb der mittleren Farbwerte mhr, mhg, mhb, wird die entsprechende 
  Grundfarbe in das Bild eingetragen. Sind zwei oder mehr Grundfarben 
  einzuzeichnen wir entsprechend auch die Mischfarbe Gelb, Zyan, Magenta 
  oder Wei eingezeichnet. Die eingezeichneten Bildpunkte unterscheiden 
  in diesem Stadium aber nicht mehr, ob der Punkt heller oder dunkler war.

- Ist eine der Schleifenbedingungen erfllt, werden die Koordinaten der 
  eingezeichneten Punkte in die Variablen der Mepunkte bertragen. Hierzu 
  wird ein letztes Mal das Bild zeilen- und spaltenweise abgetastet und 
  bei einem farbigen Punkt nun seine Koordinaten zur spteren 
  Identifizierung herangezogen.

- Zum Schlu der Routine wird jedem Mepunkt auch ein Referenzpunkt 
  zugewiesen. Um diese mglichst unabhnging vom aktuellen Fernsehbild 
  zu ermitteln wird eine Zufallsmechanismus gestartet. Dieser zeichnet an 
  den noch nicht benutzten Stellen graue Punkte ein und speichert dessen 
  Koordinaten in die Referenzpunktmatrix. Alle Referenzpunkte liegen 
  innerhalb des 100 x 100 Bildes, aber auerhalb des Logorandes.


Feststellen des Logos

Diese Funktion stellt fest, ob das eingestellte Senderlogo z.Zt. 
ausgesendet wird. Zuerst wird das 100x100 Bild in den Bildspeicher 
geschrieben. Ein Zhlschleife bis zur Anzahl der Mepunkte wird 
gestartet. In ihr geschieht folgendes:

- Die Werte des einzelnen Grundfarbenkomponenten werden ermittelt, 
  ebenso die Farbwerte des zugehrigen Referenzpunktes.

- Abhngig, ob das Logo hell oder dunkel ist wird in die entsprechende 
  Verzweigung gegangen. Bei einem hellen Logo darf die Helligkeit des 
  Referenzpunktes nicht oberhalb, bei einem dunklen Logo nicht unterhalb 
  einer fest eingestellten Schwelle liegen. Gibt diese Bedingung den 
  Mepunkt gltig, werden seine Grundfarbenkomponenten mit denen des 
  Referenzpunktes verglichen. Alle Einzelkomponenten werden dann 
  eingezeichnet. Die Grenze, die dort berschritten  werden soll, ist 
  nur noch halb so gro wie beim Ermitteln der Mepunkte. Grund dafr 
  ist die Tatsache, das bei der Mittelwertbildung der Vergleich 
  Me- <-> Referenzpunkt unter idealeren Bedingen stattfand. Ist der 
  Mepunkt heller/dunkler als der Vergleichspunkt, wird 
  Logo_vorhanden um eins erhht, sonst Logo_nichtvorhanden.

- Die Entscheidung, ob das Logo vorhanden ist oder nicht, unterliegt 
  aber noch weiteren Kriterien. So mu mindestens ein Drittel der 
  Mepunkte zur Berechnung herangezogen worden sein, sonst wird die 
  Messung fr ungltig erklrt. 

- Soll die Aussage gemacht werden :Das Logo ist vorhanden mu der 
  Wert in Logo_vorhanden um ein Vielfaches, im Programm dem 
  dreifachen, dem Wert in Logo_nichtvorhanden bersteigen. 

- Der Bereich von Logo_vorhanden=3*Logo_nichtvorhanden bis zur Gleichheit 
  wird als Sicherheitsbereich genommen und dient nicht der Auswertung.

- Ist dieses nicht der Fall, sondern ist vielmehr der Wert in 
  Logo_nichtvorhanden grer, so mu davon ausgegangen werden, da z.Zt. 
  das Logo nicht gesendet wird.

- Um einer Fehlmessung vorzubeugen wird noch eine Hysterese in die 
  Bewertung mit einbezogen. Die Entscheidung Werbung ja/nein ndert 
  erst dann ihren Wert, wenn zweimal hintereinander die Aussage gemacht 
  werden konnte: Logo ist vorhanden bzw. Logo_nichtvorhanden.

- Ist die Aussage Werbung ja/nein gemacht worden wird die 
  Aufnahmesteuerung aufgerufen. Sie stellt abhngig von der Uhrzeit 
  und dem Fernsehinhalt fest, ob und welcher Befehl an den Videorecorder 
  gesendet werden mu.


Messen der Austastzeilen

Zuerst wird wieder ein um den Faktor 10 verkleinertes Fernsehbild per 
Mittelwertbildung gefiltert. Die Anzahl der Durchlufe betrgt fnf. 
Anschlieend werden von oberen Bildrand aus startend die 
Helligkeitswerte einer Zeile aufsummiert. Liegt diese Helligkeit unter 
2000 ((26/Pixel) handelt es sich um eine Austastzeile. Der theoretische 
Wert einer solchen Zeile liegt bei Null, aber durch Fehler in der 
Digitalisierung sowie der Tatsache, da einige Logos sich, zu mindestens 
teilweise, innerhalb der Austastzeilen befinden, erhht den gesamten 
Helligkeitswert auf bis zu 1600. Daher wird mit dem Wert 2000 noch eine 
gewisse Toleranz eingerumt. Steigt der Wert auf ber 2000 sind die 
Austastzeilen beendet und der eigentliche Film fngt an. Der gleiche 
Algorithmus wird ebenfalls bei der unteren Schwarzflche benutzt, nur 
das jetzt von unten nach oben die Helligkeitswerte ermittelt werden.


Austastzeilen identifizieren

Die Rnder der Schwarzflchen sind in globale Variablen geschrieben 
worden. Um die Mezeit zu verkrzen wird jetzt nur von jedem zweiten 
Pixel in den Austast und Referenzzeilen die Helligkeit ermittelt. Bevor 
eine Aussage zum Vorhandensein der Austastzeilen gemacht werden kann, 
mu sichergestellt werden, da nicht ein dunkles Fernsehbild gesendet wird.
Daher werden die Helligkeitswerte des Austastzeilen nur dann gewertet, 
wenn die nher zum Bildmittelpunkt liegenden Zeilen hell genug sind. 
Danach erst wird die Entscheidung Werbung ja/nein getroffen.
Mit dieser Aussage kann dann die Aufnahmesteuerung aufgerufen werden


Die Funktion Kommando_an_IC_senden

Die Aufgabe dieser Funktion ist es, das acht Bit breite Datenwort des 
bergabeparameters in eine Zahl von Typ Byte umzuwandeln. Der 
bergabewert ist eine Textvariable in folgendem Format: MSBXXXXXXLSB. 
Da bei der seriellen Schnittstelle das LSB als erstes gesendet wird, 
mssen die einzelnen Bits in Ihrer Wertigkeit umgedreht werden. Das 
heit, da das achte Bit des Textes mit 1, das siebte mit zwei usw. 
multipliziert und anschlieend auf addiert wird. Anschlieend wird der 
Wert im Bereich von 0..255 an das Kommunikationssteuerelement 
MSComm1 gesendet. Diese Funktion dient ausschlielich dem Einstellen 
der intern Register des ICs CS 8130. Daher ist darauf zu achten, 
das die Freigabeleitung zum Programmieren (DTR)auf logisch 0 liegt.


Die Funktion Kommando_an_Fernbedienung_senden

Diese Funktion mu mehrere Aufgaben erfllen. Sie mu zum einen die 
Umwandlung in den Manchestercode bernehmen. Ferner ist es ihre Aufgabe 
zu unterscheiden, ob eine Taste einmal lange oder mehrmals kurz 
gedrckt wurde. Weiter mu die das Ziel des Infrarotkommandos kennen 
und den bentigten Befehl , der auch noch komplett invertiert werden 
mu, senden. Die Aufgaben werden wir folgt gelst:

- Es werden der Funktion drei bergabeparameter gegeben, 
  Steuerbit (0/1), Video_Fernseh$(00000/00101)  und das Kommando$ (xxxxxx).
- Zuerst wird die Unterscheidung gemacht, das jetzt ein neuer Befehl 
  gesendet wurde. Die Globale Variable Taste_gedrckt ndert immer zu 
  Beginn ihren Wert und wird gleichzeitig in den Biphasecode umgewandelt 
  und invertiert. Der gleiche Algorithmus wird auch bei der Variablen 
  Video_Fernseh$ benutzt. Anschlieend wird das Kommando bitweise 
  analysiert und jedes Bit wird wiederum umgewandelt und invertiert. 
  Das Startbit hat immer die Wertigkeit 1. Es wird ein 32 Zeichen 
  langer Sendestring gebildet, einschlielich vier Fllbits der 
  Wertigkeit 1 (LEDs aus). Diese 28 Zeichen werden in vier 
  8-Bit Datenwrter umgewandelt und an die serielle Schnittstelle 
  gesendet. Sicherheitshalber kann diese Sendung, in einer Schleife 
  fest programmiert, mehrmals gesendet werden.


Die Funktion Aufnahmesteuerung

Die Aufgabe dieser Funktion ist es, die Start- und Stoppzeit der 
aufzunehmende Fernsehsendung aufzunehmen und den passenden Datensatz 
des Senderlogos zu laden. Es erscheint beim Programmierwunsch ein 
weiteres Fenster, indem sich drei Textfenster und ein Button zu 
Besttigung befindet. Das genaue Verfahren zur Timerprogrammierung 
ist in der Bedienungsanleitung im Anhang beschrieben.
Das Timer-Steuerelement in der Hauptform vergleicht nach der 
Programmierung die aktuelle Uhrzeit mit der Startzeit. Zum Vergleich 
Uhrzeit mit Aufnahmestart und stopp wird die Uhrzeit in eine 
Variable des Typs long umgewandelt und zu Beginn des Programmstartes 
mit 999999 initialisiert. Bei Gleichheit wird der Algorithmus zum 
Ausmessen der Austastzeilen gestartet. Sind solche Bereiche nicht 
vorhanden wird die Unterscheidung Sendung oder Werbung vom 
Senderlogo anhngig gemacht.


Modul 2

Dieses Modul stellt die Schnittstelle zwischen der Hauppauge-Applikation 
und der Applikation zur Erkennung von Werbeblcken dar.


API Funktionen & Deklarationen

Die API ist eine Schnittstelle zur Programmierung von Windows 
Applikationen, die dem Programmierer von der Firma Microsoft zur 
Verfgung gestellt wird.


Die Funktion CaptureWindow

Die Funktion CaptureWindow kopiert einen angegebenen Bereich der 
Bildschirmes in ein dafr vorgesehenes Fenster der NoAd Applikation. 
Sie bekommt den Device Context(eine vom Betriebssystem vergebene 
Identifikationsnummer fr jedes Programm) und vier Punkte zum Kopieren 
des Bildes. Bevor ein Bild einer fremden Applikation in ein Visual 
BASIC Programm bernommen werden kann mu eine Umrechnung der benutzten 
Farbpalette auf die 24-Bit von VB umgerechnet werden. Anschlieend wird 
aus diesem Hilfsbild ein Bitmap gebildet und als Rckgabewert an die 
aufrufende Funktion bergeben.

