将RGB图像转换为YUV并在Matlab中转换回来

4

我对Matlab非常陌生。我正在尝试将RGB图像转换为YUV,并将其转换回RGB。以下是我的代码:

RGB = imread('ist.jpg');

R = RGB(:,:,1);
G = RGB(:,:,2);
B = RGB(:,:,3);

Y = 0.299 * R + 0.587 * G + 0.114 * B;
U = -0.14713 * R - 0.28886 * G + 0.436 * B;
V = 0.615 * R - 0.51499 * G - 0.10001 * B;

R = Y + 1.139834576 * V;
G = Y -.3946460533 * U -.58060 * V;
B = Y + 2.032111938 * U;

RGB = cat(3,R,G,B);
imshow(RGB); 

Matlab显示的最终图像非常蓝色,与初始RGB图像非常不同。另外,当我比较某些像素的蓝色通道值之前和之后,我得到的值是不同的。我做错了什么。

如果有更高效、更短的方法让我访问图像的Y、U和V值,那就更好了。

无论任何帮助,我都会非常感激。

2个回答

3

很抱歉,我现在没有MATLAB访问权限,无法测试这个问题。然而,imread 函数很可能返回 uint8 数据类型。请使用 whos 命令查看数据类型。如果是 uint8,则 RGB->YUV->RGB 转换会发生截断。尝试以下方法:

RGB = double(imread('ist.jpg'));   % convert to double

% RGB->YUV->RGB like you have them in the current code    

RGB = cat(3,R,G,B)./255;    % since it's a double now, need 0..1 range for imshow.
                            % Divide 0..255 by 255 to get 0..1.
imshow(RGB); 

有关 imshow 和数据类型的更多讨论,请参见此处


谢谢,它起了魔法作用。我想这是一个非常新手的错误。 - Umut Ulutas

0

在图像处理工具箱中有函数可以实现这个功能:ycbcr2rgbrgb2ycbcr


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接