cielab

时间:2024-03-27 21:04:44编辑:coo君

1.简述RGB 颜色空间、CMYK 颜色空间、CIELab 颜色空间各有何显著特点?

1.RGB颜色空间基本概念RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。在大自然中有无穷多种不同的颜色,而人眼只能分辨有限种不同的颜色,RGB模式可表示一千六百多万种不同的颜色,在人眼看来它非常接近大自然的颜色,故又称为自然色彩模式。红绿蓝代表可见光谱中的三种基本颜色或称为三原色,每一种颜色按其亮度的不同分为256个等级。当色光三原色重叠时,由于不同的混色比例能产生各种中间色,例如,三原色相加可产生白色。所以RGB模式是加色过程。屏幕显示的基础是RGB模式,彩色印刷品却无法用RGB模式来产生各种彩色,所以,RGB模式常用于视频、多媒体与网页设计。--------------------- 2.CMYK模式基本概念当阳光照射到一个物体上时,这个物体将吸收一部分光线,并将剩下的光线进行反射,反射的光线就是我们所看见的物体颜色。这是一种减色色彩模式,同时也是与RGB模式的根本不同之处。不但我们看物体的颜色时用到了这种减色模式,而且在纸上印刷时应用的也是这种减色模式。CMYK代表印刷上用的四种颜色,C代表青色(Cyan),M代表洋红色(Magenta),Y代表黄色(Yellow),K代表黑色(Black)。因为在实际应用中,青色、洋红色和黄色很难叠加形成真正的黑色,最多不过是褐色而已。因此才引入了K——黑色。黑色的作用是强化暗调,加深暗部色彩。--------------------- 3.Lab颜色模型基本概念Lab模式是根据Commission International Eclairage(CIE)在1931年所制定的一种测定颜色的国际标准建立的。于1976年被改进,并且命名的一种色彩模式。Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。 Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。

什么编程语言适合windows系统

什么编程语言适合windows系统?那肯定是 C# 跟 VB 了,C# 的相性最佳,因为 C# 就是微软自己造出来的语言呐--!

但是,错了错了,或者说你的目的是想学编程的话,其实是跟这个问题无关了,因为几乎所有的语言都可以在 windows 上面跑,所以你需要考虑的是什么语言比较好入门编程,而不需要去考虑平台兼容性的问题。
好入门的编程语言的话需要综合很多因素,但是目前认为的最佳实践是:Python3。
国外很多学校的编程教育都开始向 Python3 靠拢了,国内比较慢一点。R 语言的话,是日本人写的,听说也不错,但是因为国内的资料很少,不建议学习。
当然了,有点天分的话和兴趣的话,也可以从 C 语言开始,学C 加上 C++ 的类部分即可,因为 C 真正的触及了计算机的本质。
我建议你先从 Python 开始学起,这样可以避免放弃。


Photo中RGB与CMYK宣传册印刷有什么区别?

