我是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值,那就更好了。
我会非常感谢任何帮助。
答案 0 :(得分: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
和数据类型的更多讨论,请参阅this。
答案 1 :(得分:0)
图像处理工具箱中有一些功能可以执行此操作:ycbcr2rgb
和rgb2ycbcr
。