Wie erhält man dichte Punktwolken von Stereokameras?

12

Ich versuche, eine Stereokamera für die Szenenrekonstruktion zu verwenden, kann aber normalerweise nur spärliche Punktwolken erhalten (dh mehr als die Hälfte des Bildes enthält keine geeigneten Tiefeninformationen).

Mir ist klar, dass Stereoverarbeitungsalgorithmen auf dem Vorhandensein von Texturen in den Bildern beruhen und einige Parameter aufweisen, die angepasst werden können, um bessere Ergebnisse zu erzielen, wie z. B. den Disparitätsbereich oder die Größe des Korrelationsfensters. So sehr ich diese Parameter einstelle, kann ich niemals Ergebnisse erzielen, die auch nur annähernd dem entsprechen, was mit einem aktiven Sensor wie dem Kinect erzielt werden kann.

Der Grund, warum ich das möchte, ist, dass Punktwolken, die benachbarten Regionen entsprechen, sehr oft nicht genug überlappen, um eine Übereinstimmung zu erzielen, sodass die Rekonstruktion stark beeinträchtigt ist.

Meine Frage an die Computer Vision-Experten lautet wie folgt: Was kann ich tun, um im Allgemeinen dichtere Punktwolken zu erhalten (ohne meine Büroumgebung willkürlich zu ändern)?

georgebrindeiro
quelle
Dies ist eine gute Frage, aber ich denke, dass weitere Details notwendig sind. Welche Algorithmen haben Sie versucht, Übereinstimmungen zu berechnen? Können Sie klarstellen, was Sie unter "benachbarten Regionen" und "Überlappung" verstehen?
Josh Vander Hook
Wenn ich "benachbarte Regionen" sage, meine ich Teile des physischen Raums, die nicht äquivalent sind, aber einen nicht leeren Schnittpunkt haben, den ich "Überlappung" nannte. Das heißt, die Art von Regionen, die Punktwolken erzeugen würden, die in einem ICP-Algorithmus angepasst und zusammengefügt werden könnten.
Georgebrindeiro
In Bezug auf den Algorithmus verwende ich immer noch die einfachste mögliche Lösung, die ich finden konnte: den ROS-Knoten stereo_image_proc , der den in OpenCV verfügbaren globalen Blockanpassungsalgorithmus anwendet. Ich wäre sehr daran interessiert, etwas über Parametereinstellungen zu erfahren, auf die ich möglicherweise nicht direkt über den ROS-Knoten oder andere Algorithmen zugreifen kann, von denen bekannt ist, dass sie bessere Ergebnisse liefern.
Georgebrindeiro

Antworten:

4

Sie können versuchen, die Erkennung hervorstechender Punkte zu überspringen, das Bild nur dicht abzutasten (als Raster oder so) und an jedem Abtastpunkt einen Feature-Deskriptor zu berechnen. Sie können wahrscheinlich sogar so weit gehen, einen Deskriptor für jedes Pixel zu berechnen.

Möglicherweise verlieren Sie die Skaleninvarianz, aber ich denke, dies wird für die Stereovision nicht allzu sehr schaden, da Objekte in beiden Bildern ungefähr den gleichen Maßstab haben.

Ein anderer Ansatz könnte darin bestehen, mehrere Algorithmen zur Erkennung hervorstechender Punkte zu kombinieren: Ecken, Kanten, Blobs usw. Dann müssen Sie für alle erkannten Punkte denselben Feature-Deskriptor-Algorithmus verwenden. Die Implementierung dieses letzteren Teils kann jedoch etwas schwierig sein.

Muksie
quelle
2

Die Stereobildverarbeitungsalgorithmen, die ich in der Vergangenheit verwendet habe, wurden Pixel für Pixel implementiert. Wir haben nur das Lochkameramodell verwendet und einige altmodische Messungen mit Maßband durchgeführt, bis unsere Tiefenschätzungen mit der tatsächlichen übereinstimmten.

