我使用以下代码行将彩色图像转换为灰度图像:
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 :(得分:4)
将RGB图像转换为灰色时,每个像素丢失颜色信息
每像素I
的灰度值i, j
由公式确定:
I(i,j) = 0.299*R(i,j) + 0.587*G(i,j) + 0.114*B(i,j)
数学上,这意味着如果您知道R, G
和B
,则可以确定I
。
但,如果您只知道I
无法恢复R
,G
和B
,因为您只有一个具有三个未知数的方程,因此可以存在产生相同强度I
的无限多种可能的颜色组合。
如果您正在处理2D图像的加扰,您可以将每个频道R
,G
和B
视为独立的2D信号,对每个信号进行加扰,然后合并重建的信号
rgb = cat(3, recoveredR, recoveredG recoveredB );