Seite 1 von 1

rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 11:27
von G-Rizzle
Hi!


ich möchte ein 2D-Array aus Höhenwerten in schwarz-weiß plotten. Werte unter einem bestimmten Schwellwert sollen eine eigene Farbe bekommen. Folgender Code erzeugt das gewünschte Ergebnis:

Code: Alles auswählen

custom_cmap = []
for i in range(0, 255):
    custom_cmap.append([i/255, i/255, i/255]) 
custom_cmap = ListedColormap(custom_cmap)

custom_cmap.set_under(color=[112/255,128/255,144/255])

fig, ax = plt.subplots(figsize=(30,15))
 plt.imshow(xyz_dataset_z_coordinates_np, cmap = custom_cmap, 
           vmin = np.amin(xyz_dataset_z_coordinates_np + 1))

ax.set_axis_off()

nun habe ich eine Array maske der selben Dimensionen in x und y, d.h. ein 2D-Array aus Bools, wobei relevante Bereiche mit True, irrlevante mit False besetzt sind.

Diese Maske möchte ich nun auf das imshow-Objekt anwenden. Aus einer vorherigen Programmierung habe ich folgende, funktionierende Funktion, die ein 3D-Array als Bild (3D: ein als mpimg.imread-eingelesenes Bild der Dimension 1024x1024 Pixel hat die Dimension 1024x1024x3, wobei die 3. Dimension den R - G - oder B Wert angibt). An den durch die Maske gekennzeichneten relevanten Bereichen färbt sie den True-Bereich ein.


Code: Alles auswählen

  # helpferfunction to apply a mask with specific color and opacity to the image
def apply_mask(image, mask, color, alpha):

  # override the r-g-b values of the image at the coordinates given from the mask
  for c in range(3):
      image[:, :, c] = np.where(
                                mask == 1,
                                image[:, :, c] *
                                (1 - alpha) + alpha * color[c] * 255,
                                image[:, :, c])
  return image
  
  






Die Funktion apply_mask möchte ich nun mit dem imshow-Objekt füttern, und nicht mit einem als mpimg.imread-eingelesenen Bild. Dazu benötige ich aber ja die RGB-Informationen für jeden Arrayeintrag. Meine Frage ist jetz: kann ich aus dem imshow-Objekt das RGB-Array extrahieren?

Re: rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 11:42
von __deets__
Das geht mE nicht. Und warum sollte das gehen? Du kannst doch trivial die Daten, die du imshow zur Darstellung überantwortest, auch einfach an deine Maskierung übergeben.

Re: rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 12:07
von G-Rizzle
__deets__ hat geschrieben: Mittwoch 30. März 2022, 11:42 Das geht mE nicht. Und warum sollte das gehen? Du kannst doch trivial die Daten, die du imshow zur Darstellung überantwortest, auch einfach an deine Maskierung übergeben.
was genau meinst du ? verstehe ich nicht ganz

Re: rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 14:35
von __deets__
Na xyz_dataset_z_coordinates_np hast du doch. Das sind doch die Daten. Wieso kannst du die nicht anderweitig weiterveraendern.

Re: rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 14:57
von G-Rizzle
__deets__ hat geschrieben: Mittwoch 30. März 2022, 14:35 Na xyz_dataset_z_coordinates_np hast du doch. Das sind doch die Daten. Wieso kannst du die nicht anderweitig weiterveraendern.
Aber ich möchte die Daten ja nicht wirklich verändern, nur die ihnen zugewiesenen Farbwerte. Oder analog zum Einfärben von Punkten unterhalb eines Schwellwerts, Werte innerhalb der Maske fiktiv auf einen sehr hohen Wert setzen und sagen, dass alle Werte in diesem Bereich rot gefärbt sein sollen?

Re: rgb-array aus imshow objekt extrahieren

Verfasst: Mittwoch 30. März 2022, 14:59
von __deets__
Ja und? Dann kannst du doch Kopien der Daten anlegen. Der Punkt ist: es gibt keine Daten aus dem Objekt. Du musst also basierend auf den ursprünglichen arbeiten.

Und seien mask Funktion muss ja auch nicht verändern. Die kann auch einfach eine maskierte Kopie zurückgeben.