2017-04-24 3 views
0

I haben das folgende Problem auf, am besten mit diesem Bild erklären: enter image description hereAdaptive Lochfüllung hinsichtlich der angrenzenden Regionen

Ich habe ein Loch (blau) mit einer Kante (weiße Linie). Ich möchte jetzt das Loch mit der Farbe der Region daneben füllen. Also über der weißen Linie sollte es gelb und unter der weißen Linie rot sein.

Gibt es einen Algorithmus, der etwas Ähnliches tut, das ich anpassen könnte? Möglicherweise sogar eine Implementierung in openCV?

EDIT
Ok, vielleicht zu spezifizieren: Die weiße Linie ist von einer Kantenerkennung und unregelmäßig. Auch gibt es viele blaue Flecken, wie dies auf einem großen Bild, und es muss die Farbe für jeden Punkt berechnen nach den benachbarten Farben

EDIT2: added ein besseres Beispiel Bild die ganze Szene enthält: enter image description here Zur weiteren Klärung: Nur die blauen "Löcher" sollten gefüllt werden, weil sie die uns bekannten Fehlerbereiche sind. Die weißen Objektkanten sind für dieses Beispiel einer Grundwahrheit entnommen, die genauer ist als die Daten, mit denen wir tatsächlich arbeiten können. Es ist jedoch möglich, eine Annäherung an diese Kante zu erhalten.

Die Daten sind übrigens eine Tiefenkarte eines Multi-Kamera-Scans. Ziel ist es, die Fehlerbereiche durch Überschatten der Objekte zu füllen. Wenn ein Objekt von 2 Kameraansichten nicht angezeigt werden kann, weil es verschleiert ist, ist keine Tiefenschätzung möglich.

+0

warum codierst du es nicht einfach selbst? es ist ziemlich geradlinig ... keine Notwendigkeit, bestehende Algorithmen anzupassen. – Piglet

+0

Kennen Sie die Gleichung der weißen Linie? Wenn ja, ist es in der Tat ganz einfach: Fülle einfach alles, was über der Linie ist, mit Gelb, sonst mit Rot. Wenn Sie die Gleichung der weißen Linie nicht kennen, müssen Sie eine Linie mit den blauen Pixeln anpassen. – Catree

+0

Ok, vielleicht zu spezifizieren: Die weiße Linie ist von einer Kantenerkennung und unregelmäßig. Es gibt auch viele blaue Flecken auf einem großen Bild und es muss die Farbe für jeden Fleck nach den angrenzenden Farben berechnet werden. – stainless

Antwort

0

Ich habe irgendwie eine Lösung für mein Problem gefunden: openCV hat eine inpaint Funktion. Ich werde dies nach this paper ändern. Sollte für meinen Fall gut funktionieren.

0

Vielleicht möchten Sie sich die OpenCV-Funktion floodFill ansehen.

Diese Funktion verfügt über einen Eingabemaskenparameter, mit dem Sie die weiße Linie zwischen den beiden farbigen Bereichen festlegen können.

+1

Ich denke das Problem ist, dass der gelbe Bereich zwei, drei oder mehr andere Seiten haben kann, die jeweils eine andere, andere Farbe haben. –

Verwandte Themen