Die verfügbare Rechenleistung optimal nutzen

Effiziente Implementierung einer Verkehrszeichen-Erkennung

20. Dezember 2007, 12:22 Uhr | Thorsten Lorenzen
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Effiziente Implementierung einer Verkehrszeichen-Erkennung

Diese werden für die zukünftige Berechung benötigt. Im Wechsel wird der Prozessor auf die beiden Speicherbereiche zugreifen, um das komplette Bild oder auch nur einen interessanten Bereich zu berechnen.

Hinweise zur Effizienzsteigerung

Durch Ablegen der Daten und Konstantenlisten (Alpha LUT, LUT) in verschiedene Sub-Bänke kann die Rechenzeit optimiert werden, denn nur auf unterschiedliche Sub-Bänke kann simultan mit nur einem Prozessorzyklus zugegriffen werden.

Die Ergebnisse der Berechnung werden in eine Tabelle des L2-Onchip-Speichers (Gelb) geschrieben (Sobel ROI). Beim späteren Lesen fallen aus diesem Speicher zusätzliche Prozessortakte an. Bevor nun die Hough-Transformation gestartet wird, löst der Prozessor erneut die Übertragung eines Bildes aus (neues Bild; Get new image). Auch an dieser Stelle müssen nur zwei Register im DMA-Controller beschrieben werden, um sicherzustellen, dass die Daten zur Verarbeitung des Folgebildes rechtzeitig zur Verfügung stehen.

Im nächsten Schritt wird die Hough-Transformation ausgeführt. Diese greift auf die Ergebnisse des zuvor ausgeführten Sobel-Filters zu. Neben einer Tabelle mit Konstanten für die Kreisermittlung (Circle LUT) greift der Prozessor auf den Hough-Raum zu (Hough Space), der im langsamen externen SDRAM-Speicher liegt. Da die berechneten Werte mit Werten im Hough-Raum akkumuliert werden müssen, muss der Prozessor die betreffende Speicherstelle zunächst lesen, mit dem Ergebnis akkumulieren und dann zurückschreiben. In diesem Falle wird nur jedes Lesen mehrere Prozessortakte benötigen – nicht aber das darauffolgende Schreiben!

Zudem muss man wissen, dass jeder Schreibvorgang von einem Rückschreibepuffer unterstützt wird. Liegen also zwischen Schreiboperationen genügend Zyklen (z.B. die Schreiboperationen, die für die Berechnung der folgenden Ergebnisse benötigt werden), so wird der Prozessorkern nicht auf die Vollendung des Schreibvorgangs warten, sondern fortfahren. So scheint es, als würde das Schreiben in den externen Speicher mit dem Takt des Prozessorkerns erfolgen.

Für die Ausführung des Blocks „Clustering“ werden die Daten aus dem Hough-Raum (Hough Space) zeilenweise ausgelesen und in den L1-Speicher bereitgestellt, und zwar mit Hilfe eines DMA-Kanals bei voller Prozessorgeschwindigkeit. Da es keinen Bedarf mehr für die Inhalte des Hough-Raums gibt, muss dieser für den nächsten Durchlauf zu Null gesetzt werden (Clear Hough Space) – ebenfalls mit Hilfe eines DMA-Kanals.

Anschließend greift die Kreisfindung auf die Ergebnisse des Blocks „Clustering“ und des Blocks „Sobel“ zu und ermittelt Kreisradien sowie die genaue Position. Da die Position der möglichen Schilder nun bekannt ist, können sie aus dem Originalbild mittels DMA-Kanal geladen werden. Dafür wird zunächst eine Region mit mehreren Schildern in den L2-Speicher übertragen. Aus dieser Region sind dann sukzessive Ausschnitte von einzelnen Schildern in den L1-Speicher zu laden. Außerdem sind für die Untersuchung der Schilder Vergleichsmuster notwendig.

