YUV-RGB的转换公式不对还是我的程序不对?

来源:百度知道 编辑:UC知道 时间:2024/05/25 07:50:08
a=imread('男43岁 面色萎黄 10AM 闪光~.JPG');
R=a(:,:,1);
G=a(:,:,2);
B=a(:,:,3);
Y = 0.299*R + 0.587*G + 0.114*B;
U = -0.147*R - 0.289*G + 0.436*B;
V = 0.615*R - 0.515*G - 0.100*B;
% Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16;
% V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128;
% U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128;
R1 = Y + 1.14*V;
G1 = Y - 0.39*U - 0.58*V;
B1 = Y + 2.03*U;
% R1 = 1.164*(Y - 16) + 1.596*(V - 128);
% G1 = 1.164*(Y - 16) - 0.813*(V - 128) - 0.391*(U - 128);
% B1 = 1.164*(Y - 16) + 2.018*(U - 128);
A(:,:,1)=R1;
A(:,:,2)=G1;
A(:,:,3)=B1;
subplot(1,2,1);imshow(a);title('原图')
subplot(1,2,2);imshow(A);title('同态滤波后的图象')

很奇怪,做Y值滤波的时候图像颜色怎么都不对,于是单独把RGB转成YUV再转回来,发现颜色也不对,多了一层蓝色(无论使用程序里的公式还是注释掉的公式都一样),请问各位大虾什么地方有问题?还是这公式本身就有问题?
matlab程序

matlab不会,但是我觉得是你转换公式有问题.我以前编过一个图像程序用的是delphi但是公式应该是一样的记得rgb转yuv是至少有个必须乘0.5的参数,太久了记不太清,当时参考一本叫"delphi数字图像处理及高级应用"的书,不错的,虽然是delpi但是各种应用的算法都是通用的.你可以找下,我记得网上有扫描版本的.