【问题标题】:Convert RGB image to YUV and convert back in matlab将RGB图像转换为YUV并在matlab中转换回来
【发布时间】:2013-10-24 01:36:14
【问题描述】:

我对 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 值,那就更好了。

我会非常感谢任何形式的帮助。

【问题讨论】:

    标签: image matlab image-processing image-conversion


    【解决方案1】:

    我不再拥有 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

    【讨论】:

    • 谢谢,它起到了神奇的作用。我猜这是一个非常新手的错误。
    【解决方案2】:

    图像处理工具箱中有执行此操作的函数:ycbcr2rgbrgb2ycbcr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-31
      • 2021-12-15
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多