今日PIL/Numpy/SciPyを使用して変換を行うための好ましい方法は何ですか?
2010年以降 リンクされた質問 が要求されたため、対応するコードはscipyから別のツールキットに移動しました: http://scikit-image.org/
だから私が実際に探していたコードは次のとおりです:
from skimage import io, color
rgb = io.imread(filename)
lab = color.rgb2lab(rgb)
Lab の性質により、srgb-> labの変換は追加パラメーターに依存することにも注意する必要があります:whitepoint、例えば:
•Photoshopは、D50(iccの標準)と呼ばれる白色点を使用します
•OpenCVおよびskimageはD65(srgbの標準)を使用します。
•デフォルトMatlab実装はD50を使用します( others を使用できます)。
このニース [〜#〜] faq [〜#〜] は次のように説明しています。
他の何かを使用する正当な理由がない限り、D65を使用する必要があります。
印刷業界では一般的にD50が使用され、写真では一般的にD55が使用されます。
これらは、屋内(タングステン)条件と昼光条件の妥協点を表しています。
RGB (0,0,255)
をLabに変換することで、処理しているホワイトポイントを確認できます。
•D50はあなたに与えます(30、68、-112)
•D55(30、73、-110)
•D65(32、79、-108)
「D」の後の数字は、(内部で)使用される白色点の色温度に対応します:D50 = 5003 K(黄色がかった)、D65 = 6504 K(青がかった)
アレックスとローマの答えに感謝します。彼らが私を正しい方向に向けてくれたからです。
古い Adobe Cookbookサイト でこのコードを見つけ、Pythonに適合させました。サードパーティのモジュールやコンポーネントは必要ありません。
def rgb2lab ( inputColor ) :
num = 0
RGB = [0, 0, 0]
for value in inputColor :
value = float(value) / 255
if value > 0.04045 :
value = ( ( value + 0.055 ) / 1.055 ) ** 2.4
else :
value = value / 12.92
RGB[num] = value * 100
num = num + 1
XYZ = [0, 0, 0,]
X = RGB [0] * 0.4124 + RGB [1] * 0.3576 + RGB [2] * 0.1805
Y = RGB [0] * 0.2126 + RGB [1] * 0.7152 + RGB [2] * 0.0722
Z = RGB [0] * 0.0193 + RGB [1] * 0.1192 + RGB [2] * 0.9505
XYZ[ 0 ] = round( X, 4 )
XYZ[ 1 ] = round( Y, 4 )
XYZ[ 2 ] = round( Z, 4 )
XYZ[ 0 ] = float( XYZ[ 0 ] ) / 95.047 # ref_X = 95.047 Observer= 2°, Illuminant= D65
XYZ[ 1 ] = float( XYZ[ 1 ] ) / 100.0 # ref_Y = 100.000
XYZ[ 2 ] = float( XYZ[ 2 ] ) / 108.883 # ref_Z = 108.883
num = 0
for value in XYZ :
if value > 0.008856 :
value = value ** ( 0.3333333333333333 )
else :
value = ( 7.787 * value ) + ( 16 / 116 )
XYZ[num] = value
num = num + 1
Lab = [0, 0, 0]
L = ( 116 * XYZ[ 1 ] ) - 16
a = 500 * ( XYZ[ 0 ] - XYZ[ 1 ] )
b = 200 * ( XYZ[ 1 ] - XYZ[ 2 ] )
Lab [ 0 ] = round( L, 4 )
Lab [ 1 ] = round( a, 4 )
Lab [ 2 ] = round( b, 4 )
return Lab
編集:サンプルpyCMSコード:
from PIL import Image
import pyCMS
im = Image.open(...)
im2 = pyCMS.profileToProfile(im, pyCMS.createProfile("sRGB"), pyCMS.createProfile("LAB"))
編集:PILフォークであるPillowには、pyCMSが組み込まれているようです。
PILイメージで動作するpyCMS( http://www.cazabon.com/pyCMS/ )を使用できます。
速度が要因でない場合は、python-colormath( http://code.google.com/p/python-colormath/ )を使用します。