Eingangs Image: Erkennen von Clustern von weißen Pixeln in einem Bild mit OpenCV
Erwartete Ausgabe:
Ich beabsichtige, drei zu passen (oder eine bestimmte Anzahl von) Polygone (für diesen Fall, Rechtecke) um die "großen" weißen Flecken in diesem Bild zu bezeichnen. Die Rechtecke, die im Ausgabebild gezeichnet werden, entsprechen meiner Wahrnehmung der weißen Regionen. Ich erwarte nicht, dass der Algorithmus mit den gleichen Bouding-Regionen kommt. Was ich mir wünsche, ist, eine Anzahl von engen Polygonen um die Cluster von weißen Pixeln herum anzuordnen.
Meine anfängliche Lösung bestand darin, Konturen für dieses Bild zu finden und ein geschlossenes konvexes Polygon um jede Kontur zu legen, indem ich die konvexe Hülle der Punkte in jeder Kontur finde.
Da die weißen Bereiche jedoch stark fragmentiert sind und schwarze Bereiche innerhalb der Kanten aufweisen, ist die Anzahl der von cv2.findContours zurückgegebenen Konturen sehr hoch (etwa 500 oder so). Aus diesem Grund verbessert das Anpassen einer konvexen Hülle die Form der weißen Bereiche nicht. Die weißen Bereiche behalten meist ihre ursprünglichen abstrakten Formen bei. Mein Ziel wäre es, die vielen kleinen Konturen einer weißen Region zu einem Ganzen zusammenzufassen, das eine Kontur enthält, über die ich dann eine konvexe Hülle anbringen kann.
Wie löse ich dieses Problem? Soll ich an den Konturpunkten zunächst einen Clustering-Algorithmus verwenden, um die nahe beieinander liegenden Konturen zu finden?
http://en.wikipedia.org/wiki/DBSCAN helfen können. unter Python Scikit. Demo hier http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html – baci