18

So habe ich Bild wie diesesGibt es einen super schnellen Algorithmus zum Suchen von Linien auf Bild?

CG generated bathroom http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg

ich so etwas zu bekommen (ich hEvent alle Linien gezeichnet ich will, aber ich hoffe, dass Sie meine Idee bekommen)

Black & White CG generated bathroom with some red lines between tiles http://superior0.narod.ru/lines.jpg

Ich brauche einen superschnellen Algorithmus, um alle geraden Linien zu finden. Ich möchte Algorithmus-Parameter wie minimale Länge und maximale Linienverzerrung geben. Ich möchte relativ zu Bildpixeln Koordinaten Anfangs- und Endpunkt von Linien erhalten.

Also auf diesem Bild finden Sie alle Linien zwischen den Fliesen und 2 schwarze Linien an der Spitze.

Also brauche ich einen Algorithmus zum superschnellen Finden von Geraden in verschiedenen Farben auf dem Bild.

Gibt es einen solchen Algorithmus? (Super Duper Fast =)

+0

Konnten Sie die Linien kennzeichnen, die Sie finden möchten?Was meinst du mit "dalles"? Fliesen? – Jacob

+0

dalles = Fliesen in meinem Wörterbuch ...) ja) Ich möchte zum Beispiel ALLE geraden Linien mit einer Breite von weniger als 25 Pixel und mit einer Mindestlänge von 100 Pixel. – Rella

+0

erste Verbindung ist tot. – hippietrail

Antwort

14

Sie benötigen anspruchsvolle Bildverarbeitungsverfahren verwenden, wie zum Beispiel Canny-Kantenerkennung, Marr-Hildreth Kantenerkennung, Gauß-Filterung und Hough-Transformation usw.

Aber Existenz von „superschneller“ Methode ist sehr unwahrscheinlich.

Die minimale Komplexität der meisten Bildverarbeitungsalgorithmen ist mindestens O(N^2).

Mit "superschnellen" Ich meine höchstens O(1);)

einige Links, die helfen könnten:

  1. http://www.sci.utah.edu/~cscheid/spr05/imageprocessing/project4/
  2. http://www.contrib.andrew.cmu.edu/~suppe/mobot/
  3. http://www.dunwich.org/baptiste/sic/ecms/ecpublis.html#2
  4. http://wayback.archive.org/web/20090304153603/http://hdebruijn.soo.dto.tudelft.nl/jaar2006/alders.htm
+3

Link 2 erfordert Autorisierung und Link 4 ist 404'd. Danke für die anderen –

+1

Ah ich sehe, mein Vater ist verlinkt worden [4], ich werde ihn wissen lassen. :-) Ein besserer Link dafür ist: http://www.alternatievewiskunde.nl/jaar2006/delphi.htm, wo Sie auch Quellcode und andere Sachen finden können. – atlaste

5

Ich denke, Sie brauchen eine Hough transform oder . Lesen Sie die Artikel, die ich verlinkt habe, und zögern Sie nicht, Fragen zu stellen :)

+0

Hough Transformation ist ziemlich langsam ... Und ich muss mit 2k Live-Video arbeiten ... In Radon jetzt suchen ... – Rella

+0

..nicht wenn Sie es auf Ihr spezielles Problem tunen. Sie können einige der Mathe-Tabellen vorberechnen, um die Leistung zu verbessern, wenn Sie die Genauigkeit ein wenig reduzieren. – JBRWilkinson

0

Ich weiß nicht, wie gut es in Ihrer Anwendung funktioniert, aber Sie könnten versuchen, eine Art von edge detection Ansatz. Ich bin mir nicht sicher, wie man diese Kanten in Vektoren umwandeln kann, wenn man danach sucht, aber das könnte ein guter Anfang sein. Jedenfalls sind einige der Kantenerkennungsalgorithmen (z. B. die Discrete Laplace Operator) ziemlich schnell auf modernen Rechnerarchitekturen.

Oh, und wenn Sie das tun, möchten Sie wahrscheinlich das Bild in YCbCr konvertieren und nur die Luma (Y) -Komponente verwenden. Das ist auch eine schnelle Bedienung

+0

Sie müssen nicht in YCbCr konvertieren, wenn Sie nur den Intensitätswert benötigen. – ergosys

1

Betrachten Sie den in http://outliner.codeplex.com/ beschriebenen Konturpunktalgorithmus. Er erzeugt die vektorbeschriebenen Kanten in Form von in Strichen organisierten Bezier-Kurven. Sie brauchen etwas Mühe, um die meisten geraden Striche zu wählen (die Endpunkte sind gebrauchsfertig). Diese Algorithmen sind ziemlich schnell, aber nicht super duper.

Verwandte Themen