久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    顏色空間轉換(一)

     最初九月雪 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

    1. //RGB轉換為CMY  
    2. void rtRGB2CMY(RtScalar rgb, RtScalar& cmy)  
    3. {  
    4.     cmy.val[0] = 255 - rgb.val[0];  
    5.     cmy.val[1] = 255 - rgb.val[1];  
    6.     cmy.val[2] = 255 - rgb.val[2];  
    7. }  
    8.   
    9. //CMY轉換為RGB  
    10. void rtCMY2RGB(RtScalar cmy, RtScalar& rgb)  
    11. {  
    12.     rgb.val[0] = 255 - cmy.val[0];  
    13.     rgb.val[1] = 255 - cmy.val[1];  
    14.     rgb.val[2] = 255 - cmy.val[2];  
    15. }  
    16.   
    17. //CMY轉換為CMYK  
    18. void rtCMY2CMYK(RtScalar cmy, RtScalar& cmyk)  
    19. {  
    20.     unsigned char temp = 0;  
    21.       
    22.     temp = min(min(cmy.val[0], cmy.val[1]), cmy.val[2]);  
    23.   
    24.     if (temp == 255 )  
    25.     {   
    26.         cmyk = rtScalar(0, 0, 0, 0);  
    27.     }  
    28.     else   
    29.     {  
    30.         cmyk.val[0] = cmy.val[0] - temp;  
    31.         cmyk.val[1] = cmy.val[1] - temp;  
    32.         cmyk.val[2] = cmy.val[2] - temp;  
    33.     }  
    34.     cmyk.val[3] = temp;  
    35. }  
    36.   
    37. //CMYK轉換為CMY  
    38. void rtCMYK2CMY(RtScalar cmyk, RtScalar& cmy)  
    39. {  
    40.     cmy.val[0] = cmyk.val[0] + cmyk.val[3];  
    41.     cmy.val[1] = cmyk.val[1] + cmyk.val[3];  
    42.     cmy.val[2] = cmyk.val[2] + cmyk.val[3];  
    43. }  
      

    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% (白色) 的百分比來衡量。

    1. //RGB轉換為HSI  
    2. void rtRGB2HSI(RtScalar rgb, RtScalar& hsi)  
    3. {  
    4.     double maxv = 0, minv = 0, angle = 0;  
    5.     RtScalar temp;  
    6.   
    7.     temp.val[0] = rgb.val[0] / 255.0;  
    8.     temp.val[1] = rgb.val[1] / 255.0;  
    9.     temp.val[2] = rgb.val[2] / 255.0;  
    10.   
    11.     maxv = max(max(temp.val[0], temp.val[1]), temp.val[2]);  
    12.     minv = min(min(temp.val[0], temp.val[1]), temp.val[2]);  
    13.   
    14.     hsi.val[2] = (temp.val[0] + temp.val[1] + temp.val[2]) / 3.0;  
    15.     hsi.val[1] = 1.0 - minv/hsi.val[2];  
    16.   
    17.     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]));  
    18.   
    19.     if (temp.val[2] <= temp.val[1])  
    20.         hsi.val[0] = angle / PI * 180.0;  
    21.     else  
    22.         hsi.val[0] = (2 * PI - angle)/PI * 180.0;  
    23. }  
    24.   
    25. //HSI轉換為RGB  
    26. void rtHSI2RGB(RtScalar hsi, RtScalar& rgb)  
    27. {  
    28.     int flag = 0;  
    29.     double t1 = 0, t2 = 0, tv1 = 0, tv2 = 0, tv3 = 0;  
    30.     RtScalar temp;  
    31.     temp = hsi;  
    32.     temp.val[0] = hsi.val[0] * PI / 180.0;  
    33.   
    34.     t1 = 2.0 * PI / 3.0;  
    35.     t2 = 2.0 * t1;  
    36.   
    37.     if (temp.val[0] >= t1 && temp.val[0] < t2)  
    38.     {  
    39.         flag = 1;  
    40.         temp.val[0] -= t1;  
    41.     }  
    42.     if (temp.val[0] >= t2)  
    43.     {  
    44.         flag = 2;  
    45.         temp.val[0] -= t2;  
    46.     }  
    47.   
    48.     tv1 = (temp.val[2] * (1 - temp.val[1])) * 255.0;  
    49.     tv2 = (temp.val[2] * (1 + temp.val[1] * cos(temp.val[0]) / cos(PI / 3 - temp.val[0]))) * 255.0;  
    50.     tv3 = (3.0 * temp.val[2] - tv1 - tv2) * 255.0;  
    51.       
    52.     switch (flag)  
    53.     {  
    54.     case 0:  
    55.         rgb = rtScalar(tv2, tv3, tv1, 0);  
    56.         break;  
    57.     case 1:  
    58.         rgb = rtScalar(tv1, tv2, tv3, 0);  
    59.         break;  
    60.     case 2:  
    61.         rgb = rtScalar(tv3, tv1, tv2, 0);  
    62.         break;  
    63.     }  
    64. }  

    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

    1. // RGB轉換為YUV  
    2. void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)  
    3. {      
    4.     yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y  
    5.     yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u  
    6.     yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v  
    7. }  
    8.   
    9. // YUV轉換為RGB  
    10. void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)  
    11. {  
    12.     rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r  
    13.     rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];   
    14.     rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];   
    15. }  

    (未完待繼續)

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 久久精品娱乐亚洲领先| 国产精品一码二码三码| 国产成人一区二区不卡| 日本一区不卡高清更新二区 | 国产乱人伦AV在线麻豆A| 无码国产精品一区二区免费I6| 国产成人高清精品亚洲| 久久99热只有频精品6狠狠 | 亚洲一卡2卡3卡4卡精品| 波多野结衣在线精品视频| 成人又黄又爽又色的视频| 亚洲AV无码成人精品区| 亚洲色大成网站WWW久久| 国内大量揄拍人妻精品視頻| 免费现黄频在线观看国产| AAA级久久久精品无码片| 99国精品午夜福利视频不卡99| 一本一本久久AA综合精品| 国产成人高清精品亚洲| 精品无人区无码乱码毛片国产 | 国产成人AV国语在线观看| 国产色秀视频在线播放| 天堂久久久久VA久久久久| 欧美激情一区二区三区成人| 粗大的内捧猛烈进出小视频| 亚洲国产成人资源在线| 国产精品久久无码不卡黑寡妇| 亚洲精品色无码AV试看| 国产不卡一区二区在线| 国内精品久久久久影院优| 成年视频人免费网站动漫在线| 国产午夜福利视频在线| 精品人妻伦九区久久AAA片| 无码免费大香伊蕉在人线国产| 久久夜色精品国产嚕嚕亚洲AV| 国产精品国产三级国快看| 国产成人一区二区三区免费| 久久精品国产99久久久古代| 人妻少妇精品久久久久久| 亚洲人成中文字幕在线观看| 老司机午夜精品视频资源|