色彩の相補色 SciPy

色彩の相補色

美術関連の問題として、色彩の相補色を見つける問題を考えてみましょう。

相補色は、RGB色空間内で最も対照的な色です。

与えられた色に対して、それに最も近い相補色を見つけることができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import distance

# 関数定義: RGB色空間内で最も近い相補色を計算する
def find_complementary_color(color):
# 相補色の定義: RGB値の各要素を1から引くことで相補色を得る
complementary_color = [1 - channel for channel in color]
return complementary_color

# 与えられた色(RGB値)
given_color = [0.4, 0.2, 0.9] # 例えば青系統の色

# 相補色を計算
complementary_color = find_complementary_color(given_color)

# 色の距離を計算
distance_value = distance.euclidean(given_color, complementary_color)

# グラフ化
colors = [np.array(given_color), np.array(complementary_color)]
labels = ['Given Color', 'Complementary Color']

plt.figure(figsize=(8, 4))
for i in range(2):
plt.subplot(1, 2, i+1)
plt.bar(range(len(colors[i])), colors[i], color=['r', 'g', 'b'], alpha=0.6)
plt.xticks(range(len(colors[i])), ['R', 'G', 'B'])
plt.title(labels[i])

plt.tight_layout()
plt.show()

print(f"The given color is: {given_color}")
print(f"The complementary color is: {complementary_color}")
print(f"The distance between these colors is: {distance_value}")

このコードは、与えられた色(例えば青系統の色)のRGB値を取り、その色に最も近い相補色を見つけます。

そして、2つの色を棒グラフで示し、それらの色の距離を表示します。

色の距離が大きいほど、その色はより対照的であると考えられます。

[実行結果]

ソースコード解説

このソースコードは、Pythonで色彩処理を行うためのプログラムです。

以下はコードの構造と機能の詳細な説明です:

ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import distance
  • numpy:数値計算を行うためのライブラリ。
  • matplotlib.pyplot:グラフを描画するためのライブラリ。
  • scipy.spatial.distance:距離を計算するためのライブラリ。

相補色を見つける関数の定義

1
2
3
def find_complementary_color(color):
complementary_color = [1 - channel for channel in color]
return complementary_color
  • find_complementary_color 関数は、与えられた色に対する相補色を計算します。
  • 各RGBチャンネルの値から1を引くことで相補色を生成しています。

与えられた色の定義

1
given_color = [0.4, 0.2, 0.9]
  • この行では、青系統の色を表すRGB値 [0.4, 0.2, 0.9] を定義しています。

相補色の計算

1
complementary_color = find_complementary_color(given_color)
  • find_complementary_color 関数を使って、与えられた色の相補色を計算しています。

色の距離の計算

1
distance_value = distance.euclidean(given_color, complementary_color)
  • scipydistance モジュールの euclidean 関数を使って、与えられた色とその相補色の間の距離を計算しています。

グラフの描画

1
2
3
4
5
6
7
8
9
10
11
12
colors = [np.array(given_color), np.array(complementary_color)]
labels = ['Given Color', 'Complementary Color']

plt.figure(figsize=(8, 4))
for i in range(2):
plt.subplot(1, 2, i+1)
plt.bar(range(len(colors[i])), colors[i], color=['r', 'g', 'b'], alpha=0.6)
plt.xticks(range(len(colors[i])), ['R', 'G', 'B'])
plt.title(labels[i])

plt.tight_layout()
plt.show()
  • 2つのグラフを描画します。左側には与えられた色、右側にはその相補色を示すバー形式のグラフが表示されます。
  • 色の強度は、RGBチャンネルの値を表しており、各バーの高さが対応する色の成分を示しています。

結果の出力

1
2
3
print(f"The given color is: {given_color}")
print(f"The complementary color is: {complementary_color}")
print(f"The distance between these colors is: {distance_value}")
  • 最後に、与えられた色、その相補色、およびその間の距離をコンソールに表示します。

このプログラムは、与えられた色とその相補色の関係性を理解しやすく視覚化し、色の距離を数値化して表示することで、色彩理論に関する概念を理解するのに役立ちます。

結果解説

下記の結果は、与えられた色とその相補色に関する情報を示しています。

[実行結果]

The given color is: [0.4, 0.2, 0.9]
The complementary color is: [0.6, 0.8, 0.09999999999999998]
The distance between these colors is: 1.019803902718557
  1. 与えられた色:
  • RGB値が [0.4, 0.2, 0.9] となっています。
  • これは、赤の成分が40%、緑の成分が20%、青の成分が90%である色を示しています。
    青が最も強く、赤と緑が弱い色です。
  1. 相補色:
  • 計算された相補色のRGB値[0.6, 0.8, 0.09999999999999998] です。
  • この色は、与えられた色と対照的であり、赤と緑の成分が高く、青の成分が低い色です。
    つまり、青系統の色に対して赤と緑が強く現れる色です。
  1. 色の距離:
  • 与えられた色と相補色の間の距離は、1.019803902718557 です。
  • この値は、色彩空間内で2つの色がどれだけ対照的かを示しています。
    この場合、与えられた色とその相補色はかなり対照的であることを示しています。

グラフ解説

[実行結果]

このグラフは、与えられた色とその相補色を示しています。

それぞれの棒グラフは、RGB色空間内の3つのチャンネル(赤、緑、青)を表しています。

  1. 左側のグラフ(Given Color)

    • 与えられた色のRGB値が示されています。
    • 各バーは、赤、緑、青のチャンネルを示し、それぞれの色の強度を表しています。
    • 例えば、青系統の色が与えられた場合、青のバーが最も高くなるでしょう。
  2. 右側のグラフ(Complementary Color)

    • 計算された相補色のRGB値が示されています。
    • 同様に、赤、緑、青のバーがそれぞれの色の強度を表しています。
    • 相補色は、与えられた色と対照的な色であるため、バーの高さが与えられた色とは異なる場合があります。

これらのグラフを見ることで、与えられた色とその相補色の各色成分の相違類似性が視覚的に理解できます。

また、それらの色の距離も計算され、その差異の大きさが数値として示されています。

色の距離が大きいほど、色の相補性が高いと考えられます。