Ant*_*ins 32 python numpy scipy color-space python-imaging-library
今天使用PIL/Numpy/SciPy进行转换的首选方式是什么?
Ant*_*ins 53
自2010 年问到链接问题以来,相应的代码从scipy转移到了一个单独的工具包:http://scikit-image.org/
所以这是我实际需要的代码:
from skimage import io, color
rgb = io.imread(filename)
lab = color.rgb2lab(rgb)
Run Code Online (Sandbox Code Playgroud)
还应该注意的是,由于实验室性质srgb->实验室转换取决于一个额外的参数:whitepoint,例如:
• Photoshop使用一个名为D50的白点(这是icc的标准)
• OpenCV和skimage使用D65(这是srgb的标准.
•默认的Matlab实现使用D50(它能够使用其他人),
这个很好的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(黄色)
我很感激亚历克斯和罗曼的答案,因为他们指出了我正确的方向.
Rom*_*kin 20
我在旧的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
Run Code Online (Sandbox Code Playgroud)
编辑:示例pyCMS代码:
from PIL import Image
import pyCMS
im = Image.open(...)
im2 = pyCMS.profileToProfile(im, pyCMS.createProfile("sRGB"), pyCMS.createProfile("LAB"))
Run Code Online (Sandbox Code Playgroud)
编辑:枕头,PIL前叉,似乎内置了pyCMS.
您可以使用与PIL图像一起使用的pyCMS(http://www.cazabon.com/pyCMS/).
如果速度不是一个因素,请使用python-colormath(http://code.google.com/p/python-colormath/).
| 归档时间: |
|
| 查看次数: |
32397 次 |
| 最近记录: |