色管理、数字式照相和彩色扫描方面的进步促使新老扫描机操作人员仔细考虑在什么时候进行校色和在什么时候进行分色。滚筒式扫描机操作人员使用传统方法产生由黄、品、青和黑色构成的扫描图像,但今天的新型工具则导致新的工作流程的广泛采用——即在分色成CMYK之前就进行扫描和校色。本文阐述了这种方法的优点以及一些有关扫描、校色及分色方面的相应的背景知识。扫描和数字式照相两者都捕捉关于宣传册印刷图像的红、绿和蓝色信息,但各种图像捕捉的方法视其位深而产生了不同的信息量。虽然大多数扫描机在各色通道中都使用1字节(8位)的信息,但目前扫描机和数字照相机使用超过8位的字节来描述各个基本色已变得日益常见了。这些附加位用来捕捉各个像素的大量的暗色调,产生了多色和各通道最大颜色之间的细微描述(多为灰色调)。每个通道所使用的位数就是我们所称的数字图像的位深度。例如,在具有每个通道8位位深的RGB模式中,扫描或数字照片使用总量为24位来描述各个像素的颜色,称之为24位颜色,因为按各个通道8位计,3个通道(红、绿、蓝)即每个像素位置总量为24位。捕捉RGB数据的其他常用配置包括:每个通道10位(又称30位颜色,因为按10位计共3个通道);每个通道12位(36位颜色);每个通道16位(48位颜色)。在扫描或捕捉之后图像被放大时数据的这些附加位是十分有用的,因为附加位深度适于更好地插值。 分色所谓宣传册印刷分色是指RGB图像数据被转换为最接近等量的青、品、黄及黑色(CMYK)数值的工艺。这对于一般印刷复制工艺来说是十分必要的,因为大多数印刷设备使用青、品、黄减色法三原色和黑色(它不是基本色)。要用黑色来补偿印刷油墨(即色剂)之不太理想的吸收特性。使用黑色会扩展印刷的色调范围,从而产生更深、更丰富的暗色调。分色取决于精确计算需要多少CMYK才能接近RGB扫描。按传统,这是通过预置附设于滚筒式扫描机上的机载计算机完成的。几十年来,这些“高端”扫描机在扫描过程中捕捉RGB数据,并在“运行状态下”(同时扫描图像)将它转换为CMYK数据。在今天的印刷领域中,这种分色方法正快速地被一种捕捉RGB数据并把它作为RGB存储于磁盘上的工作流程所取代。分色以及转换为CMYK是在以后的时间用软件或任何一个能连接数字照相机的软件程序完成的。然而,两种分色方法都严重限制了把同样分色的数据输出给各种不同设备的灵活性,因为分色是专为特定印刷复制系统进行的。一份为平版印刷机进行复制而分色的文件在输出到彩色复印机时,即使两者都是CMYK输出设备,看起来也不会是一样的。CMYK分色对某种单一设备而言是特定的,原因有多种:一是各设备具有其独特的灰平衡和色调复制(包括网点增大)特性。此外,设定分色控制的操作人员从RGB转换为CMYK过程中可以改变黑色的量。黑版信息如前所述,为产生近似的色调范围需要的黑色的量主要取决于所使用的印刷油墨之光吸收特性。用户对承印物的选择亦是这种因素的一部分。然而,熟练的印刷机操作人员也可改变他们所选择的墨层厚度。墨层越厚密度越高,一般会使印刷图像具有更为饱和的外观。增大墨层厚度会很难保持理想的水墨平衡。一些印刷厂因此更喜欢较薄墨层印刷品的分色,从而保证在整个印刷过程中保持一致的印刷质量。所有这一切对分色的影响是为厚墨层印刷而准备的图像将要求在暗调区域减少黑色,因为暗色调的暗度可通过印刷高百分比的青、品、黄色油墨来产生。确定分色当中黑版信息量的分色过程包括UCR(底色去除)和GCR(灰成分替代)。色调值增加在考虑色调值增加(网点增大)时,为各种印刷复制系统而准备的CMYK图像之间的差别被增大了。扫描机和印刷机操作人员都明白印在承印物上的油墨网点产生比原稿数字式数据暗得多的图像——一种称之为“网点增大”的效应。除了像纸张表面和油墨粘性这样的因素以外,各印刷机在确定印刷图像的网点增大量时也起到一定作用。在分色过程中补偿网点增大,意味着可抵消印刷时所发生的变暗现象,使图像转换为CMYK时变得更明亮。把图像从一种印刷状态移至另一种印刷状态而不补偿色调值增加的变化则会使图像太暗或太亮,将导致颜色偏移,因为高光、中间调和暗调的灰平衡对网点增大起着不同的作用。使用RGB和CMYK图像数据很少现代宣传册印刷印前部门意识到RGB图像数据的重要性。这些成像专业机构认识到扫描和数字照相在整个校色和修版过程中应按RGB模式保存,而在所有的调节完成之后,向CMYK转换。正因为有了这些经过校色和修正的RGB数据,专业印前部门才能够长期编档存储。这就使得从档案库存储器中检索的图像可用在不同于原输出设备的印刷机(或其他复制系统)上。这种对于RGB图像数据的强调在很多出版工作流程中产生了良好影响,无论分色方法是采用系统级彩色管理法还是采用预定Actions的Photoshop中的图像成批转换法。最为重要的就是各种印刷机、数字打样设备或计算机监控器复制同一图像的效果应严格相同。在为各设备进行单独分色时这是可能的。因为各复制系统要求青、品、黄和黑色之稍微不同的混合以产生相似的外观,所以单独分色便使图像在不同的设备上看起来相同。观察(并测量)这些设备所复制的颜色差别的方法是测量产生中性灰所需要的青、品红和黄的量——一种我们称之为复制系统的灰平衡。如果图像在转换为CMYK之后已经校色或修正,那么重新使用不同输出设备上的最后图像就要求调节CMYK图像之高光、中间调和暗调网点并改变总的灰平衡和色彩饱和度。图像中黑色的量很难不损害图像质量而加以改变,但若不修正黑色数据而印刷图像就会产生不良的结果。例如,原来为高质量联机干燥的单张纸印刷机分色的CMYK图像如果在冷固型卷筒纸印刷机上印刷会造成蹭脏。折衷方案是修正网页或CD-ROM电子出版物中使用的任一CMYK图像。RGB图像可利用较大的RGB色调范围来再现更为明亮、更为饱和的颜色。然而,在图像被分色为CMYK后,图像中的所有像素均处于CMYK色调范围之内。整个印刷工业编档保存RGB图像的发展趋势碰到了某些来自有经验的扫描机操作人员和分色专门人员的阻力。这些老专业人员在使用一排排旋钮装饰的扫描机和RGB图像数据的长度只能驱动输出滚筒的激光束时就学习了分色的技巧。但他们直到客户开始在其廉价的台式CCD扫描机上进行扫描时才听说RGB图像文件用于印前。对于拥有高端彩色设备的部门而言,RGB图像开始象征着桌面扫描机成为一种威胁。结果,一些印前技术人员把RGB校色和低质量的图像捕捉联系在一起。差不多十年以前,Linotype Hell公司(现为HeidelbergPrepress)发表了它的第一份LinoColor。该软件程序在图像数据转换为CMYK之前支持图像数据的校色。CIE LAB模式Lino Color亦把大多数印前工作者介绍给CIE LAB色空间——既不是RGB也不是CMYK。由Commission International edel’Eclairage开发的Lino Color工作流程是捕捉RGB图像数据,按CIE LAB模式进行校色和修正,然后再按CMYK模式分解该数据。通过Apple Computer’sColorSync软件得以推广的ICC应允的彩色管理工作流程把其根源归因于LinoColor’sRGB-CIELAB-CMYK工作流程。Apple用于彩色变换(theColorSync彩色管理模型)的软件工具是得到批准的LinoColor改编本。CIELAB色空间之显著优点是图像可被转换为CIELAB模式,然后再转回为RGB,而图像质量无明显改变——尽管输入或输出CIELAB变换图像精确到什么程度仍是一个有争论的问题。CIELAB包含了所有肉眼可见的颜色,因此色调、饱和度和亮度是可以调节的,以便使图像适应任何色调范围或复制系统。CIELAB可为任何一种基于三种标志(L、A和B)肉眼可见的颜色提供数值位置。数值L表示从亮到暗的颜色亮度。标志A和B只不过是沿着纬轴(A)和经轴(B)的位置,通过一圆形色空间所画,在圆形色空间的中心无饱和度。当规定点远离圆心移动时色饱和(又称色品)增加。围绕圆周移动可确定所描述的色调。然而,为了利用色调、饱和度和亮度(HSL)的校色方法,不必将图像转换为CIELAB。专业图像编辑程序(包括AdobePhotoshop和LinoColor)使RGB模式图像可通过调整HSL值,包括根据整体或特定基本色或间色之中的HSL值进行校色。使用的CMYK的固定Photoshop用户可通过Info调色板和View鼠标找到对策:在将图像进行分色之前实时显示图像的CMYK模式值。可调整调色板以显示由RGB数据分色得到的实际值。同样,由View鼠标选择CMYKPreview可以对用于驱动监控器的图像信息分色。使用这两种工具,甚至连高端扫描机操作人员都会认为以RGB模式进行校色是可行的,并且可同时观察CMYK值显示的结果。偏色的校正从概念上说理由十分简单:如果在一幅RGB图像上能够发现偏色,那么所要求的调整就十分简单并且以平衡的方式改变图像的整个色调范围。然而,如果等到对图像进行分色并进行同样的校色之时,那么偏色的影响会分布于四个颜色之中。在很多情况下,仅涉及加色法三原色中的两种颜色的偏色(如由于过大量的绿和蓝色产生的偏青色),现在分布于CMYK图像的所有四个颜色中。使用Photoshop’sColor Balance控制以去除RGB图像中的偏青色是很容易的。为改变高光、中间调和暗调值而输入适当值的情况下,整个灰色梯尺就变成中性的了。如果在CMYK转换后试图在图像上进行同样的偏青色校正,偏青色的残余部分将留在灰色梯尺中。控制高光和暗调的网点大小RGB校色的另一个重要优点是用户可以控制高光和暗调网点的大小。当图像校色时,要进行所需要的色调调整,以去除扩展到图像最亮和最暗部分的色调。调整时要特别注意,否则校色会去掉图像的高光,或把不需要的偏色掺入到暗调部分。一些色调校正方法广为应用,原因在于它们适合大量控制高光和暗调网点(如Photoshop’sCurves功能)。无论采用什么校色方法,选择正确的高光或暗调网点均取决于所使用的复制系统——它要求这些网点大小必须正确调整才能反映输出时所用的印刷机、打样设备或计算机监控器的特性。今天的系统级彩色管理使得下列两点变得容易:一是在图像上获得适宜的最小和最大的网点;二是产生灰平衡特别适合于输出设备的CMYK图像。ColorSync用户工作流程十分简单:为每一输出设备制作专门的剖面图文件,并提供作为输入的彩色平衡的RGB图像。各RGB图像应具有始终如一的最小和最大密度(即RGB值)。然后,ColorSync软件对图像进行分色同时进行适当的彩色调整,包括安排合适的高光和暗调网点、设备特有的灰平衡和所需要的黑版类型。把刚叙述过的情况的灵活性和在校色过程中确定CMYK图像最小和最大网点的工作流程相比较,再由此生成设备专有的图像。如果图像肯定在冷固型卷筒纸印刷机上印刷并采用这一工艺,那么如果重新打算使用联机干燥的单张纸印刷机时,则图像不能达到其最高的质量。调整图像的高光和暗调网点以涵盖增加的色调范围仍不会增加图像本身捕获的灰级数。当然,CMYK图像用于电子传递(Web页、CD-ROMs、FDF文件)时,这个问题就言过其实了,因为从RGB监控器获得的颜色范围大大地超过三原色的色调范围。色调范围的调整同样的论点亦适用于补偿网点增大(在印刷复制过程中使图像变暗之机械和光学影响的结合)。复制在非涂料纸或白报纸上的图像亮度要加大,而使用涂料纸就要求图像变暗以便达到同样的效果。很遗憾,使图像变亮会压缩色调范围。把加权值加入到扫描或数字图像(使图像变暗),不但可回复原中间调网点值而且可造成细微层次的丢失。


