3

Dies ist möglicherweise keine Programmierung, aber möglicherweise Programmierer wären in der besten Position, um es zu beantworten.Wie findet man Pixelkoordinaten von Ecken eines quadratischen Musters?

Für Kamera-Kalibrierung habe ich ein 8 x 8 Quadrat-Muster auf Blatt Papier gedruckt. Ich muss diese Koordinaten manuell in eine Textdatei eingeben. Die Software würde es dann von dort abholen und die Kalibrierungsparameter berechnen.

Gibt es ein Skript oder eine Software, die ich auf diesen Bildern ausführen kann und die Pixelkoordinaten der 4 Ecken jedes der 64 Quadrate erhalten kann?

alt text

Antwort

5

Sie können dies mit einem traditionellen Schachbrettmuster (das heißt schwarze und weiße Quadrate ohne Lücken) mit cvFindChessboardCorners(). Sie können mehr über die Funktion in der OpenCV API Reference lesen und einige Beispielcode in O'Reilly's OpenCV Book oder elsewhere online sehen. Als zusätzlichen Bonus verfügt OpenCV über eingebaute Funktionen, die die intrinsischen Parameter der Kamera und ein Array von extrinsischen Parametern für die verschiedenen Ansichten eines planaren Kalibrierungsobjekts berechnen.

+0

Danke für die OpenCV-Referenz, ich bin mir nicht sicher, ob OpenCv dieses Muster decodieren kann (ich könnte hier falsch liegen), ich sah ein anderes Muster auf ihrer Kalibrierungsseite. –

+0

Alle Standard-Kalibrierungsroutinen, die ich kenne (OpenCV und andere), nehmen ein schwarz-weißes "Schachbrett" -Muster ohne Lücken zwischen den Quadraten an. Wenn Sie nicht darauf beschränkt sind, das von Ihnen veröffentlichte Kalibrierungsmuster zu verwenden, würde ich Ihnen dringend empfehlen, ein solches Muster zu verwenden. Wenn dies keine Option ist, müssen Sie den Eckenerkennungscode selbst schreiben (wie von user531627 beschrieben). –

1

Ich bin sicher, es gibt viele Computer Vision Bibliotheken mit unterschiedlichen Fähigkeiten und Lizenzen da draußen, aber eine, die ich aus der Spitze meines Kopfes erinnern kann, ist ARToolKit, die in der Lage sein sollte, dieses Muster zu erkennen. Und wenn das nicht möglich ist, kommt es mit einer Reihe von sehr guten Mustern, die so zugeschnitten sind, dass sie auch dann erkannt werden können, wenn sie teilweise verdeckt sind.

+0

Danke! wird ARToolKit auschecken !! –

2

Ich würde:

  • gelten Schwelle und binarisierten Bild erhalten.
  • gelten SobelX Filter zu Bild. Sie erhalten ein Bild mit den vertikalen Linien. Dies gehört zu den Seiten der Quadrate, die fast vertikal sind. Behalte dies als image1.
  • gelten SobelY Filter zu Bild. Sie erhalten ein Bild mit den horizontalen Linien. Dies gehört zu den Seiten der Quadrate, die fast horizontal sind. Behalte dies als image2.
  • make (image1xorimage2). Sie erhalten ein schwarzes Bild mit weißen Pixeln, die die Eckpositionen angeben.

Ich hoffe, es hilft.

+0

Und wie mache ich das alles, ich meine in welchem ​​Rahmen kann ich das tun? –

+0

Ich würde, wie Michael Koval vorgeschlagen hat, OpenCV (http://sourceforge.net/projects/opencvlibrary/) verwenden. – Noti

+0

Wie auch immer, du könntest einen schnellen Test selbst machen. Erstellen Sie einfach ein Bild. Angenommen, das Bild ist ein Raster. [0,0] [1,0] ... Nimm die erste Zeile und mache Image1 [0,0] = SrcImage [1,0] -SrcImage [0,0] und so weiter bis zum Ende des Bildes. Sie erhalten also ein Ausgabebild, dessen Pixelwerte gleich der Differenz zwischen dem entsprechenden Pixel und dem unmittelbaren Nachbarn sind. Auf diese Weise – Noti

0

Ich kenne ARToolKit nicht (obwohl ich viel darüber gehört habe), aber mit OpenCV ist diese Verarbeitung trivial.

Verwandte Themen