Ich habe ein Bild als numpy Array und eine Maske für das Bild.Funktion auf maskiertes numpy Array anwenden
Wie kann ich Funktion auf alle maskierten Elemente anwenden?
def foo(x):
return int(x*0.5)
Ich habe ein Bild als numpy Array und eine Maske für das Bild.Funktion auf maskiertes numpy Array anwenden
Wie kann ich Funktion auf alle maskierten Elemente anwenden?
def foo(x):
return int(x*0.5)
Für diese spezielle Funktion könnten nur wenige Ansätze aufgelistet werden.
Ansatz # 1: Sie boolean indexing
für in-Place-Einstellung verwenden -
img[mask] = (img[mask]*0.5).astype(int)
Ansatz # 2: Sie auch np.where
für eine möglicherweise mehr intuitive Lösung verwenden -
img_out = np.where(mask,(img*0.5).astype(int),img)
Mit dieser np.where
, die eine Syntax von np.where(mask,A,B)
hat, wählen wir zwischen zwei gleichförmigen Arrays A
und B
, um ein neues Array mit der gleichen Form wie A
und B
zu erzeugen. Die Auswahl erfolgt basierend auf den Elementen in mask
, die wiederum die gleiche Form wie A
und B
haben. So wählen wir für jedes True
Element in mask
A
, andernfalls B
. Übersetzen Sie dies zu unserem Fall, A
wäre (img*0.5).astype(int)
und B
ist img
.
Ansatz # 3: einen eingebauten in np.putmask
Es gibt, die am nächsten für diese genaue Aufgabe zu sein scheint und verwendet werden könnten, in-Place-Einstellung zu tun, wie so -
np.putmask(img, mask, (img*0.5).astype('uint8'))
Vielen Dank für die Lösungen! Aber wie habe ich sie auf andere Funktionen angewendet? Angenommen, ich muss zufällige Pixel anstelle aller maskierten Zellen erzeugen. Wenn ich diese Methoden verwende, wird allen Masken ein Wert zugewiesen. –
Ok, ich habe es verstanden. Zuerst erzeuge ich ein verrauschtes Bild mit der gleichen Größe wie 'img' und dann füge ich sie mit der Maske' ans = np.with (mask, noisy_template, img) ' –
@KatrinaMalakhova ein. Ah, ich habe deine Frage jetzt bekommen! :) Also ja, du kannst noisy_template mit 'noisy_template = np.random.randint (0,255, img.shape) .astype ('uint8')' erzeugen. – Divakar
Eigentlich sollte Funktion zurückgeben zufälliger Wert im Bereich (0, 255) für jede Zelle unter Maske. –