YCbCr 到 RGB 转换 MATLAB 使用 ycbr2rgb 结果是粉红色的图片

YCbCr to RGB conversion MATLAB using ycbr2rgb results in pink picture

我正在尝试使用 MATLAB 的函数 ycbcr2rgb 将 YCbCr 图像转换为 RGB。我生成的图片最终变成了粉红色,然后再转换回来(应该给我原始图片吗?)创建另一个主要是灰色的图像。

作为参考,我尝试通过公式单独转换每个通道,结果相同。

我正在使用 bigtiff 格式,因为文件很大,如果有任何帮助,imfinfo 会显示使用 JPEG 进行压缩。

这是我的代码:

x=imread('picture.tiff','Index',9); %(9 subresolutions)
rgb=ycbcr2rgb(x);
imshow(rgb);

会不会是因为 MATLAB 函数使用 YCbCr 的原始定义,使用的范围是 16-235 而我的图像是 0-255?如果是这样,是否有任何方法可以使用 inbuild 函数更正此问题?

我添加了图片here,第一张图片显示的是imshow(rgb),而第二张图片是原始的ycbcr。我注意到,在 Windows 图片查看器中它实际上显示正确,只是 MATLAB 的 imshow 在转换后显示为粉红色。

您是否有机会为我指明正确的方向? 谢谢 桑尼

这个link给出了所有的换算公式: http://www.easyrgb.com/index.php?X=MATH&H=11

下面的代码将图像从 RGB space 转换为 YCbCr space 并返回。

rgb = imread('board.tif');
imshow(rgb);
figure;
ycbcr = rgb2ycbcr(rgb);
imshow(ycbcr);
figure;
rgb2 = ycbcr2rgb(ycbcr);
imshow(rgb2);

仅使用 MATLAB 内置函数。此外,如果您在从 ycbcr 转换为 rgb 时遇到问题,您应该尝试将图像转换为其他形式,然后将该形式转换为 RGB。 (肮脏的技巧)

显然 imread 在加载时将 YCbCr 图像读取为 RGB,这就是问题发生的原因。

感谢大家的帮助。

imread documentation

只需将图像除以 256,然后再将其转换回 RGB。

y = ycbcr2rgb(z/256); % z holds the YCbCr image.

对我有用。 希望有所帮助:)