常用色彩空間 RGB HSV YUV

參考資料

鏈接:https://www.jianshu.com/p/3e44c2262775

RGB色彩空間

在圖像處理中最常用的就是RGB色彩空間,非常容易被理解,用三個顏色分量來表示某個具體顏色。
在這裏插入圖片描述
他們組成三維正交座標系統,該系統中任何顏色都落入RGB彩色立方體內,在RGB顏色模型中,黑色在原點處,白色位於離原點最遠的角上,灰度級沿着這兩點的連線分佈,每一個分量圖像都是其原色圖像。
在這裏插入圖片描述
三原色RGB混合能形成其他的顏色,並不是說物理上其他顏色的光是由三原色的光混合形成的,每種單色光都有自己獨特的光譜,如黃光是一種單色光,但紅色與綠色混合能形成黃色,原因是人的感官系統所致,與人的生理系統有關。
只能說“將三原色光以不同的比例複合後,對人的眼睛可以形成與各種頻率的可見光等效的色覺。

存儲類型

(1)RGB555:16位的RGB格式,各分量都用5位表示,剩下的一位不用。

高字節 -> 低字節(根據內存大小端) XRRRRRGGGGGBBBBB(X代表不用)

(2)RGB565:16位的RGB格式,但是R佔用5位,G佔用6位,B佔用5位。

(3)RGB24:24位的RGB格式,各分量佔用8位,取值範圍爲0-255。

(4)RGB32:32位的RGB格式,各分量佔用8位,剩下的8位作Alpha通道或者不用。

(5)RGB222:8位的RGB格式,各分量佔用2bit位,剩下的2bit位不用!

爲什麼三原色可以表示不同的色彩,基本的原理是吸收倆種,反射另一種;把黃色顏料和青色顏料混合起來,因爲黃色顏料吸收藍光,青色顏料吸收紅光,因此只有綠色光反射出來,這就是黃色顏料加上青色顏料形成綠色的道理。

HSV色彩空間

而HSV模型,是針對用戶觀感的一種顏色模型,側重於色彩表示,什麼顏色、深淺如何、明暗如何

H:色彩 ,就是我們平時所說的顏色,紅、黃、橘紅等 取值範圍是0°~360° ,從紅色開始 ,逆時針方向計算,紅色爲0°,綠色爲120°,藍色爲240°。
S:飽和度,色彩的深淺度(0~100%)
V:明度,色彩的色調(0~100%)
在這裏插入圖片描述

有個很棒的理解方式:HSV模型對應於畫家配色的方法。畫家用改變色濃和 色深的方法從某種純色獲得不同色調的顏色,在一種純色中加入白色以改變色濃,加入黑色以改變色深,同時 加入不同比例的白色,黑色即可獲得各種不同的色調。

HSV對用戶來說是一種直觀的顏色模型。我們可以從一種純色彩開始,即指定色彩角H,並讓V=S=1,然後我們可以通過向其中加入黑色和白色來得到我們需要的顏色。增加黑色可以減小V而S不變,同樣增加白色可以減小S而V不變。例如,要得到深藍色,V=0.4
S=1 H=240度。要得到淡藍色,V=1 S=0.4 H=240度。
–百度百科

在這裏插入圖片描述

如果我們把紅色,也就是H爲0°,做個切片,那麼可以更好的分析色調 ,飽和度,亮度的關係
關鍵點:
當S=1 V=1時,H所代表的任何顏色被稱爲純色;
當S=0時,顏色最淺,最淺被描述爲灰色(灰色也有亮度,黑色和白色也屬於灰色),灰色的亮度由V決定,此時H無意義;
當V=0時,顏色最暗,最暗被描述爲黑色,因此此時H(無論什麼顏色最暗都爲黑色)和S(無論什麼深淺的顏色最暗都爲黑色)均無意義。
下面是當H=0度 即爲紅色時,S和V組成的平面:
在這裏插入圖片描述
在這張圖中,S沿橫軸從左到右0-1增長 V沿縱軸由下到上0-1增長
可以看到,當S=0,即矩形左邊的豎線邊緣處,呈不同深淺的灰色
當V=0,即矩形下班的橫線邊緣處,呈黑色
當S=0 V=1時,此時顏色最亮,但也最淺。也就是矩形的左上角,呈白色。
當S=1(S=0) V=0時,顏色最深(最淺),但最暗,均體現爲黑色
當S=1 V=1時,在矩形的右上角,就是純色的紅色,也就是我們常用的RGB(255, 0, 0)

與HSI的區別

HSV是(色相hue, 飽和度saturation, 明度value) ,而HSI是(色相hue, 飽和度saturation, 亮度lightness)

與HSV非常相似,僅用亮度(lightness)替代了明度(brightness)

二者區別在於,一種純色的明度等於白色的明度,而純色的亮度等於中度灰的亮度

HSV是一個顏色的子集,並不能表示所有顏色

與RGB的聯繫

  1. 亮度V就是RGB值中最大的那個值進行歸一化。也就是說 V = max(R, G, B)/255.0f;
    可印證當V=0時,max(R, G, B)=0,也就是R=G=B=0,即爲黑色。
  2. 深淺度S是RGB中最大值和最小值的差值與最大值的比值。設RGBMax=max(R,G,B) RGBMin=min(R,G,B) 那麼S= (RGBMax-RGBMin)/(float)RGBMax
    可印證當S=0時,RGBMax-RGBMin == 0,即R ==G ==B,此時顏色呈不同程度的灰色(由白到黑,亮度由V而定,因爲V=RGBMax*100/255,V越高,RGBMax ==R ==G ==B就越高,灰色越亮))。這也可以從上面給出的矩形圖看出

