Ich bin schon eine Weile auf dieses Problem gestoßen und habe mich gefragt, ob jemand helfen könnte. Nehmen wir an, ich habe ein Binärbild wie unten gezeigt und möchte die schwarzen Elemente zählen (zero
). Das Problem ist, dass ich die Anzahl der Elemente, die mit 'background' und 'trapezoid' in der Mitte verbunden sind, einzeln kennen möchte, also gebe zwei Werte aus. Was wäre der einfachste Weg, um das zu erreichen? Ich habe versucht, es ohne eine mask
zu tun, aber ist das überhaupt möglich? Ich habe die numpy
und scipy
Bibliotheken, wenn das hilft.Berechne die Fläche zweier separater Geometrien in Python
Antwort
Sie zwei Funktionen aus scipy.ndimage.measurements
verwenden können: label
und find_objects
.
Zuerst invertieren Sie das Array, weil die label
Funktion Null als Hintergrund betrachtet.
inverted = 1 - binary_image_array
Sie dann label
rufen die verschiedenen Regionen zu finden:
labeled_array, num_features = scipy.ndimage.measurements.label(inverted)
Also, für diese besondere Anordnung, wo Sie bereits wissen es exactely zwei schwarzen Flecken sind, haben Sie die beiden Regionen in labeled_array
.
Wie würde die Größe der einzelnen Blob zugreifen? Würde ich 'find_objects' verwenden? –
Sie können etwas wie folgt verwenden: 'count = etikettierter_array [etikettierter_array == etikettennummer] .astype (int) .sum()'. Dadurch wird ein boolesches Array erstellt, in int konvertiert und alle Vorkommen summiert. – heltonbiker
Offensichtlich ist der scipy Ansatz eine gute Antwort.
Ich dachte, dass Sie möglicherweise mit numpy.cumsum
und numpy.diff
arbeiten können, um einen umschlossenen Bereich zu finden.
Die kumulative Summe Null sein wird, während Sie im schwarzen Bereich sind, dann in dem weißen Bereich für jedes Pixel um eins erhöht, wieder stabil, während Sie den geschlossenen Raum durchqueren, dann beginnt wieder zu erhöhen, usw.
Der Unterschied zweiter Ordnung findet dann Orte, wo die Sprünge auftreten, und Sie haben eine "klassifizierte" Karte übrig. Keine Garantie, dass dies verallgemeinert, nur eine Idee.
a = numpy.zeros((10,10))
a[3:7,3:7] = 1
a[4:6, 4:6] = 0
y = numpy.cumsum(a, axis=0)
x = numpy.cumsum(a, axis=1)
yy= numpy.diff(y, n=2, axis=0)
xx = numpy.diff(x, n=2, axis=1)
numpy.dot(xx,yy)
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 2., 2., 2., 2., 0., 0., 0.],
[ 0., 0., 0., 2., 4., 4., 2., 0., 0., 0.],
[ 0., 0., 0., 2., 4., 4., 2., 0., 0., 0.],
[ 0., 0., 0., 2., 2., 2., 2., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
- 1. Wie berechne ich die Ähnlichkeit zweier Ganzzahlen?
- 2. Wie berechne ich den Schnittpunkt zweier Linien in Python?
- 3. Berechne Logarithmus in Python
- 4. Vergleichen zweier Textdateien in Python
- 5. Vergleich zweier Dokumente in Python
- 6. Python-Schnittmenge zweier Listen, die Duplikate enthalten
- 7. Wie berechnet man die Fläche einer java.awt.geom.Area?
- 8. Berechnen Sie die Fläche eines Vierecks
- 9. Wie findet man den Schnittpunkt zweier Liniensegmente in Python?
- 10. Wie Korrelation zweier Vektoren in Python erhalten
- 11. Führt das Ausführen separater Python-Prozesse die GIL aus?
- 12. Wie berechne ich die MD5-Prüfsumme einer Datei in Python?
- 13. Berechne SHA1 von Strings in Python
- 14. Zunehmende Fläche um die Grundstücksfläche in ggplot2
- 15. C# SQLGeography: Diagnose ungültiger Geometrien
- 16. Fläche unter Fläche zwischen zwei Kurven
- 17. Berechne die Sigmoid-Funktion
- 18. Zeichnen von Geometrien mit Direct2D in MFC
- 19. Wie findet man die Fläche unter der Exponentialkurve (und die Kurve) aus der Zufallsverteilung in Python?
- 20. Excel: Separater Text in Zelle
- 21. Python: Berechne Fakultät einer nicht-ganzzahligen Zahl
- 22. Wie finden Sie die Punkte, an denen sich die Kanten zweier Polygone schneiden?
- 23. Verknüpfen separater Projekte in GHC
- 24. ListBox separater Text in C#
- 25. WCF-Dienst in separater Assembly
- 26. Anwendung in separater Sitzung ausführen?
- 27. Wie berechne ich Perzentile mit Python/Numpy?
- 28. Graue Fläche in Google Maps
- 29. Steigern Sie die Fläche von GMSPolyline
- 30. Berechnen Sie die Fläche eines Polygons
Eine handgemachte numpy Lösung wird über die Form/Anzahl der Regionen auf den Annahmen abhängen ... – Benjamin