在Matlab中将灰度图像转换为彩色

时间:2014-07-20 14:58:06

标签: image matlab image-processing

我使用以下代码行将彩色图像转换为灰度图像:

clc;
clear all;
close all;

[FileName,PathName] = uigetfile('*.jpg','Select the Cover Image');
file = fullfile(PathName,FileName);
disp(['User selected : ', file]);
cover = imread(file);
%cover = double(cover);

figure;
subplot(1,2,1);
imshow(uint8(cover),[]);
title('Cover image');


red = cover(:,:,1);
green = cover(:,:,2);
blue = cover(:,:,3);
a = zeros(size(cover, 1), size(cover, 2));

just_red = cat(3, red, a, a);
figure, imshow(just_red);

just_green = cat(3, a, green, a);
figure, imshow(just_green);

just_blue = cat(3, a, a, blue);
figure, imshow(just_blue);

[r1 r2 a] = size(just_red);
disp(a); disp(r1); disp(r2);
coverbw = rgb2gray(cover);

original = gray2rgb(coverbw);
figure, imshow(original);

将原始图像转换为灰度后,我想将灰度图像转换回原始图像。我尝试使用以下代码行来完成这项工作:

original = gray2rgb(coverbw);

但是我收到了以下错误:

??? Undefined function or method 'gray2rgb' for input arguments of type 'uint8'.

Error in ==> main at 35
    original = gray2rgb(coverbw);

有人可以帮助我从其灰度版本(即coverbw)获取原始图像,而不是将红色,绿色和蓝色图像的三个独立组件组合在一起吗?

感谢。

1 个答案:

答案 0 :(得分:4)

将RGB图像转换为灰色时,每个像素丢失颜色信息 每像素I的灰度值i, j由公式确定:

I(i,j) = 0.299*R(i,j) + 0.587*G(i,j) + 0.114*B(i,j)

数学上,这意味着如果您知道R, GB,则可以确定I
,如果您只知道I 无法恢复RGB,因为您只有一个具有三个未知数的方程,因此可以存在产生相同强度I的无限多种可能的颜色组合。

如果您正在处理2D图像的加扰,您可以将每个频道RGB视为独立的2D信号,对每个信号进行加扰,然后合并重建的信号

到最后的彩色图像
rgb = cat(3, recoveredR, recoveredG recoveredB );