2014-07-20 139 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