matlab绘制RGB颜色空间

clear;clcv=de2bi(0:7);f=[1 2 4 3;5 6 8 7;1 2 6 5;3 4 8 7;1 3 7 5;2 4 8 6];p=patch('Faces',f,'Vertices',v,'facecolor','interp','FaceVertexCData',v,'edgecolor','none','CDataMapping','direct');view(45,45);axis equal;xlabel('r');ylabel('g');zlabel('b');for k=linspace(0,1) set(p,'vertices',k*v,'facevertexcdata',k*v); drawnow;end


谁有将RGB色彩空间转换为CIELAB色彩空间的代码吗,急需,最好是能在matlab上运行的代码,用C++写的也可以

% 转自 ILOVEMATLAB 的 math
function varargout = colorspace(Conversion,varargin)
%COLORSPACE Convert a color image between color representations.
% B = COLORSPACE(S,A) converts the color representation of image A
% where S is a string specifying the conversion. S tells the
% source and destination color spaces, S = 'dest<-src', or
% alternatively, S = 'src->dest'. Supported color spaces are
%
% 'RGB' R'G'B' Red Green Blue (ITU-R BT.709 gamma-corrected)
% 'YPbPr' Luma (ITU-R BT.601) + Chroma
% 'YCbCr'/'YCC' Luma + Chroma ("digitized" version of Y'PbPr)
% 'YUV' NTSC PAL Y'UV Luma + Chroma
% 'YIQ' NTSC Y'IQ Luma + Chroma
% 'YDbDr' SECAM Y'DbDr Luma + Chroma
% 'JPEGYCbCr' JPEG-Y'CbCr Luma + Chroma
% 'HSV'/'HSB' Hue Saturation Value/Brightness
% 'HSL'/'HLS'/'HSI' Hue Saturation Luminance/Intensity
% 'XYZ' CIE XYZ
% 'Lab' CIE L*a*b* (CIELAB)
% 'Luv' CIE L*u*v* (CIELUV)
% 'Lch' CIE L*ch (CIELCH)
%
% All conversions assume 2 degree observer and D65 illuminant. Color
% space names are case insensitive. When R'G'B' is the source or
% destination, it can be omitted. For example 'yuv<-' is short for
% 'yuv<-rgb'.
%
% MATLAB uses two standard data formats for R'G'B': double data with
% intensities in the range 0 to 1, and uint8 data with integer-valued
% intensities from 0 to 255. As MATLAB's native datatype, double data is
% the natural choice, and the R'G'B' format used by colorspace. However,
% for memory and computational performance, some functions also operate
% with uint8 R'G'B'. Given uint8 R'G'B' color data, colorspace will
% first cast it to double R'G'B' before processing.
%
% If A is an Mx3 array, like a colormap, B will also have size Mx3.
%
% [B1,B2,B3] = COLORSPACE(S,A) specifies separate output channels.
% COLORSPACE(S,A1,A2,A3) specifies separate input channels.
% Pascal Getreuer 2005-2006
%%% Input parsing %%%
if nargin < 2, error('Not enough input arguments.'); end
[SrcSpace,DestSpace] = parse(Conversion);
if nargin == 2
Image = varargin{1};
elseif nargin >= 3
Image = cat(3,varargin{:});
else
error('Invalid number of input arguments.');
end
FlipDims = (size(Image,3) == 1);
if FlipDims, Image = permute(Image,[1,3,2]); end
if ~isa(Image,'double'), Image = double(Image)/255; end
if size(Image,3) ~= 3, error('Invalid input size.'); end
SrcT = gettransform(SrcSpace);
DestT = gettransform(DestSpace);
if ~ischar(SrcT) & ~ischar(DestT)
% Both source and destination transforms are affine, so they
% can be composed into one affine operation
T = [DestT(:,1:3)*SrcT(:,1:3),DestT(:,1:3)*SrcT(:,4)+DestT(:,4)];
Temp = zeros(size(Image));
Temp(:,:,1) = T(1)*Image(:,:,1) + T(4)*Image(:,:,2) + T(7)*Image(:,:,3) + T(10);
Temp(:,:,2) = T(2)*Image(:,:,1) + T(5)*Image(:,:,2) + T(8)*Image(:,:,3) + T(11);
Temp(:,:,3) = T(3)*Image(:,:,1) + T(6)*Image(:,:,2) + T(9)*Image(:,:,3) + T(12);
Image = Temp;
elseif ~ischar(DestT)
Image = rgb(Image,SrcSpace);
Temp = zeros(size(Image));
Temp(:,:,1) = DestT(1)*Image(:,:,1) + DestT(4)*Image(:,:,2) + DestT(7)*Image(:,:,3) + DestT(10);
Temp(:,:,2) = DestT(2)*Image(:,:,1) + DestT(5)*Image(:,:,2) + DestT(8)*Image(:,:,3) + DestT(11);
Temp(:,:,3) = DestT(3)*Image(:,:,1) + DestT(6)*Image(:,:,2) + DestT(9)*Image(:,:,3) + DestT(12);
Image = Temp;
else
Image = feval(DestT,Image,SrcSpace);
end
%%% Output format %%%
if nargout > 1
varargout = {Image(:,:,1),Image(:,:,2),Image(:,:,3)};
else
if FlipDims, Image = permute(Image,[1,3,2]); end
varargout = {Image};
end
return;
function [SrcSpace,DestSpace] = parse(Str)
% Parse conversion argument
if isstr(Str)
Str = lower(strrep(strrep(Str,'-',''),' ',''));
k = find(Str == '>');

if length(k) == 1 % Interpret the form 'src->dest'
SrcSpace = Str(1:k-1);
DestSpace = Str(k+1:end);
else
k = find(Str == '<');

if length(k) == 1 % Interpret the form 'dest<-src'
DestSpace = Str(1:k-1);
SrcSpace = Str(k+1:end);
else
error(['Invalid conversion, ''',Str,'''.']);
end
end

SrcSpace = alias(SrcSpace);
DestSpace = alias(DestSpace);
else
SrcSpace = 1; % No source pre-transform
DestSpace = Conversion;
if any(size(Conversion) ~= 3), error('Transformation matrix must be 3x3.'); end
end
return;
function Space = alias(Space)
Space = strrep(Space,'cie','');
if isempty(Space)
Space = 'rgb';
end
switch Space
case {'ycbcr','ycc'}
Space = 'ycbcr';
case {'hsv','hsb'}
Space = 'hsv';
case {'hsl','hsi','hls'}
Space = 'hsl';
case {'rgb','yuv','yiq','ydbdr','ycbcr','jpegycbcr','xyz','lab','luv','lch'}
return;
end
return;
function T = gettransform(Space)
% Get a colorspace transform: either a matrix describing an affine transform,
% or a string referring to a conversion subroutine
switch Space
case 'ypbpr'
T = [0.299,0.587,0.114,0;-0.1687367,-0.331264,0.5,0;0.5,-0.418688,-0.081312,0];
case 'yuv'
% R'G'B' to NTSC/PAL YUV
% Wikipedia: http://en.wikipedia.org/wiki/YUV
T = [0.299,0.587,0.114,0;-0.147,-0.289,0.436,0;0.615,-0.515,-0.100,0];
case 'ydbdr'
% R'G'B' to SECAM YDbDr
% Wikipedia: http://en.wikipedia.org/wiki/YDbDr
T = [0.299,0.587,0.114,0;-0.450,-0.883,1.333,0;-1.333,1.116,0.217,0];
case 'yiq'
% R'G'B' in [0,1] to NTSC YIQ in [0,1];[-0.595716,0.595716];[-0.522591,0.522591];
% Wikipedia: http://en.wikipedia.org/wiki/YIQ
T = [0.299,0.587,0.114,0;0.595716,-0.274453,-0.321263,0;0.211456,-0.522591,0.311135,0];
case 'ycbcr'
% R'G'B' (range [0,1]) to ITU-R BRT.601 (CCIR 601) Y'CbCr
% Wikipedia: http://en.wikipedia.org/wiki/YCbCr
% Poynton, Equation 3, scaling of R'G'B to Y'PbPr conversion
T = [65.481,128.553,24.966,16;-37.797,-74.203,112.0,128;112.0,-93.786,-18.214,128];
case 'jpegycbcr'
% Wikipedia: http://en.wikipedia.org/wiki/YCbCr
T = [0.299,0.587,0.114,0;-0.168736,-0.331264,0.5,0.5;0.5,-0.418688,-0.081312,0.5]*255;
case {'rgb','xyz','hsv','hsl','lab','luv','lch'}
T = Space;
otherwise
error(['Unknown color space, ''',Space,'''.']);
end
return;
function Image = rgb(Image,SrcSpace)
% Convert to Rec. 709 R'G'B' from 'SrcSpace'
switch SrcSpace
case 'rgb'
return;
case 'hsv'
% Convert HSV to R'G'B'
Image = huetorgb((1 - Image(:,:,2)).*Image(:,:,3),Image(:,:,3),Image(:,:,1));
case 'hsl'
% Convert HSL to R'G'B'
L = Image(:,:,3);
Delta = Image(:,:,2).*min(L,1-L);
Image = huetorgb(L-Delta,L+Delta,Image(:,:,1));
case {'xyz','lab','luv','lch'}
% Convert to CIE XYZ
Image = xyz(Image,SrcSpace);
% Convert XYZ to RGB
T = [3.240479,-1.53715,-0.498535;-0.969256,1.875992,0.041556;0.055648,-0.204043,1.057311];
R = T(1)*Image(:,:,1) + T(4)*Image(:,:,2) + T(7)*Image(:,:,3); % R
G = T(2)*Image(:,:,1) + T(5)*Image(:,:,2) + T(8)*Image(:,:,3); % G
B = T(3)*Image(:,:,1) + T(6)*Image(:,:,2) + T(9)*Image(:,:,3); % B
% Desaturate and rescale to constrain resulting RGB values to [0,1]
AddWhite = -min(min(min(R,G),B),0);
Scale = max(max(max(R,G),B)+AddWhite,1);
R = (R + AddWhite)./Scale;
G = (G + AddWhite)./Scale;
B = (B + AddWhite)./Scale;
% Apply gamma correction to convert RGB to Rec. 709 R'G'B'
Image(:,:,1) = gammacorrection(R); % R'
Image(:,:,2) = gammacorrection(G); % G'
Image(:,:,3) = gammacorrection(B); % B'
otherwise % Conversion is through an affine transform
T = gettransform(SrcSpace);
temp = inv(T(:,1:3));
T = [temp,-temp*T(:,4)];
R = T(1)*Image(:,:,1) + T(4)*Image(:,:,2) + T(7)*Image(:,:,3) + T(10);
G = T(2)*Image(:,:,1) + T(5)*Image(:,:,2) + T(8)*Image(:,:,3) + T(11);
B = T(3)*Image(:,:,1) + T(6)*Image(:,:,2) + T(9)*Image(:,:,3) + T(12);
AddWhite = -min(min(min(R,G),B),0);
Scale = max(max(max(R,G),B)+AddWhite,1);
R = (R + AddWhite)./Scale;
G = (G + AddWhite)./Scale;
B = (B + AddWhite)./Scale;
Image(:,:,1) = R;
Image(:,:,2) = G;
Image(:,:,3) = B;
end
% Clip to [0,1]
Image = min(max(Image,0),1);
return;
function Image = xyz(Image,SrcSpace)
% Convert to CIE XYZ from 'SrcSpace'
WhitePoint = [0.950456,1,1.088754];
switch SrcSpace
case 'xyz'
return;
case 'luv'
% Convert CIE L*uv to XYZ
WhitePointU = (4*WhitePoint(1))./(WhitePoint(1) + 15*WhitePoint(2) + 3*WhitePoint(3));
WhitePointV = (9*WhitePoint(2))./(WhitePoint(1) + 15*WhitePoint(2) + 3*WhitePoint(3));
L = Image(:,:,1);
Y = (L + 16)/116;
Y = invf(Y)*WhitePoint(2);
U = Image(:,:,2)./(13*L + 1e-6*(L==0)) + WhitePointU;
V = Image(:,:,3)./(13*L + 1e-6*(L==0)) + WhitePointV;
Image(:,:,1) = -(9*Y.*U)./((U-4).*V - U.*V); % X
Image(:,:,2) = Y; % Y
Image(:,:,3) = (9*Y - (15*V.*Y) - (V.*Image(:,:,1)))./(3*V); % Z
case {'lab','lch'}
Image = lab(Image,SrcSpace);
% Convert CIE L*ab to XYZ
fY = (Image(:,:,1) + 16)/116;
fX = fY + Image(:,:,2)/500;
fZ = fY - Image(:,:,3)/200;
Image(:,:,1) = WhitePoint(1)*invf(fX); % X
Image(:,:,2) = WhitePoint(2)*invf(fY); % Y
Image(:,:,3) = WhitePoint(3)*invf(fZ); % Z
otherwise % Convert from some gamma-corrected space
% Convert to Rec. 701 R'G'B'
Image = rgb(Image,SrcSpace);
% Undo gamma correction
R = invgammacorrection(Image(:,:,1));
G = invgammacorrection(Image(:,:,2));
B = invgammacorrection(Image(:,:,3));
% Convert RGB to XYZ
T = inv([3.240479,-1.53715,-0.498535;-0.969256,1.875992,0.041556;0.055648,-0.204043,1.057311]);
Image(:,:,1) = T(1)*R + T(4)*G + T(7)*B; % X
Image(:,:,2) = T(2)*R + T(5)*G + T(8)*B; % Y
Image(:,:,3) = T(3)*R + T(6)*G + T(9)*B; % Z
end
return;
function Image = hsv(Image,SrcSpace)
% Convert to HSV
Image = rgb(Image,SrcSpace);
V = max(Image,[],3);
S = (V - min(Image,[],3))./(V + (V == 0));
Image(:,:,1) = rgbtohue(Image);
Image(:,:,2) = S;
Image(:,:,3) = V;
return;
function Image = hsl(Image,SrcSpace)
% Convert to HSL
switch SrcSpace
case 'hsv'
% Convert HSV to HSL
MaxVal = Image(:,:,3);
MinVal = (1 - Image(:,:,2)).*MaxVal;
L = 0.5*(MaxVal + MinVal);
temp = min(L,1-L);
Image(:,:,2) = 0.5*(MaxVal - MinVal)./(temp + (temp == 0));
Image(:,:,3) = L;
otherwise
Image = rgb(Image,SrcSpace); % Convert to Rec. 701 R'G'B'
% Convert R'G'B' to HSL
MinVal = min(Image,[],3);
MaxVal = max(Image,[],3);
L = 0.5*(MaxVal + MinVal);
temp = min(L,1-L);
S = 0.5*(MaxVal - MinVal)./(temp + (temp == 0));
Image(:,:,1) = rgbtohue(Image);
Image(:,:,2) = S;
Image(:,:,3) = L;
end
return;
function Image = lab(Image,SrcSpace)
% Convert to CIE L*a*b* (CIELAB)
WhitePoint = [0.950456,1,1.088754];
switch SrcSpace
case 'lab'
return;
case 'lch'
% Convert CIE L*CH to CIE L*ab
C = Image(:,:,2);
Image(:,:,2) = cos(Image(:,:,3)*pi/180).*C; % a*
Image(:,:,3) = sin(Image(:,:,3)*pi/180).*C; % b*
otherwise
Image = xyz(Image,SrcSpace); % Convert to XYZ
% Convert XYZ to CIE L*a*b*
X = Image(:,:,1)/WhitePoint(1);
Y = Image(:,:,2)/WhitePoint(2);
Z = Image(:,:,3)/WhitePoint(3);
fX = f(X);
fY = f(Y);
fZ = f(Z);
Image(:,:,1) = 116*fY - 16; % L*
Image(:,:,2) = 500*(fX - fY); % a*
Image(:,:,3) = 200*(fY - fZ); % b*
end
return;
function Image = luv(Image,SrcSpace)
% Convert to CIE L*u*v* (CIELUV)
WhitePoint = [0.950456,1,1.088754];
WhitePointU = (4*WhitePoint(1))./(WhitePoint(1) + 15*WhitePoint(2) + 3*WhitePoint(3));
WhitePointV = (9*WhitePoint(2))./(WhitePoint(1) + 15*WhitePoint(2) + 3*WhitePoint(3));
Image = xyz(Image,SrcSpace); % Convert to XYZ
U = (4*Image(:,:,1))./(Image(:,:,1) + 15*Image(:,:,2) + 3*Image(:,:,3));
V = (9*Image(:,:,2))./(Image(:,:,1) + 15*Image(:,:,2) + 3*Image(:,:,3));
Y = Image(:,:,2)/WhitePoint(2);
L = 116*f(Y) - 16;
Image(:,:,1) = L; % L*
Image(:,:,2) = 13*L.*(U - WhitePointU); % u*
Image(:,:,3) = 13*L.*(V - WhitePointV); % v*
return;
function Image = lch(Image,SrcSpace)
% Convert to CIE L*ch
Image = lab(Image,SrcSpace); % Convert to CIE L*ab
H = atan2(Image(:,:,3),Image(:,:,2));
H = H*180/pi + 360*(H < 0);
Image(:,:,2) = sqrt(Image(:,:,2).^2 + Image(:,:,3).^2); % C
Image(:,:,3) = H; % H
return;
function Image = huetorgb(m0,m2,H)
% Convert HSV or HSL hue to RGB
N = size(H);
H = min(max(H(:),0),360)/60;
m0 = m0(:);
m2 = m2(:);
F = H - round(H/2)*2;
M = [m0, m0 + (m2-m0).*abs(F), m2];
Num = length(m0);
j = [2 1 0;1 2 0;0 2 1;0 1 2;1 0 2;2 0 1;2 1 0]*Num;
k = floor(H) + 1;
Image = reshape([M(j(k,1)+(1:Num).'),M(j(k,2)+(1:Num).'),M(j(k,3)+(1:Num).')],[N,3]);
return;
function H = rgbtohue(Image)
% Convert RGB to HSV or HSL hue
[M,i] = sort(Image,3);
i = i(:,:,3);
Delta = M(:,:,3) - M(:,:,1);
Delta = Delta + (Delta == 0);
R = Image(:,:,1);
G = Image(:,:,2);
B = Image(:,:,3);
H = zeros(size(R));
k = (i == 1);
H(k) = (G(k) - B(k))./Delta(k);
k = (i == 2);
H(k) = 2 + (B(k) - R(k))./Delta(k);
k = (i == 3);
H(k) = 4 + (R(k) - G(k))./Delta(k);
H = 60*H + 360*(H < 0);
H(Delta == 0) = nan;
return;
function Rp = gammacorrection(R)
Rp = real(1.099*R.^0.45 - 0.099);
i = (R < 0.018);
Rp(i) = 4.5138*R(i);
return;
function R = invgammacorrection(Rp)
R = real(((Rp + 0.099)/1.099).^(1/0.45));
i = (R < 0.018);
R(i) = Rp(i)/4.5138;
return;
function fY = f(Y)
fY = real(Y.^(1/3));
i = (Y < 0.008856);
fY(i) = Y(i)*(841/108) + (4/29);
return;
function Y = invf(fY)
Y = fY.^3;
i = (Y < 0.008856);
Y(i) = (fY(i) - 4/29)*(108/841);
return;


matlab中CIE XYZ, CIE LAB, CIE LUV, RGB , YUV图像颜色空间相互转换函数,要自带的函数比如rgb2ycbcr

除了你说的 rgb2ycbcr之外还有几个现成的转换函数是ycbcr2rgbrgb2ntscntsc2rgbrgb2grayrgb2hsv没有现成的 和CIE之间的转换函数但是有一个函数B = applycform(A,C)可以将A通过C指定的转换结构转换为B而C由可以由下面函数产生C = makecform(type)只需要输入不同type 就可以生成不同类型的转换结构然后通过applycform实现颜色空间的转换其中type可以选择的转换可预见下表 例如你要将存在变量A中lab格式的图像转换为标准的rgb格式C = makecform(‘lab2srgb');B = applycform(A,C);得到的B就是有A转换过来的标准rgb图像makecform函数还有其他可以设置的参数具体内容还是自己看matlab的帮助文件

国际标准色差误差范围是?

国际标准色差误差范围是是百分之五。扩展资料:颜色,色差,颜色尺度,颜色空间,色宽容度.由不同的测试和解析条件决定的计算色差偏离测量条件几何 光源 观察者 △E方程仪器数平均值△E标准偏差R*A45°/0° D65 1964 CIELAB 54 1.05 0.07 0.2145°/0° D65 1964 CMC(2:1) 54 0.55 0.03 0.09SphereB D65 1964 CIELAB 282 1.00 0.06 0.18SphereB D65 1964 CMC(2:1) 282 0.53 0.03 0.09用仪器测定颜色一致性的方法计算色差色差(Chromatic aberration;chromatic aberration): 色差又称色像差,是透镜成像的一个严重缺陷,色差简单来说就是颜色的差别,发生在以多色光为光源的情况下,单色光不产生色差。可见光的波长范围大约400至700纳米,不同波长的光,颜色各不相同,其通过透镜时的折射率也各不相同,这样物方一个点,在像方则可能形成一个色斑。色差一般有位置色差,放大率色差。位置色差使像在任何位置观察,都带有色斑或晕环,使像模糊不清,而放大率色差使像带有彩色边缘。光学系统最主要的功能就是消色差 。

色差公式CIELAB 和CMC的区别

国际照明委员会(CIE)负责国际颜色标准的研究开发,其中一个非常重要的任务就是建立色差公式,以向用色工业提供物体色判断的标准,比如,用一个色差公式的数值来判断是否合格。自从第一个CIE色度系统研究出来以后,有40多个色差公式已经被研究出来,主要的色差公式有:FCM色差公式、LABHNU色差公式、JPC79色差公式、ATDN色差公式、住友方法、CIELAB色差公式的改良式、BFD色差公式、LCD色差公式、CMC(1:c)色差公式、CIE94色差公式等。CIE最近了CIEDE2000色差公式。具体的公式就不给你列了,网上一搜一大片。


上一篇:everytime歌词

下一篇:dota敌法师