lab 顏色模式的生理緣由 黃色, 洋紅色 刺眼。 綠色,藍色,不刺眼。

hsb 顏色模式理解了。算法

 

lab 顏色模式,都說是生理緣由。沒說是啥生理緣由。函數

猜想:黃色, 洋紅色 刺眼。   綠色,藍色,不刺眼。優化

 

https://blog.csdn.net/self_mind/article/details/50679836spa

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/self_mind/article/details/50679836
RGB顏色空間操作系統

RGB顏色是紅色(Red)、綠色(Green)和藍色(Blue)三基色的字母縮寫。RGB色彩模式是經過三種基本顏色的不一樣程度的迭加來產生各類各樣的不一樣顏色。這個標準可以涵蓋人類視力所能感知的全部顏色,是目前運用普遍的顏色系統之一。.net

RGB(red,green,blue)顏色空間最經常使用的用途就是顯示器系統,彩色陰極射線管,彩色光柵圖形的顯示器 都使用R、G、B數值來驅動R、G、B 電子槍發射電子,並分別激發熒光屏上的R、G、B三種顏色的熒光粉 發出不一樣亮度的光線,並經過相加混合產生各類顏色;掃描儀也是經過吸取原稿經反射或透射而發送來 的光線中的R、G、B成分,並用它來表示原稿的顏色。RGB色彩空間稱爲與設備相關的色彩空間,由於不一樣 的掃描儀掃描同一幅圖像,會獲得不一樣色彩的圖像數據;不一樣型號的顯示器顯示同一幅圖像,也會有不一樣 的色彩顯示結果。顯示器和掃描儀使用的RGB空間與CIE 1931 RGB真實三原色表色系統空間是不一樣的,後者 是與設備無關的顏色空間。btw:Photoshop的色彩選取器(Color Picker)。能夠顯示HSB、RGB、LAB和CMYK 色彩空間的每一種顏色的色彩值。設計

                                                                                          

RBG顏色的表示語法是(Red, Green, Blue), 所以各類顏色的標識值能夠由公式計算得:65536*Blue+256*Green+Red。各個份量的數值越小,亮度越低;數值越大,亮度越高。(0,0,0)爲黑色;(255,255,255)爲白色。blog


RGB的格式有RGB565,RGB555,RGB24和RGB32等等。文檔

Lab 顏色空間圖像處理

    同RGB顏色空間相比,Lab是一種不經常使用的色彩空間。它是在1931年國際照明委員會(CIE)制定的顏色度量國際標準的基礎上創建起來的。1976年,經修改後被正式命名爲CIELab。它是一種設備無關的顏色系統,也是一種基於生理特徵的顏色系統。這也就意味着,它是用數字化的方法來描述人的視覺感應。Lab顏色空間中的L份量用於表示像素的亮度,取值範圍是[0,100],表示從純黑到純白;a表示從紅色到綠色的範圍,取值範圍是[127,-128];b表示從黃色到藍色的範圍,取值範圍是[127,-128]。下圖所示爲Lab顏色空間的圖示;

                          


    須要提醒的是,Lab顏色空間比計算機顯示器、打印機甚至比人類視覺的色域都要大,表示爲 Lab 的位圖比 RGB 或 CMYK 位圖得到一樣的精度要求更多的每像素數據。雖然咱們在生活中使用RGB顏色空間更多一些,但也並不是Lab顏色空間真的一無全部。例如,在 Adobe Photoshop圖像處理軟件中,TIFF格式文件中,PDF文檔中,均可以見到Lab顏色空間的身影。而在計算機視覺中,尤爲是顏色識別相關的算法設計中,rgb,hsv,lab顏色空間混用更是經常使用的方法。

