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

标签 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,而不是组合红、绿和蓝色图像的三个独立组件?

谢谢。

最佳答案

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

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 图像进行置乱,则可以将每个 channel RGB 视为独立的 2D 信号,对每个信号进行置乱,然后将重建的信号组合成最后的彩色图像

rgb = cat(3, recoveredR, recoveredG recoveredB );

关于image - 在 Matlab 中将灰度图像转换为彩色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851703/

相关文章:

ios - 获取图像的像素值并裁剪图像的黑色部分 : Objective C

css - 图片旁边的换行和不换行段落

c# - 使用 mathdotnet 的 Matlab 等效函数

c - 我想在 OpenCV 的不同窗口中显示输出图像

matlab - 替换字符串中的几个不同字符

algorithm - 如何获得穿过正方形的线段的长度?

c++ - OpenCV 从 B/W 转换为 RGB

css - 流体图像 - 纵向/横向

Android setImageURI 内存不足错误

c++ - glTexSubImage 会导致黑色纹理,而 glTexImage 效果很好