Hough Transform
Die Hough-Transformation ist ein abstimmungsbasiertes Computer-Vision-Verfahren, das Linien, Kreise und Formen erkennt, auch wenn Bildkanten Lücken oder Rauschen aufweisen.
Die Hough-Transformation ist ein geometrisches Verfahren zur Merkmalsextraktion, das Linien, Kreise und andere parametrisierte Formen erkennt, indem Bildpunkte für mögliche Formen stimmen. Punkte, die zu derselben Struktur gehören, verstärken sich gegenseitig und erzeugen einen deutlichen Höchstwert in einer Abstimmungstabelle. In der Computer Vision hilft dieses Verfahren dabei, Formen mit Lücken oder verrauschten Konturen wiederherzustellen.
Paul V. C. Hough stellte das Verfahren 1959 in Machine Analysis of Bubble Chamber Pictures vor, um Teilchenspuren in physikalischen Fotografien zu untersuchen. Richard Duda und Peter Hart führten die weithin verwendete Darstellung mit Winkel und Abstand in ihrer Arbeit zur Erkennung von Linien und Kurven aus dem Jahr 1972 ein.
So funktioniert die Abstimmung bei der Hough-Transformation#
Ein typischer Arbeitsablauf beginnt mit der Datenvorverarbeitung und der Kantenerkennung. Ein Kantendetektor identifiziert lokale Helligkeitsänderungen; die Hough-Transformation gruppiert Kantenpixel zu geometrischen Strukturen. Der Sobel-Operator schätzt Helligkeitsgradienten, während Canny eine dünne Kantenkarte erzeugt, die sich für die Linienabstimmung eignet.
Jede mögliche Linie wird durch rho, ihren vorzeichenbehafteten senkrechten Abstand zum Bildursprung, und theta, den Winkel dieser Senkrechten zur x-Achse, dargestellt. Dadurch lassen sich senkrechte Linien ohne unendliche Steigung verarbeiten. Jedes Kantenpixel stimmt in einem Akkumulator für passende rho–theta-Paare ab, einer Tabelle, die den Parameterraum in diskrete Bereiche unterteilt. Kollineare Pixel tragen zum selben Bereich bei, auch wenn sie im Bild voneinander getrennt sind. Höchstwerte kennzeichnen gestützte Linien.
Geometrie und Abstimmungsregeln bestimmen die Ausgabe. Ein Deep-Learning-Detektor lernt visuelle Muster aus Trainingsdaten; die Hough-Erkennung verwendet ein festgelegtes Formmodell und numerische Schwellenwerte statt gelernter Modellgewichte.
Linien-, probabilistische und Kreis-Transformationen#
Drei gängige Implementierungen unterscheiden sich in ihrer Suche und Ausgabe:
- Standard-Linientransformation:
cv2.HoughLines()gibt rho–theta-Paare zurück, die unendliche Linien beschreiben. Für die Endpunkte der Liniensegmente ist eine zusätzliche Verarbeitung erforderlich. - Probabilistische Linientransformation:
cv2.HoughLinesP()verringert den Abstimmungsaufwand durch Stichproben von Punkten und gibt die Endpunkte der Segmente direkt zurück.minLineLengthverwirft kurze Segmente;maxLineGaplegt fest, wie weit ausgerichtete Teilstücke auseinanderliegen dürfen, um verbunden zu werden. - Kreistransformation: Mögliche Kreise erfordern ein Zentrum und einen Radius.
cv2.HoughCircles()verwendet ein gradientenbasiertes Verfahren; Radiusgrenzen schränken die Suche ein. Als Eingabe dient ein Graustufenbild, während die Linienfunktionen ein Binärbild verwenden.
Liniensegmente in Python erkennen#
Installiere die Abhängigkeiten mit pip install opencv-python numpy. Dieses Beispiel verwendet OpenCV, um Liniensegmente im Beispielbild eines Busses zu erkennen und einzuzeichnen.
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Kanten für die Abstimmung extrahieren.
edges = cv2.Canny(gray, 50, 150)
# Endliche Segmente erkennen, die durch Stimmen im Akkumulator gestützt werden.
lines = cv2.HoughLinesP(
edges,
1,
np.pi / 180,
threshold=80,
minLineLength=80,
maxLineGap=10,
)
if lines is not None:
for x1, y1, x2, y2 in lines[:, 0]:
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imwrite("hough_segments.jpg", image)Das gespeicherte Bild zeigt die zurückgegebenen Segmente rot überlagert. Die rho-Bereiche sind einen Pixel breit, die theta-Bereiche umfassen jeweils ein Grad, und threshold=80 legt den Schwellenwert für die Stimmen im Akkumulator fest. Die Einstellungen für Segmentlänge und Lücken werden in Pixeln angegeben.
Anwendungen und praktische Grenzen#
Bei der Dokumentenverarbeitung ermöglicht das Extrahieren von Gitterlinien eine Strukturanalyse: OpenCV zeigt die Hough-Erkennung anhand eines Sudoku-Bildes. Die kreisförmige Abstimmung ermittelt Kreismittelpunkte und Radien in den Beispielen zu Kreisen und Ellipsen von scikit-image. Diese Ausgaben beschreiben die Geometrie; die Objekterkennung ergänzt semantische Kategorien, und die Instanzsegmentierung ordnet einzelnen Objekten Pixel zu.
Ein Prototyp zur Vermessung von Stahlträgern kombiniert YOLOv8-Masken, Canny-Kanten und probabilistische Hough-Linien, um die Eckenerkennung zu unterstützen. Die Segmentierung mit Ultralytics YOLO26 liefert Masken zur Objektisolierung und ermöglicht so denselben Ansatz mit maskierten Eingaben vor einer separaten geometrischen Verarbeitung.
Feinere Bereiche im Akkumulator erhöhen den Speicherbedarf; grobe Bereiche führen benachbarte mögliche Kandidaten zusammen. Bei der Erkennung von Tabellengrenzen verringern unvollständige Rahmen die Zahl der erkennbaren Grenzen, während unpassende Linien zu fehlerhaften Korrekturen der Grenzen führen können. Durch Erhöhen von maxLineGap werden größere Lücken zwischen ausgerichteten Teilstücken überbrückt; durch Erhöhen von minLineLength werden kürzere Segmente entfernt.










