我正在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) = 193
和V(1,1) = 111
和B(1,1) = 74
。当我手动计算Cb时,应该给出96(四舍五入),而Cb(1,1)
给出165,我不知道为什么?
答案 0 :(得分:0)
@GlobalTraveler是正确的。您需要先将图像转换为两倍。
在MATLAB中,使用饱和算法将double
乘以uint8
会得到uint8
。因此-0.1687*R
都是零。
要将图像转换为double
,请使用im2double(img)
或简单地使用double(img)
,具体取决于您要保留原始范围[0,255],还是将其转换为[0] ,1](im2double
也是如此)。