怎樣用 rgb 三元組理解色相 亮度和飽和度?

時間 2021-05-06 01:07:27

1樓:Californium

一張圖通過幾何的角度展示色彩三要素。

首先我們有一根數軸,範圍是0~255,是R、G、B的取值空間。R、G、B的取值對應紅、綠、藍三個小球的位置。我們用乙個矩形把三個小球包起來,稱為一根「色棒」。

色棒有三種屬性:紅綠藍三個小球的相對位置、色棒在數軸上的位置、色棒的長度,這三種屬性分別對應了色調、亮度、飽和度三要素。

色調對應紅綠藍三個小球在色棒中的相對位置。色棒在數軸上可以移動,可以等比例伸縮,但只要三個小球在色棒中的相對位置不變,那麼色調不變。

而對於亮度和飽和度,Photoshop和Windows畫圖的定義略有不同。

亮度對應色棒右端點在數軸上的位置。當色棒右端點位於0時亮度最小,位於255時亮度最大。

飽和度對應色棒的長度。維持色棒右端點位置(亮度)不變將其等比例伸縮,當色棒長度為0時,飽和度最小,當色棒伸展到最大長度,即左端點觸碰到數軸最左端時,飽和度最大。

亮度對應色棒中點在數軸上的位置。當色棒中點位於0時亮度最小,位於255時亮度最大。注意由於三個小球的位置不能超出數軸兩端,因此當亮度最小或最大時,色棒的長度被擠壓為零。

飽和度對應色棒的長度。維持色棒中點位置(亮度)不變將其等比例伸縮,當色棒長度為零時飽和度最小,當色棒伸展到其所能達到的最大長度時,即左端點或右端點觸碰到數軸端點時,飽和度最大。

這樣我們就把RGB三元組與色彩三要素建立了乙個直觀的幾何聯絡。可以看到Photoshop對亮度和飽和度的定義更加簡單明瞭,色棒右端點決定了亮度,左端點決定了飽和度。

2樓:曾加

知友 @王贇 Maigo 的答案很棒,不過,說明的方式更接近數學語言,理解起來相對較難。

下面我用更加「通俗」的語言來解釋色相亮度飽和度,作為乙個補充。

「畫圖」軟體中的「編輯顏色」介面

通過這個圖,我們就可以直觀上理解色相、亮度、飽和度了,如下圖所示。(需要注意的是,在畫圖中,色相、飽和度和亮度的範圍都是 0~240)

色相、飽和度、亮度

色相,簡而言之,代表了乙個顏色的 RGB 主色。其中,紅色為 0°,綠色為 120°,藍色為 240°。如下圖所示:

色相(色調)

飽和度,簡而言之,代表著一種顏色的「純度」。飽和度越高,其混濁的部分,也就是偏灰色的成分就越少。

亮度,簡而言之,代表的一種顏色與「白色」的距離。亮度越高,顏色越白,反之則越黑。

我們知道,通常來講, RGB 的範圍通常是 0~255,那麼,我們應該怎樣用 RGB 來描繪色相、飽和度和亮度呢?

下面,我們以RGB =(60,120,100)為例,算出這個顏色的色相、飽和度和亮度吧。

RGB=(60,120,100)

(255,0,0)(紅,0°)—> (255,255,0)(黃,60°)—>(0,255,0)(綠,120°)—>

(0,255,255)(青,180°)—>(0,0,255)(藍,240°)—>(255,0,255)(品紅,300°)

可見:0°、120°、240° 對應光的三原色(紅、綠、藍);

60°、180°、300° 對應顏料三原色(黃、青、品紅)。

反映到 RGB 上,我們先找到乙個主色,也就是 RGB 中最大的數值。

對於 RGB =(60,120,100):

數值最大的是 G,也就是綠色,所以色相是在 120° 附近。

由於 R=60,B=100,顏色更偏藍一點,所以色相的範圍在 120°~180° 之間。

易見:120° 對應的是 (60,120,60),180° 對應的是 (60,120,120)

於是容易計算:

* 如果將 160° 從 (0,360°)對映到 (0,240) 的範圍內,那麼色相大約是 107。

相對來說,飽和度的計算會比較複雜,我試圖用更直觀的方式解釋它。

直觀感受:RGB 中最大值和最小值越接近,飽和度越低,反之,飽和度越高。當飽和度為最高(240)時,RGB 總有乙個為 255 或 0,反之亦然。

並且,亮度大於 0.5 時,RGB 中必存在 255,亮度小於 0.5 時,RGB 中必存在 0。

