ホームページ > バックエンド開発 > Golang > アルゴリズムを使用してペイントの色の混合を正確にモデル化するにはどうすればよいでしょうか?

アルゴリズムを使用してペイントの色の混合を正確にモデル化するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-29 15:41:11
オリジナル
556 人が閲覧しました

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

ペイントの色空間で色を混合するためのアルゴリズム

物理的なペイントを混合すると、得られる色は、色を混合したときに予想される色と異なります。デジタル画面。これは、ペイントが吸収によって混合するのに対し、デジタル カラーの混合には放出が含まれるためです。

ペイントの吸収とデジタル カラーの混合

  • ペイントの吸収: 塗料は特定の波長の光を吸収し、その結果、目に見える色が生じます。たとえば、青い絵の具は赤と緑の波長を吸収し、青の光だけを反射します。
  • デジタルカラーミキシング: デジタルディスプレイは光を発して色を作成します。 2 つのデジタル カラーを混合すると、結果の色は放射された波長の組み合わせになります。

ペイント カラースペースでのカラー混合アルゴリズム

ペイントでの色の混合色空間では、白色光から吸収された波長を減算します (255、255、255)。たとえば、青色のペイント (赤と緑を吸収) と黄色のペイント (青色を吸収) を混合すると、濁った緑色になります。

HLS カラースペースを使用した代替ソリューション

代替、HLS (色相、明度、彩度) 色空間を使用すると、物理的な吸収特性に依存しない、より直感的な色の混合結果を提供できます。 Paint.

HLS 色空間での色混合用の Python コード

以下は、HLS 色空間の 2 つの色の平均を計算する Python 関数です。

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.))
ログイン後にコピー

この関数を使用すると、青と黄色の絵の具を混ぜた結果を近似できます。例:

>>> average_colors((255, 255, 0), (0, 0, 255))
(0, 255, 111)
ログイン後にコピー

このアプローチは、物理的なペイントの吸収特性に制約されない、より直感的な色の混合結果を提供します。

以上がアルゴリズムを使用してペイントの色の混合を正確にモデル化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート