Ableitung, vereinfacht
Der Wert der ersten Ableitung, also die Steigung des Graphen an dieser Stelle, ermittelt sich anschließend näherungsweise aus der Differenz des ersten und des letzten Ringpufferelements. Ob die Steigungsraten positiv oder negativ ausfallen, interessiert in diesem Zusammenhang nicht, deshalb egalisiert die Funktion »abs()« jede Steigung zu einem positiven Wert.
Um festzustellen, ob der Algorithmus sich gerade in einem der gesuchten flachen Teile der Kurve befindet oder in einem eher welligen Bereich, unterhält das Skript einen zweiten Ringpuffer »@diff_ring«, der die letzten 50 ermittelten Werte für die erste Ableitung des Graphen enthält.
Die ab Zeile 76 definierte Funktion »avg()« rechnet den Mittelwert aller 50 Intensitätswerte aus. Ist der Algorithmus gerade in einem welligen Teil, reicht ein Mittelwert unterhalb der Schwelle von 3, um einen flachen Teil zu erkennen. Einmal in diesem Modus angelangt ist allerdings eine mittlere Steigung von mehr als 10 erforderlich, damit der Zustandsautomat sich wieder in einem welligen Bereich wähnt.
Werteübergabe
Jedes Mal, wenn ein flacher Bereich gefunden ist, speichert Zeile 52 die RGB-Werte des ersten dort gefundenen Pixels im Array »@ctl_points«. Nur drei flache Bereiche sind von Interesse, eventuell vorhandenen weiteren bereitet die »last«-Anweisung in Zeile 70 den Garaus. Die Funktion »Dump()« aus dem Yaml-Modul vom CPAN schließlich gibt das Ergebnis aus (Abbildung 6).
Abbildung 6: Das Skript »cardfind« nimmt den Namen einer Bilddatei entgegen, führt die Berechnungen eigenständig durch und gibt die Farbwerte der gesuchten Messwerte auf den Referenzkarten im Yaml-Format aus.
In einer »yml«-Datei »sample.yml« gespeichert und mit »-c sample.yml« an das im vorigen Snapshot erläuterte Skript »picfix« überreicht, korrigiert es die Farben nicht nur des Bildes mit den abgebildeten Karten, sondern auch noch beliebig viele weitere, die bei den gleichen oder zumindest sehr ähnlichen Lichtverhältnissen zustande kamen.
Doch nicht vergessen: Die Karten sind mittig ins Bild zu halten, damit der einfache Algorithmus sie auch finden kann. Andernfalls müsste tatsächlich ein ausgefuchsteres Verfahren her. Das wäre natürlich auch möglich - wie immer sind in Perl mit der reichen Modulauswahl auf dem CPAN der Fantasie keine Grenzen gesetzt. (jcb)
| Infos |
|---|
| [1] Listings zu diesem Artikel: [ftp://www.linux-magazin.de/pub/listings/magazin/2008/08/Perl] [2] Michael Schilli, "Farbenspiel": Linux-Magazin 07/08: [http://www.linux-magazin.de/Artikel/ausgabe/2008/07/perl/perl.html] |
| Der Autor |
|---|
|
Michael Schilli arbeitet als Software-Engineer bei Yahoo! in Sunnyvale, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) für Addison-Wesley geschrieben und ist unter [mschilli@perlmeister.com] zu erreichen. |
Diesen Artikel als PDF kaufen
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





