2014-07-20 144 views
2

我使用下面的代码行的彩色图像转换成灰度图像:转换为灰度图像有色在Matlab中

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获得原始图片而不是结合红色,绿色和蓝色图像的三个单独组件。

谢谢。

+0

您希望如何从灰色图像中恢复丢失的颜色信息? – Shai

+0

其实,我正在做图像置乱的阿诺德变换。该代码适用于二维图像。解密原始图像后,我得到一个灰度图像。但是,我想要一个彩色图像。是否可以从我用红色,绿色和蓝色保存的信息为该灰度图像添加颜色? – competesingh

+0

@Shai,我将图像的信息保存在红色,绿色和蓝色的阵列中。你能帮助我恢复颜色吗? – competesingh

回答

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); 
+0

先生我正在保存代码中写的红色,绿色和蓝色组件。 – competesingh

+0

@competesingh你可以根据你在问题中构造这些数组的方式来执行'rgb = just_red + just_green + just_blue;'。 – Shai

+0

使用代码'rgb = cat(3,recoveredR,recoveredG recoveredB);'我收到以下错误:'???错误使用==> imageDisplayValidateParams> validateCData at 114 不支持的维度.. ..你能帮我吗?我很困惑这个尺寸错误..我无法得到它。 – competesingh