使用matlab对图像的色度分量进行下采样

时间:2013-05-20 00:00:38

标签: image matlab image-processing

我想将图像分解为Y,Cb,Cr组件,然后在YCbCr域中执行下采样以形成4:2:2格式。

将图像分解为YCbCr的代码:

img=imread('flowers.tif');
figure(1), imshow(img);title('original image');
Y=0.299*img(:,:,1)+0.587*img(:,:,2)+0.114*img(:,:,3);
Cb=-0.1687*img(:,:,1)-0.3313*img(:,:,2)+0.5*img(:,:,3)+128;
Cr=0.5*img(:,:,1)-0.4187*img(:,:,2)-0.0813*img(:,:,3)+128;

%print Y, Cb, Cr components

figure(2), subplot (1,3,1), imshow(Y), title('Y,Cb,Cr components'),
subplot(1,3,2), imshow(Cb),subplot(1,3,3), imshow(Cr);

现在我需要做什么来执行下采样?

1 个答案:

答案 0 :(得分:4)

如果通过下采样特别指的是从4:4:4到4:2:2的色度子采样,那么一种方法(并保持通道的原始大小)是用前一个手动覆盖每个其他像素值:

Cb(:, 2:2:end) = Cb(:, 1:2:end-1);
Cr(:, 2:2:end) = Cr(:, 1:2:end-1);

如果您只想删除一半列,请使用:

Cb(:, 2:2:end) = [];
Cr(:, 2:2:end) = [];

同样在Matlab中,您不需要为YCbCr转换编写自己的函数。相反,您可以使用rgb2ycbcr()