RGB2HSV
在這裏插入圖片描述
HSV2RGB
在這裏插入圖片描述

爲什麼選用HSV

在圖像處理中,通常情況下我們不會直接對RGB圖像做處理,這主要是因爲RGB與人類的視覺感知相差較遠,而HSV是接近人視覺的

比如,某些由於光照不同造成的視覺感知不同的場景下,我們通常用Value這個通道進行計算,通過計算梯度,可以較好的提取物體邊緣。

再比如某些場景下,前景飽和度較高,背景採用飽和度較低的顏色來襯托前景,這時Saturation這個通道的信息就非常有用了。

再比如,在某些室內場景下,風格較爲單一,一般一個物體只有一種顏色,這時候Hue這個通道就顯得尤爲重要了。

總之,HSV色彩空間在圖像處理領域應用非常廣泛,一般通過採用合適的通道就能完成大多數圖像預處理工作。

YUV色彩空間

YUV細分的話有Y’UV,YUV,YCbCr,YPbPr等類型,其中YCbCr主要用於數字信號。一般在做數字圖像處理時,所講的YUV大多是指YCbCr。YCbCr 有許多取樣格式, 如4∶4∶4 , 4∶2∶2 , 4∶1∶1 和4∶2∶0。

分類

以最常用的 444 422 420 爲例子

  • YUV 4:4:4採樣,每一個Y對應一組UV分量。

  • YUV 4:2:2採樣,每兩個Y共用一組UV分量。

  • YUV 4:2:0採樣,每四個Y共用一組UV分量。

存儲

YUV的存儲格式有兩大類:packed、planar和SemiPlanar

  • 對於packed的YUV格式,每個像素點的Y,U,V是連續交錯存儲的。
  • 對於planar的YUV格式,先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,隨後是所有像素點的V。
  • 對於SemiPlanar,則是先連續存儲所有像素點的Y,再連續交錯U和V。
    先說複雜一些的packed方式

packed

  • 對於444的packed 來說 內存排列是固定的Y1 U1 V1 Y2 U2 V2 對於

  • 對於422來說,情況稍微複雜點,每兩個Y共用一組UV分量

    其他的VYUY422,YUYV422,YVYU422只不過是數據矩陣中Y,U,V順序差別:

    VYUY422: V1 Y1 U1 Y2 V2 Y3 U2 Y4 …

    YUYV422(YUY2): Y1 U1 Y2 V1 Y3 U2 Y4 V2 …

    YVYU422: Y1 V1 Y2 U1 Y3 V2 Y4 U2 …
    在這裏插入圖片描述

  • 對於420來說,每四個Y共用一組UV分量
    在這裏插入圖片描述

planar 和 SemiPlanar

422 planar
在這裏插入圖片描述
422 SemiPlanar
在這裏插入圖片描述
420 planar
在這裏插入圖片描述
420 SemiPlanar
在這裏插入圖片描述

其中YUV420P和YUV420SP根據U、V的順序,又可分出2種格式。
YUV420P:U前V後即YUV420P,也叫I420,
V前U後,叫YV12(YV表示Y後面跟着V,12表示12bit)。
YUV420SP:U前V後叫NV12,
V前U後叫NV21。
數據排列如下:
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP

常見枚舉

OpenNI

Astra SDK(奧比中光深度相機開發包)

typedef enum

{

// Depth

ONI_PIXEL_FORMAT_DEPTH_1_MM = 100,

ONI_PIXEL_FORMAT_DEPTH_100_UM = 101,

ONI_PIXEL_FORMAT_SHIFT_9_2 = 102,

ONI_PIXEL_FORMAT_SHIFT_9_3 = 103,

// Color

ONI_PIXEL_FORMAT_RGB888 = 200,

ONI_PIXEL_FORMAT_YUV422 = 201,

ONI_PIXEL_FORMAT_GRAY8 = 202,

ONI_PIXEL_FORMAT_GRAY16 = 203,

ONI_PIXEL_FORMAT_JPEG = 204,

ONI_PIXEL_FORMAT_YUYV = 205,

} OniPixelFormat;

LINUX_VIDEODEV2


#define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y','U','Y','V') /* 16  YUV 4:2:2     */

#define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U','Y','V','Y') /* 16  YUV 4:2:2     */

#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16  YVU422 planar */

#define V4L2_PIX_FMT_NV12    v4l2_fourcc('N','V','1','2') /* 12  Y/CbCr 4:2:0  */

#define V4L2_PIX_FMT_NV21    v4l2_fourcc('N','V','2','1') /* 12  Y/CrCb 4:2:0  */

#define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y','V','1','2') /* 12  YVU 4:2:0     */

#define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y','U','1','2') /* 12  YUV 4:2:0     */

微軟 YUV格式定義

GUID Format Sampling Packed or planar Bits per channel
MEDIASUBTYPE_AYUV AYUV 4:4:4 Packed 8
MEDIASUBTYPE_YUY2 YUY2 4:2:2 Packed 8
MEDIASUBTYPE_UYVY UYVY 4:2:2 Packed 8
MEDIASUBTYPE_IMC1 IMC1 4:2:0 Planar 8
MEDIASUBTYPE_IMC3 IMC2 4:2:0 Planar 8
MEDIASUBTYPE_IMC2 IMC3 4:2:0 Planar 8
MEDIASUBTYPE_IMC4 IMC4 4:2:0 Planar 8
MEDIASUBTYPE_YV12 YV12 4:2:0 Planar 8
MEDIASUBTYPE_NV12 NV12 4:2:0 Planar 8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章