色彩三要素
其中明度和純度感官差異上有些區分不開,可以藉助如下定義
- 純度:顏色中灰色含量的多少
- 亮度:顏色中黑白佔比的多少
因爲明亮和飽和的顏色都會對眼睛有明顯的刺激,反正我是分不太清。
RGB
光學三原色:紅綠藍
顏料三原色:紅黃藍
雖然我們最常聽說的就是RGB
,但我得強調一點,這只是最物理的表達方式,而非人最容易接受的方式。
在電視或液晶顯示上面,通常使用這種辦法,由於最物理,開發也最適合。
不過這種混雜生色,除了基色,加上黑白灰,其他顏色並不好掌握,至少對我來說是的。
RGB
空間中,每個座標的本身代表一種基色,值的大小代表的是明度。
所以原點是無明的黑,最遠點是無暗的白。
可以發現一個關鍵點:RGB
空間是沒有純度的度量的
同樣,對於組合色:RGB
空間沒有色相的度量
其他的顏色就是空間中的座標點,三原色依據不同亮度進行的組合,總量共有
total=256×256×256=1677216=224
RGB
空間當中,比較詬病的是
- 沒有準確的色相的表述
- 沒有準確的明度的表述
- 色相和明度的混雜組合
對於照片,我只想單獨做色相或者純度,抑或是明度的修改,我得同時對三個通道進行修改。
不可能對單一屬性做直接的修改。
正是易實現,難表達,難修改
YUV
看過黑白電視或者素描的都知道,我們就算變成熊貓,就算只有黑白,其實問題也不大。
也就是說,對於色彩表示,明暗的表現力更甚顏色。限於技術,也是需求決定,明暗始終先行。
YUV
的出現,也是基於現實因素。
當時正處於彩色電視發展的階段,如何去兼容黑白電視和彩色電視成了問題。
採用RGB
進行傳輸的話,實現上確實簡單,但是存在兩個痛點
- 必須同時傳輸三組分量,帶寬佔用消耗大
- 黑白電視並不直接支持
如果讓人升級網絡,還要買彩電,受衆就只有土豪了吧。
但是如果維護兩種信號線路,不僅成本增加,對於單一產品,還得兩種編碼,更繁瑣了。
基於此,需要一種新的技術來做整合
- 能夠單獨控制明暗
- 而且能夠填充色彩
- 最好可以分開傳輸
YUV
正是這樣的技術,它着重於明度的控制,可以後續填充顏色,而且兩種信號並非綁定。
降低了帶寬消耗,對於黑白電視,只需要Y
明度變化就可以做到兼容。
現在來說,明度控制依舊是它的優勢,不過缺點仍然存在
YUV
中,除了Y
是獨立的亮度,UV
兩個一般都是聯合使用的,仍然存在一定的交雜,色彩的控制並不單一。
RGB⇒YUV齊次矩陣:⎣⎡YUV⎦⎤YUV=>RGB齊次矩陣:⎣⎡RGB⎦⎤:⎩⎨⎧Y=U=V=0.299R+0.587G+0.144B−0.147R−0.289G+0.436B0.615R−0.515G−0.100B=⎣⎡0.299−0.1470.6150.587−0.2890.5150.1440.436−0.100⎦⎤⎣⎡RGB⎦⎤:⎩⎨⎧R=G=B=YYY+−+00.39U2.03U+−+1.14V0.58V0=⎣⎡1110−0.392.031.14−0.580⎦⎤⎣⎡YUV⎦⎤
如果指向調節明暗度,轉換成YUV
是最好的選擇。
HSV
field |
words |
name |
H |
Hue |
色相 |
S |
Saturation |
飽和度 |
V |
Value |
明度 |
所以說,這是最貼近人感官體驗的顏色表示方法。
當想改變圖像變化的時候,這是最能夠按照人的習慣進行調整的色彩度量模式。
它的色彩空間是這樣的
上色以後
其中三個分量的單位分別是
attribute |
name |
description |
H |
色度 |
角度表示,h∈[0,360] |
S |
飽和度 |
百分比表示,s∈[0,100](%) |
V |
亮度 |
v∈[0,max],最大值取決於計算機存儲 |
RGB⇒HSV
conditionhsv={max=max(R,G,B)min=min(R,G,B)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧0∘60∘×max−ming−b+0∘60∘×max−ming−b+360∘60∘×max−minb−r+120∘60∘×max−minr−g+240∘ifififififmax=max=max=max=max=minr&g≥br&g<bgb={0maxmax−min=1−maxminifmaxotherwise=0=max
HSV⇒RGB
hifpqt(R,G,B)≡⌊60h⌋(mod6)=60h−hi=v×(1−s)=v×(1−f×s)=v times(1−(1−f)×s)=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧(v,t,p)(q,v,p)(p,v,t)(p,q,v)(t,p,v)(v,p,q)ififififififhi=0hi=1hi=2hi=3hi=4hi=5