Laden...

Ellipse im Bild erkennen - mit Hilfe von EmguCV

Erstellt von Dobby vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.104 Views
D
Dobby Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren
Ellipse im Bild erkennen - mit Hilfe von EmguCV

Hallo zusammen,

ich habe vor einer Woche zum ersten Mal mit Bildverarbeitung angefangen zu arbeiten und bin begeistert, wie mächtig und einfach OpenCV nutzbar ist 😃
Habe aber noch einige Schwierigkeiten hier und da.

Ich habe folgende Situation:
Ich lese Bitmaps aus und möchte dort eine Ellipse erkennen.
Das mache ich mit Hilfe von EmguCV 2.4 und das funktioniert irgendwie nicht immer so recht.

Mein prinzipielles Vorgehen ist dabei:

  1. Bild binärisieren
Image<Gray, byte> ImgBinary = ImgInGray.ThresholdBinary(new Gray(BinThresh), new Gray(255));
                  ImgBinary = ImgBinary.SmoothBlur(3, 3).ThresholdBinary(new Gray(BinThresh), new Gray(255));   // Smooth Edges and fragments
  1. Kanntenerkennung mit Hilfe der Canny Methode
Image<Gray, byte> ImgEdges  = ImgBinary.Canny(180, 120);
  1. Aus den Kannteninformationen extrahiere ich eine Kontur
CHAIN_APPROX_METHOD approxMethod   = CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE;
RETR_TYPE           RetrType       = RETR_TYPE.CV_RETR_LIST;
MemStorage          storage        = new MemStorage();

Contour<Point> EdgeContour = ImgEdges.FindContours(approxMethod, RetrType, storage);
  1. Die Kontur wandle ich dann in eine Punktewolke um und lasse diese ins ursprüngliche Bild einzeichnen. Die Punktewolke nutze ich außerdem dazu eine Ellipse zu fitten (mit EllipseLeastSquareFitting) um weitere Sachen wie Schwerpunkt, Durchmesser usw. zu berechnen.

So weit schön und gut. Der Algorithmus klappt bei selbst erstellten Probebildern mit gutem Kontrast sehr gut (Bild 1).
Wenn ich jedoch mit einem Laserpointer auf die Kamera leuchte und damit den echten Fall simuliere, gibt es zum Teil Schwierigkeiten überhaupt irgendwas zu erkennen (Bild 2 & 3).

Meine Frage nun: gibt es da noch grundsätzlich Tipps, Tricks, Kniffe um so eine Bilderkennung robuster zu machen? Durch die 3x3 Gauss Glättung funktioniert meine Verarbeitung schon ein wenig besser. Bei offenen und dickeren Konturen gibt es jedoch weiterhin Probleme.

Eine EmguCV spezifische Frage: irgendwie scheint der Ellipsen-Fit bei mir nicht so zu funktionieren, wie beim Beispiel auf deren Seite. So wie im Tutorial sollte die Ellipse alle Punkte einschließen. Bei mir ist es allerdings irgendwie gemittelt reingelegt (least square eben) und weicht zum Teil dadurch stark von der Kontur ab. (Bild 2 & 4)

D
Dobby Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren
D
Dobby Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren
D
Dobby Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren