RGB彩色空间和YIQ、灰度等的转化
生活随笔
收集整理的這篇文章主要介紹了
RGB彩色空间和YIQ、灰度等的转化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近看到不同色彩空間的轉化,RGB可以到灰度但是灰度不能到RGB。
一般彩色圖像至少需要三個維度的信息,比如RGB、HSV、YIQ等等。每種顏色相當于一個三維向量,不同的表示法則相當于同一個向量在不同的坐標軸下(即不同的基下)的表示。而將其變為灰度后,只剩下一個維度,相當于將三維向量投影為一維標量一樣,是不可能回復為原來的向量的。要想恢復,就必須儲存另外兩個維度的信息,合在一起還是三維向量,這還不如直接保存原來的彩色圖像數據。如果你一定要將其分解為灰度基和另兩個基下的表示,可以用YIQ表示,他的Y分量就和灰度數據等價,美國電視信號NTSC就是YIQ表示的,因此可以和黑白電視兼容(黑白電視只能接受Y信號,得到灰度圖像)。用命令rgb2ntsc和ntsc2rgb可以將數據在RGB和YIQ之間互換。下面是例子clear;clc;
RGB = imread('peppers.png');%RGB圖像
YIQ = rgb2ntsc(RGB);%YIQ表示
GRAY=rgb2gray(RGB);%灰度圖像,它和YIQ中的Y等價,只不過灰度圖像的值是0~255的整數,而Y是0~1的實數,即GRAY=uint8(255*YIQ(:,:,1))
RGB_restore=ntsc2rgb(YIQ);%從YIQ表示恢復的RGB圖像
subplot 221
imshow(RGB);title('原圖像RGB')
subplot 222
imshow(GRAY);title('灰度圖GRAY')
subplot 224
imshow(YIQ(:,:,1));title({'轉換為YIQ后的Y分量','(和灰度圖等價)'})
subplot 223
imshow(RGB_restore);title({'從YIQ表示恢復的RGB圖像','(和原圖像一致)'})當然,這種分解是不唯一的,只要保證三個基互不相關即可。因此我們可以自己定義分解方法。比如,我們要將RGB表示轉換為RGg表示,也就是用灰度分量g取代藍色分量B,紅色分量R和綠色分量G不變。我們可以從RGg計算出藍色分量B,因為灰度g=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,就可以回復原來的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計算得到的藍色分量B,他和原圖像中的藍色分量是一致的
subplot 131
imshow(RGB);title('原圖像RGB')
subplot 132
imshow(g);title('灰度圖g')
subplot 133
imshow(uint8(cat(3,R,G,B)));title({'從RGg表示恢復的RGB圖像','(和原圖像一致)'})
總結
以上是生活随笔為你收集整理的RGB彩色空间和YIQ、灰度等的转化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FLV视频格式解码软件开发
- 下一篇: 利用GSensor让屏幕实现360度旋转