於是,我們可以直觀的感受到:「飽和度」公式中,分子應該是類似 max(R,G,B)-min(R,G,B) 之類的表示式,分母應該包括 max(R,G,B)+min(R,G,B) 以及 M。

由亮度的表示式可知,其為 0.5 時, max(R,G,B)+min(R,G,B) = M,為了讓飽和度表示式分母的函式在亮度為 0.5 處出現拐點,表示式應該包含絕對值函式:

|max(R,G,B)+min(R,G,B) - M|

進一步地,數學直覺告訴我,分母的表示式就是:

M- |max(R,G,B)+min(R,G,B) - M|

於是:對於 RGB=(60,120,100):

* 如果將 0.333 從(0,1)對映到(0,240),其值為 80。

綜上所述,我們從直觀上理解了色相、亮度、和飽和度的含義,並且求得當 RGB =(60,120,100)時,我們算得:

色相為 160°(107/240);

亮度為 0.353(85/240);

飽和度為 0.333(80/240)。

而畫圖的「編輯顏色」告訴我,我的計算結果是正確的。

RGB=(60,120,100)

當我們已知 R、G、B 的值時,我們可以將其對映到色相E、亮度L 和飽和度S。

根據之前的分析,其對映公式如下:

色相 E(範圍 [0°,360°))

1) R≥G≥B 時,E =0°+60°·(G-B)/(R-B)

2) G≥R≥B 時, E =120°-60°·(R-B)/(G-B)

3) G≥B≥R 時, E =120°+60°·(B-R)/(G-R)

4) B≥G≥R 時, E =240°-60°·(G-R)/(B-R)

5) B≥R≥G 時, E =240°+60°·(R-G)/(B-G)

6) R≥B≥G 時, E =360°-60°·(B-G)/(R-G)

亮度 L(範圍 [0,1])

飽和度 S(範圍 [0,1])

3樓:混血王子

6我就跟你說下笨辦法咋弄

裝個PS,把這個東西弄出來

豎著看,有HSB RGB 框裡都能打字對不對就用圖裡面的這個顏色舉例RGB是(70,224,219)這個你懂HSB是什麼意思呢?你就記HSB諧音好傻斃「好」的值就是色相

「傻「的值就是飽和度

「斃」的值就是明度

那(70,224,219)這個色的色相就是178,飽和度69,明度88,不用算,看就行。

那麼問題來了,要把(70,224,219)調高飽和度怎麼調整出來這個視窗,把178,69,88輸進去,然後把「傻」的S滑塊往右拉就是加飽和度,往左拉就是減飽和度。

調合適了你把HSB值輸回到這裡面去

就得到了RGB值。就是你要的

同理,拉「斃」的B滑塊就是調整明度,傻和斃都能拉,你別動「好」就行。

這就是好傻斃的取色辦法,別管為什麼

4樓:王贇 Maigo

HSL 空間是把 RGB 空間經過乙個非線性變換得到的。在乙個空間中改變乙個引數,往往導致另乙個空間中三個引數都改變,體現出「牽一髮而動全身」的效果。

左為 RGB 空間,右為 HSL 空間

由 RGB 引數計算 HSL 引數的公式如下:

感性認識是這樣的:

Hue 叫色相,表示了顏色在色環上的角度。純紅色位於 0 度,純綠色位於 120 度,純藍色位於 240 度。具體計算時,角度主要由 RGB 中最大的那個決定,由次大的那個進行修正。

Lightness 叫亮度,具體計算公式是 RGB 中最大值與最小值的平均值。

Saturation 叫飽和度,表示的是 RGB 三個值的對比有多強烈。其算式中分子 C 是 RGB 中最大值與最小值的差值,但當 L 特別大或特別小的時候,C 的範圍有限,為了把它歸一化到 [0,1],又除了個與亮度有關的分母。

具體到題主的例子:現在有乙個顏色 (0.1, 0.

2, 0.5),這是乙個比較暗的、略偏綠的藍色。所以它的色相會略小於 240 度(具體值是 225 度),亮度 L = (0.

1 + 0.5) / 2 = 0.3,飽和度分子 C = 0.

5 - 0.1 = 0.4,分母為 0.

6,所以飽和度為 0.4 / 0.6 ≈ 0.

67。調整色相:由於亮度、飽和度都只與 RGB 中的最大、最小值相關,所以若要僅調整色相,就要調整綠色 G 的值。增大 G 的值會讓色相更偏向綠色,即減小,G = B 時色相最小,為 180 度;反之,減小 G 則會讓色相增大,G = R 時色相最大,為 240 度。

