MATLAB中,怎样将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图像','(和原图像一致)'})

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-07
按一下操作:
A=double(m)
G=mat2gray(A);
figure(1);imshow(G)
imwrite(G,'kkk.BMP')
注意:m是灰度值矩阵.
第2个回答  2011-03-02
设原图为A,灰度图为B
则B=rgb2gray(A);
figure;
inshow(B);追问

如何复原回RGB图像

参考资料:百度一下

相似回答