當前位置:吉日网官网 - 紀念幣收藏 - 色彩的空間變換是指

色彩的空間變換是指

看到好文章想保存!下載應用程序

色彩空間轉換(1)

雪中的原九

2014-12-10分享收藏

色彩空間轉換

不同色彩空間之間的轉換。

1,CMY/CMYK色彩空間

青色、品紅色和黃色(CMY)顏色模型是在彩色圖像印刷工業中使用的顏色空間。在色方中,它們是紅、綠、藍的互補色,稱為減色基,而紅、綠、藍稱為加色基。在CMY模型中,顏色是通過從白光中減去某些成分而獲得的。CMY坐標可以從RGB模型中獲得:

c = 1–R

m = 1–G

y = 1–B

因為CMY模型在印刷時不可能產生真正的黑色,所以印刷行業實際使用的是CMYK顏色模型,K是第四種顏色,表示黑色油墨:CMY到CMYK的轉換:

K := min(C,M,Y)

C:= C–K

M:= M–K

Y := Y - K

【cpp】查看plaincopy?

//將//RGB轉換為CMY

void rt RGB 2 cmy(RTS scalar RGB,RtScalar & ampcmy)

{

cmy . val[0]= 255-RGB . val[0];

cmy . val[1]= 255-RGB . val[1];

cmy . val[2]= 255-RGB . val[2];

}

//將//CMY轉換為RGB

void RTC my 2 RGB(RTS scalar cmy,RtScalar & amprgb)

{

RGB . val[0]= 255-cmy . val[0];

RGB . val[1]= 255-cmy . val[1];

RGB . val[2]= 255-cmy . val[2];

}

//轉換//CMY到CMYK

void RTC m2 cmyk(RTS scalar cmy,RtScalar & ampcmyk)

{

無符號字符溫度= 0;

temp = min(min(cmy.val[0],cmy.val[1]),cmy . val[2]);

如果(溫度== 255)

{

cmyk = rtScalar(0,0,0,0);

}

其他

{

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 rtcmyk 2 cmy(RTS scalar cmyk,RtScalar & ampcmy)

{

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顏色空間基於人類視覺系統,用色調、飽和度或色度、亮度來描述顏色。HSI顏色空間可以用圓錐空間模型來描述。用這個圓錐模型來描述他的色彩空間是相當復雜的,但是卻可以清晰的表現出色調、亮度、色彩飽和度的變化。色調和飽和度壹般稱為色度,用來表示顏色的類別和深淺。由於人類視覺對亮度的敏感程度遠高於對顏色深淺的敏感程度,為了便於顏色處理和識別,人類視覺系統往往采用HSI顏色空間,這種顏色空間比RGB顏色空間更符合人類視覺特性。在圖像處理和計算機視覺中,大量的算法可以方便地用在HSI顏色空間中,它們可以分開獨立處理。因此,在HSI顏色空間中可以大大簡化圖像分析和處理的工作量。HSI顏色空間和RGB顏色空間只是同壹物理量的不同表示,所以兩者之間存在轉換關系。

HSI顏色模型基於人類視覺系統,用H表示色調,S表示飽和度,I表示強度來描述顏色。飽和度與壹種顏色的白光量成反比,可以說是壹種顏色是否明亮的指標。因此,如果我們使用他的模型來處理顯示器上的圖像,我們將獲得更真實的結果。

色相:指物體透射或反射的波長。更常見的是通過顏色來識別,如紅色、橙色或綠色,並通過0至360度的值來測量。

飽和度:也叫色度,是指顏色的強度或純度。飽和度表示灰色與色調的比率,從0%(灰色)到100%(完全飽和)測量。

強度:指顏色的相對明度和暗度,通常用0%(黑色)到100%(白色)之間的百分比來衡量。

【cpp】查看plaincopy?

//轉換//RGB到HSI

void rt RGB 2 HSI(RTS scalar RGB,RtScalar & amphsi)

{

double maxv = 0,米女= 0,角度= 0;

RtScalar溫度;

temp . val[0]= RGB . val[0]/255.0;

temp . val[1]= RGB . val[1]/255.0;

臨時值[2]= RGB . val[2]/255.0;

maxv = max(max(temp.val[0],temp . val[1]);

米女= min(min(臨時值[0],臨時值[1]);

hsi.val[2] =(臨時值[0] +臨時值[1] +臨時值[2])/3.0;

hsi.val[1] = 1.0 -米女/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]& lt;=臨時值[1])

HSI . val[0]= angle/PI * 180.0;

其他

HSI . val[0]=(2 * PI-angle)/PI * 180.0;

}

//HSI轉換為RGB

void rth si 2r GB(RTS scalar HSI,RtScalar & amprgb)

{

int flag = 0;

double t1 = 0,t2 = 0,tv1 = 0,tv2 = 0,tv3 = 0;

RtScalar溫度;

temp = hsi

temp . val[0]= HSI . val[0]* PI/180.0;

t 1 = 2.0 * PI/3.0;

T2 = 2.0 * t 1;

if(temp . val[0]& gt;= t 1 & amp;& amptemp . val[0]& lt;t2)

{

flag = 1;

temp . val[0]-= t 1;

}

if(temp . val[0]& gt;= t2)

{

flag = 2;

temp . val[0]-= T2;

}

TV 1 =(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]-TV 1-tv2)* 255.0;

開關(標誌)

{

案例0:

rgb = rtScalar(tv2,tv3,tv1,0);

打破;

案例1:

rgb = rtScalar(tv1,tv2,tv3,0);

打破;

案例二:

rgb = rtScalar(tv3,tv1,tv2,0);

打破;

}

}

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.299 r+0.587g+0.114B

U = -0.147R - 0.289G + 0.436B

v = 0.615R-0.515G-0.100 b

R = Y + 1.14V

G = Y - 0.39U - 0.58V

B = Y + 2.03U

【cpp】查看plaincopy?

//將RGB轉換為YUV

void rt RGB 2 YUV(RTS scalar RGB,RtScalar & ampyuv)

{

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 rtyu v2 RGB(RTS scalar YUV,RtScalar & amprgb)

{

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];

}

  • 上一篇:鎧甲勇士排名榜
  • 下一篇:中國五大名山及傳說故事是什麽?
  • copyright 2024吉日网官网