RGB彩色空间和YIQ、灰度等的转化
生活随笔
收集整理的這篇文章主要介紹了
RGB彩色空间和YIQ、灰度等的转化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近看到不同色彩空間的轉(zhuǎn)化,RGB可以到灰度但是灰度不能到RGB。
一般彩色圖像至少需要三個(gè)維度的信息,比如RGB、HSV、YIQ等等。每種顏色相當(dāng)于一個(gè)三維向量,不同的表示法則相當(dāng)于同一個(gè)向量在不同的坐標(biāo)軸下(即不同的基下)的表示。而將其變?yōu)榛叶群?#xff0c;只剩下一個(gè)維度,相當(dāng)于將三維向量投影為一維標(biāo)量一樣,是不可能回復(fù)為原來的向量的。要想恢復(fù),就必須儲(chǔ)存另外兩個(gè)維度的信息,合在一起還是三維向量,這還不如直接保存原來的彩色圖像數(shù)據(jù)。如果你一定要將其分解為灰度基和另兩個(gè)基下的表示,可以用YIQ表示,他的Y分量就和灰度數(shù)據(jù)等價(jià),美國(guó)電視信號(hào)NTSC就是YIQ表示的,因此可以和黑白電視兼容(黑白電視只能接受Y信號(hào),得到灰度圖像)。用命令rgb2ntsc和ntsc2rgb可以將數(shù)據(jù)在RGB和YIQ之間互換。下面是例子clear;clc;
RGB = imread('peppers.png');%RGB圖像
YIQ = rgb2ntsc(RGB);%YIQ表示
GRAY=rgb2gray(RGB);%灰度圖像,它和YIQ中的Y等價(jià),只不過灰度圖像的值是0~255的整數(shù),而Y是0~1的實(shí)數(shù),即GRAY=uint8(255*YIQ(:,:,1))
RGB_restore=ntsc2rgb(YIQ);%從YIQ表示恢復(fù)的RGB圖像
subplot 221
imshow(RGB);title('原圖像RGB')
subplot 222
imshow(GRAY);title('灰度圖GRAY')
subplot 224
imshow(YIQ(:,:,1));title({'轉(zhuǎn)換為YIQ后的Y分量','(和灰度圖等價(jià))'})
subplot 223
imshow(RGB_restore);title({'從YIQ表示恢復(fù)的RGB圖像','(和原圖像一致)'})當(dāng)然,這種分解是不唯一的,只要保證三個(gè)基互不相關(guān)即可。因此我們可以自己定義分解方法。比如,我們要將RGB表示轉(zhuǎn)換為RGg表示,也就是用灰度分量g取代藍(lán)色分量B,紅色分量R和綠色分量G不變。我們可以從RGg計(jì)算出藍(lán)色分量B,因?yàn)榛叶萭=p*R+q*G+t*B(其中p=0.2989,q=0.5870,t=0.1140),于是B=(g-p*R-q*G)/t。于是我們只要保留R和G兩個(gè)顏色分量,再加上灰度圖g,就可以回復(fù)原來的RGB圖像。下面是例子clear;clc;
RGB = imread('peppers.png');%RGB圖像
g=rgb2gray(RGB);%灰度圖g
R=double(RGB(:,:,1));%紅色分量R
G=double(RGB(:,:,2));%綠色分量G,于是RGg就是一種我們自己定義的顏色表示方法了
p=0.2989;q=0.5870;t=0.1140;
B=(double(g)-p*R-q*G)/t;%通過RGg計(jì)算得到的藍(lán)色分量B,他和原圖像中的藍(lán)色分量是一致的
subplot 131
imshow(RGB);title('原圖像RGB')
subplot 132
imshow(g);title('灰度圖g')
subplot 133
imshow(uint8(cat(3,R,G,B)));title({'從RGg表示恢復(fù)的RGB圖像','(和原圖像一致)'})
總結(jié)
以上是生活随笔為你收集整理的RGB彩色空间和YIQ、灰度等的转化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FLV视频格式解码软件开发
- 下一篇: 嵌入式系统开发10——STM32串口通信