我使用以下代码行将彩色图像转换为灰度图像:
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
,而不是组合红、绿和蓝色图像的三个独立组件?
谢谢。
最佳答案
将 RGB 图像转换为灰色时,您会丢失每个像素的颜色信息。
每个像素i, j
的灰度值I
由以下公式确定:
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 图像进行置乱,则可以将每个 channel R
、G
和 B
视为独立的 2D 信号,对每个信号进行置乱,然后将重建的信号组合成最后的彩色图像
rgb = cat(3, recoveredR, recoveredG recoveredB );
关于image - 在 Matlab 中将灰度图像转换为彩色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851703/