2017-06-08 23 views
2

RGBまたはHexのいずれかの色を指定すると、それに類似した色はどうやって見つかりますか?同様に私は小さい値で区別できるべきであることを意味します。Pythonでの類似の色検出

+0

? numpy.sqrt(r1 - r0)** 2 +(g1 - g0)** 2 +(b1 - b0)** 2) – user2660966

+0

@ user2660966しかし、人間の色の認識は異なり、一致しませんeuclidian距離で。 – moritzg

+0

色をHSV色空間に変換することを検討することがあります。 – taras

答えて

3

RGB色空間はデバイスに依存し、知覚的に均一ではありません。色の類似性を測定する場合は、最初にRGB値をデバイスに依存せず知覚的に一様な色空間に変換する必要があります(例:CIELAB)。次に、Lab Delta Eのような適切な類似性メトリックによって色差を測定することができます。

デモ

this imageを考えてみましょう:

original image

は、私たちはあなたの基準色が緑の木陰、そのRGB値の例[0, 160, 0][120, 0, 140]のためのものであるマゼンタの陰、であると仮定しましょう。次のスニペットは、基準色に対するデルタEが特定の閾値(それぞれ15および20)よりも小さい画像ピクセルを識別します。単に彼らのRGBコード間のユークリッド距離を取らない理由

import numpy as np 
from skimage import io 
from skimage.color import rgb2lab, deltaE_cie76 

rgb = io.imread('https://i.stack.imgur.com/npnrv.png') 
lab = rgb2lab(rgb) 

green = [0, 160, 0] 
magenta = [120, 0, 140] 

threshold_green = 15  
threshold_magenta = 20  

green_3d = np.uint8(np.asarray([[green]])) 
magenta_3d = np.uint8(np.asarray([[magenta]])) 

dE_green = deltaE_cie76(rgb2lab(green_3d), lab) 
dE_magenta = deltaE_cie76(rgb2lab(magenta_3d), lab) 

rgb[dE_green < threshold_green] = green_3d 
rgb[dE_magenta < threshold_magenta] = magenta_3d 
io.imshow(rgb) 

similar colors detected

関連する問題