救命阿,哪位有photoshop的rgb转lab的算法?工作急用阿 调整人像颜色,使用lab,但是各种算法效果都不好,有其它公司就用的photoshop的算法,效果好象不错阿, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调整人像颜色?老兄你不是在做护照/身份证之类的软件把?PhotoShop的算法是自己的,我只能提供给你一般的标准算法。而且要分两步的先从RGB->XYZ,再从XYZ换到LABRGB->XYZ var_R = ( R / 255 ) //R = From 0 to 255var_G = ( G / 255 ) //G = From 0 to 255var_B = ( B / 255 ) //B = From 0 to 255if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4else var_R = var_R / 12.92if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4else var_G = var_G / 12.92if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4else var_B = var_B / 12.92var_R = var_R * 100var_G = var_G * 100var_B = var_B * 100//Observer. = 2°, Illuminant = D65X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505-------------------------------------------------------------XYZ->CIE Labvar_X = X / 95.047 //Observer = 2°, Illuminant = D65var_Y = Y / 100.000var_Z = Z / 108.883if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )else var_X = ( 7.787 * var_X ) + ( 16 / 116 )if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )else var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )else var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )CIE-L* = ( 116 * var_Y ) - 16CIE-a* = 500 * ( var_X - var_Y )CIE-b* = 200 * ( var_Y - var_Z )____________________________________________XYZ->hunter Lab(H)L = 10 * sqrt( Y )(H)a = 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt( Y ) )(H)b = 7 * ( ( Y - ( 0.847 * Z ) ) / sqrt( Y ) ) BTW:xyz是一种数学坐标系,目的是为了精确描述rgb颜色对应的空间坐标而产生的。 同意楼上的lab的色系空间是和具体的物理的颜色无关的而photoshop本质上就是一个印刷专用的,和油墨颜色相关的专用软件不仅仅rgb到lab,rgb到cmyk等色系对于photoshop来说,都是和标准的变换有差异的lab空间不是唯一的,有很多标准的,photoshop是自己的独立的标准,也没有提供转换公式 http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html这里彩色空间转换还是比较全的。 photoshop的开发包要吧,会不会方便一些 photoshop的SDK?老实说那个东西用起来更麻烦-_-|||至少偶用过,觉得效果一般 同意楼上的,主要是封装在SDK里的函数我不知道,所以不会用!~呵呵 打开一个对话框以后,插入符不能显示!! VS2005/VS2008 如何给控件绑定一个变量? 快当叔叔了,散分求祝福~ VC做出来的程序怎么保证在没有开发环境的机子上面正常运行啊 项目之间的功能调用 位图擦除 怎样让每次输入的数据追加到listctrol控件的末尾! 2如何HOOK这个函数GetTickCount #define AFXAPI __stdcall 中这个 __stdcall 中什么意思??谢谢!! 在单文档中如何让程序运行自己的一个副本??? 用view3ds将3ds文件转化成.h文件,用opengl显示为什么没有贴图效果 怎么在静态线程函数里访问其他类的非静态成员函数?
RGB->XYZ var_R = ( R / 255 ) //R = From 0 to 255
var_G = ( G / 255 ) //G = From 0 to 255
var_B = ( B / 255 ) //B = From 0 to 255if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
else var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
else var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
else var_B = var_B / 12.92var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100//Observer. = 2°, Illuminant = D65
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505-------------------------------------------------------------XYZ->CIE Lab
var_X = X / 95.047 //Observer = 2°, Illuminant = D65
var_Y = Y / 100.000
var_Z = Z / 108.883if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )
else var_X = ( 7.787 * var_X ) + ( 16 / 116 )
if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
else var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )
if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )
else var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )CIE-L* = ( 116 * var_Y ) - 16
CIE-a* = 500 * ( var_X - var_Y )
CIE-b* = 200 * ( var_Y - var_Z )
____________________________________________XYZ->hunter Lab
(H)L = 10 * sqrt( Y )
(H)a = 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt( Y ) )
(H)b = 7 * ( ( Y - ( 0.847 * Z ) ) / sqrt( Y ) )
而photoshop本质上就是一个印刷专用的,和油墨颜色相关的专用软件不仅仅rgb到lab,rgb到cmyk等色系对于photoshop来说,都是和标准的变换有差异的lab空间不是唯一的,有很多标准的,photoshop是自己的独立的标准,也没有提供转换公式
这里彩色空间转换还是比较全的。
老实说那个东西用起来更麻烦-_-|||
至少偶用过,觉得效果一般