『壹』 什麼是L*a*b顏色空間
可以用數字計算的方法實現由RGB信號到CIE LAB空間的轉換,在這個轉換過程中可以自動彌補由於濾色片和其它光學器件引起的誤差,因此對這些器件的要求可以相應降低。
Lab色彩空間是由國際照明委員會(CIE)於1976年制定的,圖4和圖5分別為Lab色彩空間的三維立體空間模型圖和平面圖。它是用L*、a*、b*三個互相垂直的坐標軸來表示一個色彩空間,L*軸表示明度,黑在底端,白在頂端。+a*表示品紅色,-a*表示綠色,+b*表示黃色,-b*表示藍色,a*軸是紅一綠色軸,b*軸是黃一藍色軸Lab與LCH對顏色的描述在數值上的對應關系將在第三部分詳細介紹。任何顏色的色相和特徵都可以用a*、b*數值來表示,用L*、a*、b*三個數值可以描述自然界中的任何色彩。Lab有三個通道,製作一個Lab模式的圖像,從中可以發現,a和b通道幾乎不能辨別出來,它們僅僅定義了圖像的色彩部分,而沒有定義圖像的形態細節,因此在Lab模式的圖像中顏色和層次是分離的,這一點與RGB和CMYK是不一樣的,這使得灰色曲線和彩色曲線可以分開調整,當使用者調整灰色曲線時,彩色的部分不受影響,因此可以只用沒有顏色信息的L*通道確定圖像的最亮和最暗值。這樣既可以避免在色彩校正過程中產生一些跳躍性的、階調不連續的顏色,也可以只在L通道上銳化圖像來強調圖像的整體細微層次。L*值的范圍為100(白)至0(黑),這樣的最大范圍在印刷品上並不能體現出來,對於優質銅版紙,L*值的范圍不超過95(白)和5(黑)。a*和b*的變化范圍從—100到100。任一顏色可以用空間中對應點的L*、a*、b*確定。
在CIEl976L朋均勻顏色空間中可以方便地對顏色進行各種操作。如把a*的數值變成-a*,把b*的數值變成-b*就是進行了相反色的操作,改變後的顏色為原來顏色的相反色,如果僅輸出L*通道,則可以用彩色原稿復制單色。
由於Lab色彩空間最大,它包含了RGB和CMYK色彩空間,所以當色彩數據從這樣一個大的色彩空間轉換到比它小得多的CMYK色彩空間時,不會因為數據量不夠而引起色彩的偏差,造成色彩損失。
『貳』 rgb轉換為cmyk顏色空間的舉例
rgb轉換為cmyk顏色空間的舉例:
RGB個CMYK是兩個不同的顏色系統,常用與描述設備的屬性,RGB一般為輸入設備、顯示設備的設備值,CMYK則為輸出設備(列印機、印刷機)值。
我們工作中,經常會用到RGB-CMYK的轉換,如將RGB的圖片轉換成CMYK,這在列印/印刷中為「分色」,我們不可能人為去進行這樣的分色操作。
SO及顏色相關體系中,也沒有針對RGB-CMYK之間的轉換有一個固定的關系和公式,其實很好理解。
比如RGB(125,125,125)的一個灰色,發送至EPSON列印機上解析後CMYK(50,40,40,0),發送至CANON列印機上解析後的CMYK為(40,30,30,15),更何況列印所使用的軟體可能不同,所以無法固定的將RGB轉換成CMYK。
『叄』 c++為什麼需要rgb顏色空間轉化為ycrcb顏色空間
顯示器是通過紅綠藍三種顏色的發光點混合產生顏色的,所以用RGB顏色空間。
但人的視覺實際上是對亮度比色彩要敏感的,轉換成YCrCb色彩空間後,可以對於Y分量(亮度)和CrCb(色彩)分開處理,比如視頻壓縮演算法會降低CrCb部分的解析度來節約空間。
所以不同的色彩空間都有其特定的用途,不同用途之間故而需要轉化。
『肆』 顏色的空間變換是指
看到好文章,想保存怎麼辦!下載APP
顏色空間轉換(一)
最初九月雪
2014-12-10分享收藏
顏色空間轉換
不同彩色空間之間的轉換。
1,CMY/CMYK顏色空間
青、品紅、黃(CMY)(Cyan、Magenta、Yellow)彩色模型是彩色圖象印刷行業使用的彩色空間,在彩色立方體中它們是紅、綠、藍的補色,稱為減色基,而紅、綠、藍稱為加色基。在CMY模型中,顏色是從白光中減去一定成分得到的。CMY坐標可以從RGB模型中得到:
C = 1 – R
M = 1 – G
Y = 1 – B
由於在印刷時CMY模型不可能產生真正的黑色,因此在印刷業中實際上使用的是CMYK彩色模型,K為第四種顏色,表示黑色(black ink):從CMY 到CMYK的轉換:
K := min(C,M,Y)
C := C – K
M := M – K
Y := Y - K
[cpp] view plain
//RGB轉換為CMY
void rtRGB2CMY(RtScalar rgb, RtScalar& cmy)
{
cmy.val[0] = 255 - rgb.val[0];
cmy.val[1] = 255 - rgb.val[1];
cmy.val[2] = 255 - rgb.val[2];
}
//CMY轉換為RGB
void rtCMY2RGB(RtScalar cmy, RtScalar& rgb)
{
rgb.val[0] = 255 - cmy.val[0];
rgb.val[1] = 255 - cmy.val[1];
rgb.val[2] = 255 - cmy.val[2];
}
//CMY轉換為CMYK
void rtCMY2CMYK(RtScalar cmy, RtScalar& cmyk)
{
unsigned char temp = 0;
temp = min(min(cmy.val[0], cmy.val[1]), cmy.val[2]);
if (temp == 255 )
{
cmyk = rtScalar(0, 0, 0, 0);
}
else
{
cmyk.val[0] = cmy.val[0] - temp;
cmyk.val[1] = cmy.val[1] - temp;
cmyk.val[2] = cmy.val[2] - temp;
}
cmyk.val[3] = temp;
}
//CMYK轉換為CMY
void rtCMYK2CMY(RtScalar cmyk, RtScalar& cmy)
{
cmy.val[0] = cmyk.val[0] + cmyk.val[3];
cmy.val[1] = cmyk.val[1] + cmyk.val[3];
cmy.val[2] = cmyk.val[2] + cmyk.val[3];
}
2,HSI顏色空間
HSI色彩空間是從人的視覺系統出發,用色調(Hue)、色飽和度(Saturation或Chroma)和亮度 (Intensity或Brightness)來描述色彩。HSI色彩空間可以用一個圓錐空間模型來描述。用這種 描述HIS色彩空間的圓錐模型相當復雜,但確能把色調、亮度和色飽和度的變化情形表現得很清楚。 通常把色調和飽和度通稱為色度,用來表示顏色的類別與深淺程度。由於人的視覺對亮度的敏感 程度遠強於對顏色濃淡的敏感程度,為了便於色彩處理和識別,人的視覺系統經常採用HSI色彩空間, 它比RGB色彩空間更符合人的視覺特性。在圖像處理和計算機視覺中大量演算法都可在HSI色彩空間中 方便地使用,它們可以分開處理而且是相互獨立的。因此,在HSI色彩空間可以大大簡化圖像分析 和處理的工作量。HSI色彩空間和RGB色彩空間只是同一物理量的不同表示法,因而它們之間存在著 轉換關系。
HSI 色彩模型是從人的視覺系統出發,用 H 代表色相 (Hue)、S 代表飽和度 (Saturation) 和 I 代表亮度 (Intensity) 來描述色彩。飽和度與顏色的白光光量剛好成反比,它可以說是一個顏色鮮明與否的指標。因此如果我們在顯示器上使用 HIS 模型來處理圖像,將能得到較為逼真的效果。
色相 (Hue):指物體傳導或反射的波長。更常見的是以顏色如紅色,橘色或綠色來辨識,取 0 到 360 度的數值來衡量。
飽和度 (Saturation):又稱色度,是指色彩的強度或純度。飽和度代表灰色與色調的比例,並以 0% (灰色) 到 100% (完全飽和) 來衡量。
亮度 (Intensity):是指顏色的相對明暗度,通常以 0% (黑色) 到 100% (白色) 的百分比來衡量。
[cpp] view plain
//RGB轉換為HSI
void rtRGB2HSI(RtScalar rgb, RtScalar& hsi)
{
double maxv = 0, minv = 0, angle = 0;
RtScalar temp;
temp.val[0] = rgb.val[0] / 255.0;
temp.val[1] = rgb.val[1] / 255.0;
temp.val[2] = rgb.val[2] / 255.0;
maxv = max(max(temp.val[0], temp.val[1]), temp.val[2]);
minv = min(min(temp.val[0], temp.val[1]), temp.val[2]);
hsi.val[2] = (temp.val[0] + temp.val[1] + temp.val[2]) / 3.0;
hsi.val[1] = 1.0 - minv/hsi.val[2];
angle = (temp.val[0] + temp.val[0] - temp.val[1] - temp.val[2]) / 2.0 * sqrt((temp.val[0] - temp.val[1])*(temp.val[0] - temp.val[1]) + (temp.val[0] - temp.val[2])*(temp.val[1] - temp.val[2]));
if (temp.val[2] <= temp.val[1])
hsi.val[0] = angle / PI * 180.0;
else
hsi.val[0] = (2 * PI - angle)/PI * 180.0;
}
//HSI轉換為RGB
void rtHSI2RGB(RtScalar hsi, RtScalar& rgb)
{
int flag = 0;
double t1 = 0, t2 = 0, tv1 = 0, tv2 = 0, tv3 = 0;
RtScalar temp;
temp = hsi;
temp.val[0] = hsi.val[0] * PI / 180.0;
t1 = 2.0 * PI / 3.0;
t2 = 2.0 * t1;
if (temp.val[0] >= t1 && temp.val[0] < t2)
{
flag = 1;
temp.val[0] -= t1;
}
if (temp.val[0] >= t2)
{
flag = 2;
temp.val[0] -= t2;
}
tv1 = (temp.val[2] * (1 - temp.val[1])) * 255.0;
tv2 = (temp.val[2] * (1 + temp.val[1] * cos(temp.val[0]) / cos(PI / 3 - temp.val[0]))) * 255.0;
tv3 = (3.0 * temp.val[2] - tv1 - tv2) * 255.0;
switch (flag)
{
case 0:
rgb = rtScalar(tv2, tv3, tv1, 0);
break;
case 1:
rgb = rtScalar(tv1, tv2, tv3, 0);
break;
case 2:
rgb = rtScalar(tv3, tv1, tv2, 0);
break;
}
}
3,YUV顏色空間
在現代彩色電視系統中,通常採用三管彩色攝像機或彩色CCD(點耦合器件)攝像機,它把攝得的彩色圖像 信號,經分色、分別放大校正得到RGB,再經過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y、B-Y, 最後發送端將亮度和色差三個信號分別進行編碼,用同一信道發送出去。這就是我們常用的YUV色彩空間。 採用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量, 那麼這樣表示的圖就是黑白灰度圖。彩色電視採用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機 的兼容問題,使黑白電視機也能接收彩色信號。根據美國國家電視制式委員會,NTSC制式的標准,當白光的 亮度用Y來表示時,它和紅、綠、藍三色光的關系可用如下式的方程描述:Y=0.3R+0.59G+0.11B 這就是常用 的亮度公式。色差U、V是由B-Y、R-Y按不同比例壓縮而成的。如果要由YUV空間轉化成RGB空間,只要進行 相反的逆運算即可。與YUV色彩空間類似的還有Lab色彩空間,它也是用亮度和色差來描述色彩分量,其中L為 亮度、a和b分別為各色差分量。
YUV與RGB相互轉換的公式如下(RGB取值范圍均為0-255):
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
[cpp] view plain
// RGB轉換為YUV
void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)
{
yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y
yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u
yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v
}
// YUV轉換為RGB
void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)
{
rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r
rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];
rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];
}
『伍』 顏色空間RGB與 色調、飽和度、亮度(ESL)轉換的完整C語言演算法
你把0-240 按比例 縮放 一下 到 HSL 的 范圍,用 HSL-RGB 轉換。
HSL--H是色相(0到360度),S是飽和度(0到1),L是亮度(0到1)
規1化的 HSL到RGB顏色值算換子程序:
// nomorized h,s,L 0-1.0
void HSL2RGB(double h, double s, double L,unsigned char *rr, unsigned char *gg,
unsigned char *bb)
{
double v,m,sv, vs0, c1, c2,xiaoshu,r,g,b;
int ih;
r = L; g = L;b = L;
if (L <= 0.5) v = L * (1.0 + s); else v = L + s - L * s;
if (v > 0) {
m = L + L - v; sv = (v - m ) / v;
h = h * 6.0; ih = (int)h;
xiaoshu = h - ih;
vs0 = v * sv * xiaoshu; c1 = m + vs0; c2 = v - vs0;
switch (ih) {
case 0: r = v; g = c1; b = m; break;
case 1: r = c2; g = v; b = m; break;
case 2: r = m; g = v; b = c1; break;
case 3: r = m; g = c2; b = v; break;
case 4: r = c1; g = m; b = v; break;
case 5: r = v; g = m; b = c2; break;
default: break;
}
}
*rr = (int) (r * 0xff); *gg = (int) (g * 0xff); *bb = (int) (b * 0xff);
}
把你3個數值,各除以240,代入子程序即可。
詳見:http://hi..com/svjvcfwticdkmse/item/e6c43a21e385b10977272c0e
彩虹光譜RGB值自動生成程序 (L_o_o_n_i_e == 金色潛鳥)
『陸』 matlab中CIE XYZ, CIE LAB, CIE LUV, RGB , YUV圖像顏色空間相互轉換函數,要自帶的函數比如rgb2ycbcr
除了你說的rgb2ycbcr之外還有幾個現成的轉換函數是
ycbcr2rgb
rgb2ntsc
ntsc2rgb
rgb2gray
rgb2hsv
沒有現成的 和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的幫助文件
『柒』 怎樣用C語言實現圖片的RGB顏色空間向Lab顏色空間的轉化
應該是HTML中的JAVASCRIPT代碼,也可能是其他的用處很多,有時JAVASCRIPT中濾鏡還要用!
顏色代碼有以下幾種表示方法:
HSB色系:利用的是人的視覺而產生的不同影響,用色值H,飽和度S,亮度B表示.
Lab色系,這是一種將自然界中所有顏色的轉化,有些人眼是無法分辨的,這是各色系中色域最廣的一個!用的時候不多.
RGB色系:這個是利用廣告學中的三原色原理,純色系,它認為各種顏色都是由R紅G綠和B藍來以不同比例混合(相加)而成.正如上文中的一個,使用24真彩色時每個最大值是255,最小是0,最後的一個數字,可能是濾鏡要用到的濾色什麼的,不見全部的東西是不知道的!同時還有另一種表示方法:6位16進制值:如FFFFFF一般前還要加個#號,前兩位是紅中間兩位是綠最後兩位是藍.可以與數字相互轉化.最常用的.
CMYK色系:由於廣告中的印刷而產生的一種色系,也是混合,但是是減法色系.三原色是品紅M,黃Y,青C,因為三色最終混合不能得到黑色,所以加入一個K黑色.這個用於印刷設計.色域沒有RGB大.同時還是兩個RGB三原色的混合(理論上),其中三原色都不復色,所以是減色系.表示方式是以%值表示,最大是100%.
WEB色系:是RGB的一個子色系(色域),當然色域最小.用以網頁等設計,只能表示256種顏色,表示方法與RGB同.但是是按比例縮小色域,如RGB(0,0,0)就是WEB色能表示的,RGB(3,0,0)也是能表示的;但RGB(2,0,0)在WEB中就是RGB(3,0,0);換句話來說,不是RGB色系的一部分.
這沒有專門的網站的,要多看一下書,一般平設開始會介紹一部分的相關知識的.
『捌』 圖像色度空間變換原理
將RGB空間轉換成HIS空間,亮度(I)表示顏色的明亮程度,它取決於地物輻射的強度;色調(H)是某一波長的光線引起人們視覺的反映,取決於光線的光譜組成和地物反射輻射的主波長;飽和度(S)是顏色的純度,取決於地物反射輻射的光譜選擇程度。RGB系統三分量是相關的,牽其一而動其全局,而HIS系統三分量相互獨立,可以在不改變兩個分量的前提下,而改變第三個分量的取值范圍或任意的用其他因子來取而代之。由於所採用的坐標系統不同,色度空間變換有不同的模型,常用的主要有:
同一坐標系統:
1∶25萬遙感地質填圖方法和技術
『玖』 HSL與RGB顏色系統如何相互轉換
HSL與RGB轉換
a) RGB→HSL的演算法描述。
步驟1:把RGB值轉成【0,1】中數值。
步驟2:找出R,G和B中的最大值。
步驟3:設L=(maxcolor + mincolor)/2
步驟4:如果最大和最小的顏色值相同,即表示灰色,那麼S定義為0,而H未定義並在程序中通常寫成0。
步驟5:否則,測試L:
If L<0.5, S=(maxcolor-mincolor)/(maxcolor + mincolor)
If L>=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)
步驟6: If R=maxcolor, H=(G-B)/(maxcolor-mincolor)
If G=maxcolor, H=2.0+(B-R)/(maxcolor-mincolor)
If B=maxcolor, H=4.0+(R-G)/(maxcolor-mincolor)
步驟7:從第6步的計算看,H分成0~6區域。RGB顏色空間是一個立方體而HSL顏色空間是兩個六角形錐體,其中的L是RGB立方體的主對角線。因此,RGB立方體的頂點:紅、黃、綠、青、藍和品紅就成為HSL六角形的頂點,而數值0~6就告訴我們H在哪個部分。H=H*60.0,如果H為負值,則加360。