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).
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).
. 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
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:
Tags und Links opencv