Für die Erkennung von Verkehrszeichen werden mehrere Blöcke benötigt, die im Folgenden erläutert werden. Bild 4 stellt die Schritte grafisch dar.

  • Die Videoschnittstelle (PPI) nimmt mit Hilfe eines DMA-Kanals die Videobilder auf und legt sie in den Speicher.
  • Der Sobeldetektor filtert das Bild so, dass nur noch Kanten sichtbar sind. Es werden nur die hochfrequenten Bildanteile durchgelassen. Zudem werden aus den Ergebnisbildern die Kantenstärke und die Kantenrichtung berechnet.
  • Die Hough-Transformation erzeugt mit Hilfe des Vektorfeldes vom Sobelfilter ein Feld mit Ansammlungen möglicher Kreise.
  • Die Clusterbildung fasst Punkte in der Nachbarschaft zusammen und ermittelt das Gewicht aller möglichen Kreise. Sie speichert die Position.
  • Die Kreisfindung holt sich anhand der Positionsangabe aus der Clusterung die Kreise aus dem Sobel-Kantenbild. (In dieser Phase ist ein Schild erkannt worden, aber noch nicht die Zahl im Inneren.)
  • In der Zahlerkennung werden die Schilder noch einmal im Original geladen, skaliert und mit Mustern aus einer Schilddatenbank verglichen. Die Zahl mit der höchsten Wahrscheinlichkeit wird nun an höchster Stelle in eine Liste eingetragen.
  • Anschließend wird das Schild mit der höchsten Wahrscheinlichkeit ausgelesen und auf das zu sendende Videobild kopiert. So entsteht ein Overlay zur Anzeige des erkannten Schildes.
  • In der bereits erwähnten Applikation „Verkehrszeichen-Erkennung“ wurde ein TFT-Display mit einem Viertel der VGA-Auflösung genutzt. Zusätzlich stellt das Display die Daten im Porträt-Format dar. Es müssen also drei Zusatzschritte ausgeführt werden: eine Farbraumkonvertierung vom YUVFormat in das RGB-Format, eine Skalierung von VGA zu VGA/4 und eine Rotation.
  • Mit Hilfe einer zweiten Videoschnittstelle können die aufgenommenen Bilder nun zu einem Display übertragen werden.

79ah0304_tm_04.jpg
Bild 4. Für die Erkennung von Verkehrszeichen werden die dargestellten Blöcke benötigt.

Nach den grundsätzlichen Funktionen wird im Folgenden ein effizientes Software-Gerüst vorgestellt, das alle Elemente zu einen funktionstüchtigen System zusammenführt (Bild 5). Die Schild-Erkennung wird auf Prozessorkern 1 ausgeführt (Core A). Nach einer Initialisierungsphase aller benötigten Schnittstellen startet der Prozessor zuerst die Übertragung eines Bildes mittels Videoschnittstelle (PPI0) und dem zugehörigen DMA-Kanal. Dieses Bild wird in den externen SDRAM (Rot) mit dem Namen „frame 0“ geschrieben.

Im schnellen L1-Onchip-Speicher (Grün) ist der Speicherplatz für ein komplettes Bild nicht vorhanden. Aus diesem Grund liest ein weiterer DMAKanal das Bild zeilenweise aus dem SDRAM und legt es in den internen L1-Speicher ab (uiL1_buffer_A_ sub0). Mit Hilfe der ersten drei Zeilen kann der Prozessor nun mit der Berechnung des Sobel-Filters beginnen. Zeitgleich zur Berechnung wird der DMA-Kanal weitere Zeilen in einen zweiten Bereich des L1-Speichers übertragen (uiL1_buffer_A_sub1).

79ah0305_tm_03.jpg
Bild 5. Ein effizientes Software-Gerüst, das alle Elemente zu einen funktionstüchtigen System zusammenführt.

  1. Effiziente Implementierung einer Verkehrszeichen-Erkennung
  2. Siehe auch:
  3. Effiziente Implementierung einer Verkehrszeichen-Erkennung
  4. Prozessorkerne als „Arbeitsbienen“
  5. Software-Gerüst als „Steuermann“

Jetzt kostenfreie Newsletter bestellen!