3

画像を 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);

ダウンサンプリングを実行するにはどうすればよいですか?

4

1 に答える 1

4

ダウンサンプリングによって 4:4:4 から 4:2:2 への Chroma サブサンプリングを具体的に意味する場合、それを行う (そしてチャネルの元のサイズを維持する) 1 つの方法は、1 つおきのピクセルを前の値で手動で上書きすることです。

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()

于 2013-05-20T02:39:12.340 に答える