我的任务是对一系列 JPEG 执行 4:2:0 色度二次采样(颜色压缩)。
第一步是确保我可以生成 Y、Cb 和 Cr 值,然后转换回 RGB 并显示图像。然后我可以回去添加我的子采样逻辑。
我很确定我有正确的公式来生成 Y、Cb 和 Cr 值,但我无法找出返回 RGB 和打印的正确方法。
我们不允许使用任何内置函数(这通常会出现在帮助解决这个问题的过程中)。
我附上了如何获取 Y Cb 和 Cr 值以及如何尝试恢复 RGB 的代码。
目前,在这段摘录之后在 newImage 上运行“imshow”时出现绿屏。
%Obtain R,G,B values
R=double(orig(:,:,1))./255;
G=double(orig(:,:,2))./255;
B=double(orig(:,:,3))./255;
%Calculate Y,Cb, Cr values
Y = (0.299*R) + (0.587*G) + (0.114*B) + 0;
Cb = (-0.168736*R) + (-0.331264*G) + (0.5*B) + 0.5;
Cr = (0.5*R) + (-0.418688*G) - (0.081312*B) + 0.5;
%Calculate new R,G,B
new_R = Y + (1.402*(Cr-128));
new_G = Y-(0.34414*(Cb-128))-(0.71414*(Cr-128));
new_B = Y+(1.772*(Cb-128));
%Fill new Image
newImage(:,:,1) =double(new_R).*255;
newImage(:,:,2) = double(new_G).*255;
newImage(:,:,3) = double(new_B).*255;
orig 是原始图像,newImage 是我在这段摘录之后运行的“imshow”。