用命令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圖像','(和原圖像壹致)'})