Die Gleichungen für ein Paar paralleler Kameras lauten:

  • d=
  • f=
  • Koordinatenrahmen:
    • x,y,z=
    • uR.,vR.
    • uL.,vL.
    • Hinweis: Die Kamerakoordinaten haben ihren Ursprung im Koordinatenrahmen zwischen den Kameras (dh die U-Achsen zeigen in entgegengesetzte Richtungen).

uL.=f(x- -d)zuR.=f(x+d)z

zuR.=f(x+d)zuL.=f(x- -d)

z(uR.- -uL.)=2df

z=2dfuR.- -uL.

y=vL.z+dff

x=uL.z+dff

Mit diesen Gleichungen können Sie eine dichte Stereowolke berechnen. Eine für jedes Pixel Ihrer Kameras.

thealmightygrant
quelle
Vielen Dank für die Mühe, aber ich bin mit Stereomodellierung vertraut. Das Problem ist normalerweise genau das der Entsprechung zwischen den (u, v) -Koordinaten in der linken und rechten Kamera. muksie gab einige ideen, wie man damit umgeht und sylvain.joyeux wies auf eine großartige stereobibliothek hin, die jedoch zu verbesserten ergebnissen führt ...
georgebrindeiro
1

Wenn Sie sagen, "mehr als die Hälfte des Bildes hat keine richtigen Tiefeninformationen", welche Hälfte?

Ein Problem, auf das wir gestoßen sind, ist, dass die "Standard" -Dicht-Stereo-Algorithmen nicht so gut funktionieren, wenn der Abstand zum Objekt in der gleichen Größenordnung liegt wie Ihre Grundlinie (normalerweise bei sehr weitwinkligen Kameras). Wir haben die Verleumdungsbibliothek verwendet, und die Entwickler haben uns mitgeteilt, dass dies als "großes Basis-Stereo" bezeichnet wird und ein weiteres Problem darstellt.

sylvain.joyeux
quelle
Als ich sagte, dass die Hälfte des Bildes keine richtigen Tiefeninformationen hatte, meinte ich, dass von allen Pixeln nur etwa die Hälfte Disparitäten berechnet hatte (die nicht unbedingt einen zusammenhängenden Bereich bildeten). Ich habe nicht das gleiche Problem, das Sie beim Verhältnis von Entfernung zu Objekt / Grundlinie erwähnt haben, aber es war sehr interessant, von dieser Bibliothek zu hören, und dass dies ein Problem sein kann. Vielen Dank!
Georgebrindeiro
1
In jedem Fall werde ich Verleumdungen ausprobieren , da ich einen ROS-Wrapper dafür gefunden habe!
Georgebrindeiro
0

Schauen Sie sich die führenden Unternehmen des KITTI Stereo Benchmark an . Dieser Benchmark bestraft Algorithmen dafür, dass an einem bestimmten Punkt keine Disparität erzeugt wird, sodass die Leistungsträger dichte Ergebnisse erzielen (auch wenn sie an vielen Punkten nicht viele Gründe für ihre Schätzung haben). Einige Methoden verfügen über öffentlich verfügbaren Code, der verknüpft ist und den Sie ausprobieren können.

Beachten Sie, dass sie nicht dafür bestraft werden, dass sie lange dauern. Daher dauern viele Methoden in der Größenordnung von Minuten pro Bild und sind möglicherweise nicht für Ihre Anwendung geeignet. Es wurden jedoch viele CNN-basierte Methoden eingeführt, die sehr gut funktionieren und dennoch in weniger als einer Sekunde ausgeführt werden (auf einer GPU). Mindestens eine davon (CRL) hat öffentlichen Code.

Wenn Sie mit diesen Bildern immer noch keine angemessenen Tiefenschätzungen für Ihre Bilder erhalten, sehen Sie möglicherweise nur die Grenzen dessen, was mit einem sichtbaren Ansatz möglich ist. Grundsätzlich muss der Bereich eine eindeutige Textur aufweisen, um gut mit Punkten übereinstimmen zu können, oder Sie benötigen eine Grundlage, um in texturlosen Regionen starke Annahmen (z. B. Glätte) zu treffen.

surtur
quelle