opencv SimpleBlobDetector filterByInertia Bedeutung?

9

Ich verstehe nicht, was filterByInertia bedeutet ... und verstehe auch nicht die kleine Beschreibung der Dokumentation:

Durch Verhältnis der minimalen Trägheit zur maximalen Trägheit. Extrahierte Blobs haben dieses Verhältnis zwischen minInertiaRatio (inklusive) und maxInertiaRatio (exklusiv).

    
Kiarash 08.02.2013, 10:43
quelle

3 Antworten

9

Ich habe mich auch eine Weile damit beschäftigt; Die OpenCV-Dokumentation ist nicht sehr hilfreich, wenn es um die Erkennung von Blobs geht.

Basierend auf den Beschreibungen der anderen Blob-Analysatoren , der Trägheit eines Blobs ist "der Trägheitswiderstand des Blobs zur Rotation um seine Hauptachsen". Es hängt davon ab, wie die Masse des Blobs (ich denke in diesem Fall die Fläche) über die gesamte Form des Blobs verteilt ist.

Es gibt eine Menge Mathys - die meisten von denen ich mich nicht daran erinnern kann, wie es geht - aber das Ergebnis am Ende von Diese Seite über die Eigenschaften von Binärbildern fasst es ziemlich gut zusammen (Blob-Erkennung erfolgt durch Umwandlung des Eingangsbildes in eine Reihe von Binärbildern) :

  

Das Verhältnis gibt uns eine Vorstellung davon, wie abgerundet das Objekt ist. Dieses Verhältnis ist 0 für eine Linie und 1 für einen Kreis.

Wenn Sie also minInertiaRatio und maxInertiaRatio angeben, können Sie die Blobs nach ihrer Länge filtern. Ein Trägheitsverhältnis von 0 ergibt längliche Blobs (näher an Linien) und ein Trägheitsverhältnis von 1 ergibt Blobs, bei denen der Bereich konzentrierter zum Zentrum ist (näher an Kreisen).

    
Walfie 08.02.2013, 16:55
quelle
9

. Das obige Bild erklärt ziemlich genau, was die verschiedenen Filterparameter tun. SimpleBlobDetector ist am glücklichsten, wenn er einen kreisförmigen Blob sieht, und verschiedene Filter filtern verschiedene Kinder von Abweichungen von der Kreisform.

Trägheitsmomente messen das Verhältnis der Neben- und Hauptachsen eines Blobs.

Die Abbildung zeigt auch den Unterschied zwischen Kreisförmigkeit und Trägheit. Ich habe diese Figur aus Blob Detection Tutorial unter LearnOpenCV.com

    
Satya Mallick 25.02.2015 06:11
quelle
2

Hier ist eine physikalische Interpretation:

Wenn Sie den Blob auf einem Stück Karte ausschneiden, können Sie seinen Schwerpunkt finden und dann eine Achse daran befestigen, indem Sie diesen Punkt kreuzen (die Achse ist parallel zur Karte) und dann drehen Sie es und messen Sie sein Trägheitsmoment. Abhängig von der Form können Sie je nach Platzierung der Achse unterschiedliche Werte erhalten. Für eine Ellipse erhalten Sie den niedrigsten Wert, wenn die Achse entlang der langen (Haupt) Achse angebracht ist, und den größten Wert, wenn die Achse entlang der kurzen Achse platziert ist (so dass mehr der Karte weit von der Achse entfernt ist). Für einen Kreis ist die Trägheit natürlich immer gleich.

Wenn es verschiedene Werte gibt, wird es immer eine "maximale" Trägheit bei einer bestimmten Ausrichtung geben und eine "minimale", bei der die Achse 90 Grad von der maximalen Position entfernt ist. Das Trägheitsverhältnis ist einfach das Verhältnis zwischen diesen Wechselwirkungen, min / max.

Bei Formen, bei denen es sich nicht um Ellipsen handelt, gibt die Metrik an, ob die Gesamtform grob gestreckt oder in allen Richtungen ungefähr gleich groß ist. ohne sich besonders um eine unebene Grenze oder um Einschnitte und Aushöhlungen zu kümmern (welche Rundheit und Konvexität betrachten).

Mathematisch macht es so etwas:

  1. Betrachten Sie die Menge der Punkte innerhalb des Blobs als eine Population von (x, y) Beispielen
  2. Finden Sie den Mittelwert von diesen und die Kovarianzmatrix x vs. y
  3. Finden Sie die zwei Eigenwerte der Kovarianzmatrix (die aufgrund der Natur dieser Matrix dieselben sind wie ihre Singulärwerte)
  4. Das Trägheitsverhältnis ist das Verhältnis zwischen diesen beiden Werten, klein / groß.
greggo 24.06.2016 16:03
quelle

Tags und Links