二者的區別:

    RGB的是由紅色通道(R)、綠色通道(G)、藍色通道(B)組成的,最亮的紅色+最亮的綠色+最亮的藍色=白色;最暗的紅色+最暗的綠色+最暗的藍色=黑色;而在最亮和最暗之間,相同明暗度的紅色+相同明暗度的綠色+相同明暗度的藍色=灰色。在RGB的任意一個通道內,白和黑表示這個顏色的明暗度。因此,有白色或者灰白色的地方,R、G、B三個通道都不多是黑色的,由於必需要有R、G、B三個通道來構成這些顏色。
    而LAB不同,LAB中的明度通道(L)專門負責整張圖的明暗度,簡單的說就是整幅圖的黑白版。a通道和b通道只負責顏色的多少。a通道表示從洋紅色(通道里的白色)至深綠色(通道里的黑色)的範圍;b表示從焦黃色(通道里的白色)至嫋藍色(通道里的黑色)的範圍;a、b通道里的50%中性灰色表示沒有顏色,因此越接近灰色說明顏色越少,並且a通道和b通道的顏色沒有亮度。這就說明了爲何在a、b通道中紅色T恤的輪廓是那麼的清晰!由於紅色是洋紅色+焦黃色組成的。
    總的來講:
      一、適合RGB通道摳的圖大部分LAB模式能完成,反之不成立。
      二、任何單一色調背景下,用通道摳有明顯顏色區別的部分,用LAB模式很快能完成
      三、LAB模式下對明度(L)通道作任何操做(如銳化、模糊等)不會影響到色相。

RGB轉LAB色彩空間


1.原理

RGB沒法直接轉換成LAB,須要先轉換成XYZ再轉換成LAB,即:RGB——XYZ——LAB

所以轉換公式分兩部分:

(1)RGB轉XYZ

假設r,g,b爲像素三個通道,取值範圍均爲[0,255],轉換公式以下:

    (1)      

    (2)

    (3)

 

M=

0.4124,0.3576,0.1805

0.2126,0.7152,0.0722

0.0193,0.1192,0.9505

等同於以下公式:

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

上面的gamma函數,是用來對圖象進行非線性色調編輯的,目的是提升圖像對比度。

這個函數不是惟一的,可是我在網上查到的基本都使用上式。

 

(2)XYZ轉LAB

    (5)

 

    (6)

上面兩個公式中,L*,a*,b*是最終的LAB色彩空間三個通道的值。X,Y,Z是

RGB轉XYZ後計算出來的值,Xn,Yn,Zn通常默認是95.047,100.0,108.883。


2.代碼實現

 (1)徹底按照算法無優化實現

<span style="font-size:14px;">inline float gamma(float x){return x>0.04045?pow((x+0.055f)/1.055f,2.4f):x/12.92;}; void RGBToLab(unsigned char*rgbImg,float*labImg){ float R=gamma(rgbImg[2]/255.0f); float X=0.412453*R+0.357580*G+0.180423*B; float Y=0.212671*R+0.715160*G+0.072169*B; float Z=0.019334*R+0.119193*G+0.950227*B; float X/=95.047; float Y/=1000.0; float Z/=108.883; float FX = X > 0.008856f ? pow(X,1.0f/3.0f) : (7.787f * X +0.137931f); float FY = Y > 0.008856f ? pow(Y,1.0f/3.0f) : (7.787f * Y +0.137931f); float FZ = Z > 0.008856f ? pow(Z,1.0f/3.0f) : (7.787f * Z +0.137931f); labImg[0] = Y > 0.008856f ? (116.0f * FY - 16.0f) : (903.3f * Y); labImg[1] = 500.f * (FX - FY);     上面是徹底按照轉換算法作的無優化的實現,裏面涉及了大量的浮點運算,在PC上可能沒什麼問題,可是若是是在Android操做系統的移動端上,即便利用JNI,把轉換算法寫成C++版本進行加速,速度也不理想,由於這個操做時逐像素的,每一個像素作幾十次浮點運算,耗時仍是十分巨大的點擊打開連接————————————————版權聲明:本文爲CSDN博主「self_mind」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/self_mind/article/details/50679836

相關文章
相關標籤/搜索