古詩詞大全網 - 成語故事 - 如何把灰度像轉化為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圖像','(和原圖像壹致)'})