調整亮度:要調整亮度,主要靠調整值最大和最小的 B 和 R,但要注意保持色相和飽和度不變。當 L < 0.

5 時,飽和度 S 的公式可以簡化為 (M - m) / (M + m)。為了保持飽和度不變,B 和 R 要同比例增減,增時亮度增加,減時亮度降低。為了保持色相不變,G 也要同比例增減。

調整飽和度:同樣,調整飽和度靠的也是 B 和 R。為了保持亮度不變,其中乙個增加多少,另乙個就要減小多少。

增大 B、減小 R 可以讓飽和度增加;減小 B、增大 R 可以讓飽和度降低。為了保持色相不變,也要調整 G 使它與 B、R 的差值之比與原來相同。

上面的各種調整都要注意不能超過 0 <= R <= G <= B <= 1 的範圍。一旦超過,調整方法也會改變。

本答案內容主要參考維基百科頁面 HSL and HSV,也推薦題主閱讀一下。

需要注意的是,含有 H、S 兩個引數的顏色空間有很多,但由於第三個引數的不同,S 的定義也會有不同。

5樓:宋順寧.Seany

但是你這個問題我倒是可以幫到你。

(該回答只針對程式設計師了解顏色,至於ps中的色相和亮度演算法有時候是乙個更複雜的特殊演算法)

PHOTOSHOP中的色彩理論-UI中國-專業使用者體驗設計平台

在photoshop中,8位通道色模型下,R、G、B三個通道分別是0-255,一共是256個檔位。

而這個模型你把它理解為是RGB三個燈泡,每個燈泡從滅到最亮只有10檔。

假如有乙個顏色是(0.1, 0.2, 0.5),你可以理解為是紅色開了最暗的1檔,綠色開了2檔,藍色開了5檔。

如果要只增加「亮度」,可以三個值全部乘除乙個係數,比如變成(0.2、0.4、1)

如果要只增加或減少「飽和度」,「飽和度」最高意味著該顏色擁有該色相下最純的色光。這句話是啥意思?也就是「增加飽和」 = 「減掉摻灰"。

在(0.1、0.2、0.5)這個顏色下,你可以理解為他是由兩個顏色合成的,

其中乙個顏色是乙個灰色(0.1、0.1、0.1)和乙個純飽和色(0、0.1、0.4)

這時候所謂的」增加飽和度「操作,在演算法上只需要把三個值減掉最小的那個就行了。

總結一下:

a、增加飽和度

乙個顏色(0.1、0.2、0.5)增加飽和度到最飽和不摻灰狀態,

演算法是減去該顏色中的那個灰色,在這個顏色中灰色是(Rmin、Gmin、Bmin)

表現在(0.1、0.2、0.5)中,灰色是(0.1、0.1、0.1)

所以最後得到的純飽和色是(0、0.1、0.4)

b、降低飽和度

乙個顏色(0.1、0.2、0.5)降低飽和到最不飽和狀態,

演算法是取RGB中最高位通道色,將其他三個通道都替換成它,就變成了最灰的那個灰色。

在(0.1、0.2、0.5)中,降低到最不飽和,其顏色是(0.5、0.5、0.5)的灰色

我已經說成這樣了你應該明白了吧?

三元鋰電池安全嗎?

皆電 你好,其實並不是三元鋰電池一定就不安全。只是之前盲目追求能量密度,大上特上高鎳電池,例如NCM811電池,在結構不變的情況下就能夠獲得更高的能量密度,但是高鎳帶來的負面反應就是過於活潑,我們之前看到事件當中的確是高鎳電池問題會更多一些,但是這不能夠代表三元鋰電池就不安全。通過更科學的配比電芯的...

怎樣用Universe Sandbox模擬三體運動?

我是在The Figure 8三體模型中加入的行星,隨機加入的,最後的結局都是飛出去了。所以我覺得三體人完全不必擔心被吞噬,應該小心飛出三體系。 螢火一號 我還真在裡邊模擬過三體運動 發現幾個問題 1,天體距離不能太近 2,初速度不能太小 3,質量相差不能太懸殊 新手容易犯的乙個錯誤,就是把天體擺得...

怎樣用結他寫歌?

之乎者也小磚頭 現在都說什麼不要套什麼和弦套子,但是剛剛開始寫歌,用這個模式或許也是不錯的選擇。首先定下調子 拍數,跟著和弦套子邊彈邊哼哼,應該就會有不錯的靈感,然後就是記下自己的旋律,填詞 加一些合適的節奏之類的。當然剛才說的都只是按圖索驥,找創作的感覺。當你有乙個覺得很上口的旋律的時候,把它在結...