Ich arbeite an einem Segmentierungsproblem, bei dem ein Bild jedem RGB-Wert eine Klassenbezeichnung zugeordnet wird. Das Problem, das ich habe, besteht darin, RGB-Werte von einem Bild (numpy array) zu einem entsprechenden Klassenetikettenbild effizient abzubilden.Zuordnung von RGB-Werten in einem Bild zu einer entsprechenden ID mit einem Wörterbuch
Lassen Sie sich das folgende vereinfachte Beispiel liefern:
color2IdMap
{(100,0,100):0, (0,200,0):2}
labelOld
array([[[100,0,100],
[0,200,0]],
[[100,0,100],
[0,200,0]]], dtype=uint8)
(in einem realen Beispiel die colorIdMap etwa 20 Einträge hat und labelOld wird eine Anordnung von Form sein: (1024,512,3))
Jetzt möchte ich, dass das Ergebnis das folgende abgebildete Array ist. mit Form: (1024.512)
labelNew
array([[ 0, 2],
[ 0, 2]])
habe ich versucht, diese Comprehensions mit Schleifen und Liste zu tun, aber beide Methoden sind ziemlich langsam (etwa ~ 10 Sekunden pro Bild, was für 250K Bilder eine große Zahl ist). Und ich frage mich, ob es einen schnelleren Weg gibt, es zu tun.
Versuchte Methode 1:
labelNew = np.empty((1052,1914), dtype=np.uint8)
for i in range(1052):
for j in range(1914):
labelNew[i, j] = color2IdMap[tuple(labelOld[i, j])]
Versuchte Methode 2:
labelNew = [[color2IdMap[tuple(x)] for x in y] for y in labelOld]
So ist meine Frage, ob es eine schnellere und effizientere Art und Weise ist das zu tun?
Sollte das nicht sein '[[ 0, 2], [0,2]] '? – Divakar
ah ja! Tippfehler korrigiert! – afroze