Heim >Backend-Entwicklung >Golang >Wie können wir die Farbmischung von Lacken mithilfe eines Algorithmus genau modellieren?

Wie können wir die Farbmischung von Lacken mithilfe eines Algorithmus genau modellieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-29 15:41:11570Durchsuche

How Can We Accurately Model Paint Color Mixing Using an Algorithm?

Algorithmus zum Mischen von Farben in einem Farbraum

Beim Mischen physischer Farben unterscheidet sich die resultierende Farbe von dem, was man beim Mischen von Farben erwarten würde ein digitaler Bildschirm. Dies liegt daran, dass Farben durch Absorption gemischt werden, wohingegen digitales Farbmischen eine Emission beinhaltet.

Farbabsorption und digitale Farbmischung

  • Farbabsorption: Farbe absorbiert bestimmte Lichtwellenlängen, wodurch die sichtbare Farbe entsteht. Blaue Farbe absorbiert beispielsweise rote und grüne Wellenlängen und reflektiert nur blaues Licht.
  • Digitale Farbmischung:Digitale Displays geben Licht ab, um Farben zu erzeugen. Beim Mischen zweier digitaler Farben ist die resultierende Farbe eine Kombination der emittierten Wellenlängen.

Algorithmus für die Farbmischung im Farbraum von Farben

Farben in einer Farbe mischen Beim Farbraum werden die absorbierten Wellenlängen vom weißen Licht subtrahiert (255, 255, 255). Beispielsweise würde das Mischen von blauer Farbe (die Rot und Grün absorbiert) mit gelber Farbe (die Blau absorbiert) zu einem schlammigen Grün führen.

Alternative Lösung mit HLS-Farbraum

Alternativ Durch die Verwendung des HLS-Farbraums (Hue, Lightness, Saturation) können intuitivere Farbmischungsergebnisse erzielt werden, die unabhängig von den physikalischen Absorptionseigenschaften von sind malen.

Python-Code für die Farbmischung im HLS-Farbraum

Unten ist eine Python-Funktion, die den Durchschnitt zwischen zwei Farben im HLS-Farbraum berechnet:

import math
from colorsys import rgb_to_hls, hls_to_rgb

def average_colors(rgb1, rgb2):
    h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.)
    h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.)
    s = 0.5 * (s1 + s2)
    l = 0.5 * (l1 + l2)
    x = cos(2*pi*h1) + cos(2*pi*h2)
    y = sin(2*pi*h1) + sin(2*pi*h2)
    if x != 0.0 or y != 0.0:
        h = atan2(y, x) / (2*pi)
    else:
        h = 0.0
        s = 0.0
    r, g, b = hls_to_rgb(h, l, s)
    return (int(r*255.), int(g*255.), int(b*255.))

Mit dieser Funktion können wir das Ergebnis des Mischens von blauer und gelber Farbe annähern, z Beispiel:

>>> average_colors((255, 255, 0), (0, 0, 255))
(0, 255, 111)

Dieser Ansatz liefert ein intuitiveres Farbmischergebnis, das nicht durch die Absorptionseigenschaften physikalischer Farben eingeschränkt wird.

Das obige ist der detaillierte Inhalt vonWie können wir die Farbmischung von Lacken mithilfe eines Algorithmus genau modellieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn