Was sind die möglichen schnelle Weise zu erkennen Kreis in einem Bild?
Was sind die möglichen schnelle Weise zu erkennen Kreis in einem Bild ?
Für die ex:
ich habe ein Bild mit einem Großen Kreis und hat 6 kleine Kreise innerhalb des großen Kreises.
Ich muss einen großen Kreis ohne die Verwendung Hough Circles(OpencV).
- Kennen Sie die Größe der Kreise? Dann eine einfache Korrelation Ansatz könnte den trick tun.
- Nein, wir wissen nicht, die Größe des Kreises und die bitte auch vorschlagen, Idee, wie wir finden, wenn wir wissen, dass die grösse der Kreise 😛
- Eigentlich ist die hough-transformation ist sehr schnell, und vielleicht die einzige gute Lösung. Die hough-Transformation von opencv verwendet der canny-operator, um die Kanten. Der canny-operator ist der Engpass. Vielleicht können Sie erstellen einen code zu finden, der die Ränder des Bildes. Korrelation verwendet, float-Werte und Multiplikation. Ich würde sagen Korrelation braucht mehr Zeit (für große Objekte wirklich viel Zeit) und ist nicht mehr präzise. Kann es sein, dass die hough-Transformation von opencv isn t sehr gut programmiert könnte man vielleicht umschreiben, damit es schneller geht.
- Wie bei jeder Bildbearbeitung-Frage, bitte post ein Bild (egal wie einfach). Zu Georgs Kommentar: es würde helfen, zu wissen, ob die Kreise haben einen radius von 10 Pixel, 100 Pixel, 1000 Pixel, oder zehn Millionen Pixel, auch wenn Sie nur eine Größenordnung abschätzen.
- OpenCV hat tatsächlich eine Beispielanwendung für die Kreis-Erkennung mit Hough.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standard-algorithmen, um Kreise Hough (die jamk erwähnt in den Kommentaren) und RANSAC. Die Parametrisierung dieser algorithmen wird eine baseline-Geschwindigkeit für Ihre Anwendung.
http://en.wikipedia.org/wiki/Hough_transform
http://en.wikipedia.org/wiki/RANSAC
Beschleunigen diese algorithmen, Sie können sich Ihre Sammlung von Bilder und entscheiden, ob die Begrenzung des Suchbereichs wird helfen, beschleunigen die Suche. Das ist einfach genug: Suche nur in einem angemessenen Rahmen und für den radius. Da Sie edge-Punkte wie Eingänge, können Sie auch einen Blick auf Methoden zur Verringerung der Anzahl von edge-Punkte überprüft.
Allerdings gibt es ein paar andere tricks, um die Verarbeitung zu beschleunigen.
Lange Geschichte kurz: beginnen Sie mit einer kompletten Implementierung und Teste es, dann nach und nach festziehen, bis die parameter-Einstellungen und limit-Suche reicht und gleichzeitig sicherzustellen, dass Sie immer noch finden können Kreise für Ihre Anwendung und Ihr Bild gesetzt.
Wenn Ihre Bilder sind offen für die Skalierung, die dann eine Möglichkeit ist, ein image zu erstellen Pyramide von Bildern auf verschiedenen Skalen: 1/2-Skala, 1/4 scale, Maßstab 1: 8, etc.. Sie müssen ein edge-Erhaltung Skalierung Methode, die auf kleineren Skalen.
Sobald Sie Ihr Bild Pyramide, versuchen Sie Folgendes:
die Palette der möglichen Radien begrenzt wird, so sollte dies eine
für eine schnelle Bedienung.
Bild-Skalierung wird eine schnelle operation, und Sie können sehen, dass, wenn bei mindestens einem der Kreise vorhanden ist, in einem kleineren Maßstab Bild, das Sie sollten in der Lage sein zu reduzieren, die Gesamtzahl der Zyklen, indem Sie eine grobe Kreis passen in das kleine Bild und dann die Optimierung des fit für die edge-Punkte allein in den full-scale image.
Edge-Erhaltung der Skalierung kann auch machen es möglich für die Verwendung der Korrelation-Art-tools zu finden, Kreise, aber in der Lage, so zu tun, hängt vom Inhalt Ihrer Bilder, darunter das Geräusch, wie vollständig edge-Punkte als Kreise, und so weiter.
Vielleicht erkennen Konturen und prüfen deren Eigenschaften, z.B. versuchen, cv::isContourConvex oder ein anderer Weg könnte sein, verwenden Sie die Eigenwerte der Kovarianz-matrix und überprüfen Sie, ob contour Vertreter ellipse erste Exzentrizität ist ~0.