从RGB计算YCbCr的结果错误

时间:2018-12-22 23:17:37

标签: matlab image-processing rgb

我正在MATLAB中使用RGB到YCbCr转换器脚本,只有在计算Cb向量时一切似乎都很好,似乎MATLAB结果不合理,我需要将代码移植到Python,但我不理解MATLAB结果。

我尝试手动计算Y和Cr向量的第一个元素,尽管方程很简单,但似乎很合理,但Cb向量却不合理

clear variables
close all
clc

fic='test.jpg';
img=imread(fic);
ti=size(img);

R=img(:,:,1);
V=img(:,:,2);
B=img(:,:,3);

Y = 0.299*R+0.587*V+0.114*B;

Cb = -0.1687*R-0.3313*V+0.5*B+128;

Cr = 0.5*R-0.4187*V-0.0813*B+128;

因此,我们有R(1,1) = 193V(1,1) = 111B(1,1) = 74。当我手动计算Cb时,应该给出96(四舍五入),而Cb(1,1)给出165,我不知道为什么?

1 个答案:

答案 0 :(得分:0)

@GlobalTraveler是正确的。您需要先将图像转换为两倍。

在MATLAB中,使用饱和算法将double乘以uint8会得到uint8。因此-0.1687*R都是零。

要将图像转换为double,请使用im2double(img)或简单地使用double(img),具体取决于您要保留原始范围[0,255],还是将其转换为[0] ,1](im2double也是如此)。